1 | var log = require('./logger').create()
|
2 |
|
3 | var 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 |
|
49 |
|
50 | setTimeout(function () {
|
51 | emitter.emit('run_complete', runningBrowsers, runningBrowsers.getResults())
|
52 | }, 0)
|
53 | }
|
54 | }
|
55 |
|
56 |
|
57 | emitter.bind(this)
|
58 | }
|
59 |
|
60 | module.exports = Executor
|