UNPKG

1.63 kBJavaScriptView Raw
1var log = require('./logger').create()
2
3var Executor = function (capturedBrowsers, config, emitter) {
4 var self = this
5 var executionScheduled = false
6 var pendingCount = 0
7 var runningBrowsers
8
9 var schedule = function () {
10 var nonReady = []
11
12 if (!capturedBrowsers.length) {
13 log.warn('No captured browser, open %s//%s:%s%s', config.protocol, config.hostname,
14 config.port, config.urlRoot)
15 return false
16 }
17
18 if (capturedBrowsers.areAllReady(nonReady)) {
19 log.debug('All browsers are ready, executing')
20 log.debug('Captured %s browsers', capturedBrowsers.length)
21 executionScheduled = false
22 capturedBrowsers.clearResults()
23 capturedBrowsers.setAllToExecuting()
24 pendingCount = capturedBrowsers.length
25 runningBrowsers = capturedBrowsers.clone()
26 emitter.emit('run_start', runningBrowsers)
27 self.socketIoSockets.emit('execute', config.client)
28 return true
29 }
30
31 log.info('Delaying execution, these browsers are not ready: ' + nonReady.join(', '))
32 executionScheduled = true
33 return false
34 }
35
36 this.schedule = schedule
37
38 this.onRunComplete = function () {
39 if (executionScheduled) {
40 schedule()
41 }
42 }
43
44 this.onBrowserComplete = function () {
45 pendingCount--
46
47 if (!pendingCount) {
48 // Ensure run_complete is emitted in the next tick
49 // so it is never emitted before browser_complete
50 setTimeout(function () {
51 emitter.emit('run_complete', runningBrowsers, runningBrowsers.getResults())
52 }, 0)
53 }
54 }
55
56 // bind all the events
57 emitter.bind(this)
58}
59
60module.exports = Executor