UNPKG

1.4 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 executionScheduled = false
21 capturedBrowsers.clearResults()
22 capturedBrowsers.setAllToExecuting()
23 pendingCount = capturedBrowsers.length
24 runningBrowsers = capturedBrowsers.clone()
25 emitter.emit('run_start', runningBrowsers)
26 self.socketIoSockets.emit('execute', config.client)
27 return true
28 }
29
30 log.info('Delaying execution, these browsers are not ready: ' + nonReady.join(', '))
31 executionScheduled = true
32 return false
33 }
34
35 this.schedule = schedule
36
37 this.onRunComplete = function () {
38 if (executionScheduled) {
39 schedule()
40 }
41 }
42
43 this.onBrowserComplete = function () {
44 pendingCount--
45
46 if (!pendingCount) {
47 emitter.emit('run_complete', runningBrowsers, runningBrowsers.getResults())
48 }
49 }
50
51 // bind all the events
52 emitter.bind(this)
53}
54
55module.exports = Executor