testQueue.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /**
  2. * Creation of a queue and it's worker function
  3. */
  4. var util = require('util');
  5. var EventEmitter = require('events').EventEmitter;
  6. var async = require('async');
  7. var phantomasWrapper = require('./phantomasWrapper');
  8. var testQueue = function() {
  9. 'use strict';
  10. var currentTask = null;
  11. var self = this;
  12. var queue = async.queue(function(task, callback) {
  13. currentTask = task;
  14. console.log('Starting test ' + task.testId);
  15. phantomasWrapper.execute(task, function(err, json, results) {
  16. console.log('Test ' + task.testId + ' complete');
  17. currentTask = null;
  18. callback(err, json, results);
  19. self.emit('queueMoving');
  20. });
  21. });
  22. // Use this method to add a test to the queue
  23. this.push = queue.push;
  24. // Gives the position of a task in the queue
  25. // Returns 0 if it is the current running task
  26. // Returns -1 if not found
  27. this.indexOf = function(testId) {
  28. if (currentTask && currentTask.testId === testId) {
  29. return 0;
  30. }
  31. var position = -1;
  32. if (queue.length() > 0) {
  33. queue.tasks.forEach(function(task, index) {
  34. if (task.data.testId === testId) {
  35. position = index + 1;
  36. }
  37. });
  38. }
  39. return position;
  40. };
  41. this.testComplete = function(testId) {
  42. self.emit('testComplete', testId);
  43. };
  44. this.testFailed = function(testId) {
  45. self.emit('testFailed', testId);
  46. };
  47. };
  48. // extend the EventEmitter class
  49. util.inherits(testQueue, EventEmitter);
  50. module.exports = new testQueue();