123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 'use strict'
- const BrowserResult = require('./browser_result')
- const helper = require('./helper')
- class BrowserCollection {
- constructor (emitter, browsers = []) {
- this.browsers = browsers
- this.emitter = emitter
- }
- add (browser) {
- this.browsers.push(browser)
- this.emitter.emit('browsers_change', this)
- }
- remove (browser) {
- if (helper.arrayRemove(this.browsers, browser)) {
- this.emitter.emit('browsers_change', this)
- return true
- }
- return false
- }
- getById (browserId) {
- return this.browsers.find((browser) => browser.id === browserId) || null
- }
- getNonReady () {
- return this.browsers.filter((browser) => !browser.isConnected())
- }
- areAllReady () {
- return this.browsers.every((browser) => browser.isConnected())
- }
- serialize () {
- return this.browsers.map((browser) => browser.serialize())
- }
- calculateExitCode (results, singleRunBrowserNotCaptured, config) {
- config = config || {}
- if (results.disconnected || singleRunBrowserNotCaptured) {
- return 1
- }
- if (results.skipped && config.failOnSkippedTests) {
- return 1
- }
- if (results.success + results.failed === 0 && !!config.failOnEmptyTestSuite) {
- return 1
- }
- if (results.error) {
- return 1
- }
- if (config.failOnFailingTestSuite === false) {
- return 0 // Tests executed without infrastructure error, exit with 0 independent of test status.
- }
- return results.failed ? 1 : 0
- }
- getResults (singleRunBrowserNotCaptured, config) {
- const results = { success: 0, failed: 0, skipped: 0, error: false, disconnected: false, exitCode: 0 }
- this.browsers.forEach((browser) => {
- results.success += browser.lastResult.success
- results.failed += browser.lastResult.failed
- results.skipped += browser.lastResult.skipped
- results.error = results.error || browser.lastResult.error
- results.disconnected = results.disconnected || browser.lastResult.disconnected
- })
- results.exitCode = this.calculateExitCode(results, singleRunBrowserNotCaptured, config)
- return results
- }
- clearResults () {
- this.browsers.forEach((browser) => {
- browser.lastResult = new BrowserResult()
- })
- }
- clone () {
- return new BrowserCollection(this.emitter, this.browsers.slice())
- }
- // Array APIs
- map (callback, context) {
- return this.browsers.map(callback, context)
- }
- forEach (callback, context) {
- return this.browsers.forEach(callback, context)
- }
- get length () {
- return this.browsers.length
- }
- }
- BrowserCollection.factory = function (emitter) {
- return new BrowserCollection(emitter)
- }
- module.exports = BrowserCollection
|