karma
Version:
Spectacular Test Runner for JavaScript.
61 lines (49 loc) • 1.63 kB
JavaScript
var log = require('./logger').create()
var Executor = function (capturedBrowsers, config, emitter) {
var self = this
var executionScheduled = false
var pendingCount = 0
var runningBrowsers
var schedule = function () {
var nonReady = []
if (!capturedBrowsers.length) {
log.warn('No captured browser, open %s//%s:%s%s', config.protocol, config.hostname,
config.port, config.urlRoot)
return false
}
if (capturedBrowsers.areAllReady(nonReady)) {
log.debug('All browsers are ready, executing')
log.debug('Captured %s browsers', capturedBrowsers.length)
executionScheduled = false
capturedBrowsers.clearResults()
capturedBrowsers.setAllToExecuting()
pendingCount = capturedBrowsers.length
runningBrowsers = capturedBrowsers.clone()
emitter.emit('run_start', runningBrowsers)
self.socketIoSockets.emit('execute', config.client)
return true
}
log.info('Delaying execution, these browsers are not ready: ' + nonReady.join(', '))
executionScheduled = true
return false
}
this.schedule = schedule
this.onRunComplete = function () {
if (executionScheduled) {
schedule()
}
}
this.onBrowserComplete = function () {
pendingCount--
if (!pendingCount) {
// Ensure run_complete is emitted in the next tick
// so it is never emitted before browser_complete
setTimeout(function () {
emitter.emit('run_complete', runningBrowsers, runningBrowsers.getResults())
}, 0)
}
}
// bind all the events
emitter.bind(this)
}
module.exports = Executor