1 | var EXECUTING = require('./browser').STATE_EXECUTING
|
2 | var Result = require('./browser_result')
|
3 |
|
4 | var Collection = function (emitter, browsers) {
|
5 | browsers = browsers || []
|
6 |
|
7 | this.add = function (browser) {
|
8 | browsers.push(browser)
|
9 | emitter.emit('browsers_change', this)
|
10 | }
|
11 |
|
12 | this.remove = function (browser) {
|
13 | var index = browsers.indexOf(browser)
|
14 |
|
15 | if (index === -1) {
|
16 | return false
|
17 | }
|
18 |
|
19 | browsers.splice(index, 1)
|
20 | emitter.emit('browsers_change', this)
|
21 |
|
22 | return true
|
23 | }
|
24 |
|
25 | this.getById = function (browserId) {
|
26 | for (var i = 0; i < browsers.length; i++) {
|
27 | if (browsers[i].id === browserId) {
|
28 | return browsers[i]
|
29 | }
|
30 | }
|
31 |
|
32 | return null
|
33 | }
|
34 |
|
35 | this.setAllToExecuting = function () {
|
36 | browsers.forEach(function (browser) {
|
37 | browser.state = EXECUTING
|
38 | })
|
39 |
|
40 | emitter.emit('browsers_change', this)
|
41 | }
|
42 |
|
43 | this.areAllReady = function (nonReadyList) {
|
44 | nonReadyList = nonReadyList || []
|
45 |
|
46 | browsers.forEach(function (browser) {
|
47 | if (!browser.isReady()) {
|
48 | nonReadyList.push(browser)
|
49 | }
|
50 | })
|
51 |
|
52 | return nonReadyList.length === 0
|
53 | }
|
54 |
|
55 | this.serialize = function () {
|
56 | return browsers.map(function (browser) {
|
57 | return browser.serialize()
|
58 | })
|
59 | }
|
60 |
|
61 | this.getResults = function () {
|
62 | var results = browsers.reduce(function (previous, current) {
|
63 | previous.success += current.lastResult.success
|
64 | previous.failed += current.lastResult.failed
|
65 | previous.error = previous.error || current.lastResult.error
|
66 | previous.disconnected = previous.disconnected || current.lastResult.disconnected
|
67 | return previous
|
68 | }, {success: 0, failed: 0, error: false, disconnected: false, exitCode: 0})
|
69 |
|
70 |
|
71 | results.exitCode = results.failed || results.error || results.disconnected ? 1 : 0
|
72 |
|
73 | return results
|
74 | }
|
75 |
|
76 |
|
77 | this.clearResults = function () {
|
78 | browsers.forEach(function (browser) {
|
79 | browser.lastResult = new Result()
|
80 | })
|
81 | }
|
82 |
|
83 | this.clone = function () {
|
84 | return new Collection(emitter, browsers.slice())
|
85 | }
|
86 |
|
87 |
|
88 | this.map = function (callback, context) {
|
89 | return browsers.map(callback, context)
|
90 | }
|
91 |
|
92 | this.forEach = function (callback, context) {
|
93 | return browsers.forEach(callback, context)
|
94 | }
|
95 |
|
96 |
|
97 | Object.defineProperty(this, 'length', {
|
98 | get: function () {
|
99 | return browsers.length
|
100 | }
|
101 | })
|
102 | }
|
103 | Collection.$inject = ['emitter']
|
104 |
|
105 | module.exports = Collection
|