63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
/**
|
|
* Creation of a queue and it's worker function
|
|
*/
|
|
|
|
var util = require('util');
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var async = require('async');
|
|
var phantomasWrapper = require('./phantomasWrapper');
|
|
|
|
|
|
var testQueue = function() {
|
|
'use strict';
|
|
|
|
var currentTask = null;
|
|
var self = this;
|
|
|
|
var queue = async.queue(function(task, callback) {
|
|
currentTask = task;
|
|
|
|
console.log('Starting test ' + task.testId);
|
|
|
|
phantomasWrapper.execute(task, function(err, json, results) {
|
|
console.log('Test ' + task.testId + ' complete');
|
|
currentTask = null;
|
|
callback(err, json, results);
|
|
self.emit('queueMoving');
|
|
});
|
|
});
|
|
|
|
|
|
// Use this method to add a test to the queue
|
|
this.push = queue.push;
|
|
|
|
|
|
// Gives the position of a task in the queue
|
|
// Returns 0 if it is the current running task
|
|
// Returns -1 if not found
|
|
this.indexOf = function(testId) {
|
|
if (currentTask && currentTask.testId === testId) {
|
|
return 0;
|
|
}
|
|
|
|
var position = -1;
|
|
if (queue.length() > 0) {
|
|
queue.tasks.forEach(function(task, index) {
|
|
if (task.data.testId === testId) {
|
|
position = index + 1;
|
|
}
|
|
});
|
|
}
|
|
return position;
|
|
};
|
|
|
|
// Forward testComplete
|
|
this.testComplete = function(testId) {
|
|
self.emit('testComplete', testId);
|
|
};
|
|
};
|
|
|
|
// extend the EventEmitter class using our Radio class
|
|
util.inherits(testQueue, EventEmitter);
|
|
|
|
module.exports = new testQueue(); |