98 lines
13 KiB
JavaScript
98 lines
13 KiB
JavaScript
|
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const events_1 = __importDefault(require("events"));
|
||
|
const lodash_1 = require("lodash");
|
||
|
const test_run_1 = require("./test-run");
|
||
|
const test_run_state_1 = __importDefault(require("./test-run-state"));
|
||
|
class LiveModeTestRunController extends events_1.default {
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.testWrappers = [];
|
||
|
this.expectedTestCount = 0;
|
||
|
this._testRunCtor = null;
|
||
|
this.testRuns = {};
|
||
|
this.allTestsCompletePromise = Promise.resolve();
|
||
|
this.completeAllRunningTests = lodash_1.noop;
|
||
|
this.on('all-tests-complete', () => this.completeAllRunningTests());
|
||
|
}
|
||
|
get TestRunCtor() {
|
||
|
if (!this._testRunCtor) {
|
||
|
this._testRunCtor = (0, test_run_1.TestRunCtorFactory)({
|
||
|
created: testRun => this._onTestRunCreated(testRun),
|
||
|
done: (testRun, forced) => this._onTestRunDone(testRun, forced),
|
||
|
readyToNext: testRun => this._onTestRunReadyToNext(testRun),
|
||
|
});
|
||
|
}
|
||
|
return this._testRunCtor;
|
||
|
}
|
||
|
setExpectedTestCount(testCount) {
|
||
|
this.expectedTestCount = testCount;
|
||
|
}
|
||
|
_getTestRuns() {
|
||
|
return [].concat(...Object.values(this.testRuns));
|
||
|
}
|
||
|
run() {
|
||
|
const readyToNextPromises = [];
|
||
|
const testRuns = [].concat(...Object.values(this.testRuns));
|
||
|
testRuns.forEach(testRun => {
|
||
|
if (testRun.finish) {
|
||
|
readyToNextPromises.push(testRun.readyToNextPromise);
|
||
|
testRun.finish();
|
||
|
}
|
||
|
});
|
||
|
this.testRuns = {};
|
||
|
return Promise.all(readyToNextPromises);
|
||
|
}
|
||
|
stop() {
|
||
|
this._getTestRuns().forEach(testRun => {
|
||
|
testRun.stop();
|
||
|
});
|
||
|
}
|
||
|
_getTestWrapper(test) {
|
||
|
return this.testWrappers.find(w => w.test === test);
|
||
|
}
|
||
|
_onTestRunCreated(testRun) {
|
||
|
this.allTestsCompletePromise = new Promise(resolve => {
|
||
|
this.completeAllRunningTests = resolve;
|
||
|
});
|
||
|
const connectionId = testRun.browserConnection.id;
|
||
|
this.testRuns[connectionId] = this.testRuns[connectionId] || [];
|
||
|
this.testRuns[connectionId].push(testRun);
|
||
|
}
|
||
|
_onTestRunDone(testRun) {
|
||
|
testRun.state = test_run_state_1.default.done;
|
||
|
const testWillBeRestarted = !this._isTestFinished(testRun);
|
||
|
const hasRunningTestsInOtherBrowsers = this._getTestRuns().some(t => t.state !== test_run_state_1.default.done);
|
||
|
if (!hasRunningTestsInOtherBrowsers && !testWillBeRestarted)
|
||
|
this.emit('all-tests-complete');
|
||
|
const browserTestRuns = this.testRuns[testRun.browserConnection.id];
|
||
|
const tests = (0, lodash_1.uniq)(browserTestRuns.map(t => t.test));
|
||
|
testRun.readyToNextPromise = new Promise(resolve => {
|
||
|
testRun.setReadyToNext = resolve;
|
||
|
});
|
||
|
const isLastTestRun = tests.length >= this.expectedTestCount;
|
||
|
if (testWillBeRestarted || !isLastTestRun)
|
||
|
return Promise.resolve();
|
||
|
return new Promise(resolve => {
|
||
|
testRun.finish = () => {
|
||
|
testRun.finish = null;
|
||
|
resolve();
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
_onTestRunReadyToNext(testRun) {
|
||
|
testRun.setReadyToNext();
|
||
|
}
|
||
|
_isTestFinished(testRun) {
|
||
|
const { quarantine, errs } = testRun;
|
||
|
if (!quarantine)
|
||
|
return true;
|
||
|
return quarantine.isFirstAttemptSuccessful(errs) || quarantine.isThresholdReached(errs);
|
||
|
}
|
||
|
}
|
||
|
exports.default = LiveModeTestRunController;
|
||
|
module.exports = exports.default;
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXZlL3Rlc3QtcnVuLWNvbnRyb2xsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsbUNBQW9DO0FBQ3BDLHlDQUFnRDtBQUNoRCxzRUFBOEM7QUFFOUMsTUFBTSx5QkFBMEIsU0FBUSxnQkFBWTtJQUNoRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFlBQVksR0FBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFRLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFrQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsYUFBSSxDQUFDO1FBRXBDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFBLDZCQUFrQixFQUFDO2dCQUNuQyxPQUFPLEVBQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO2dCQUN2RCxJQUFJLEVBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7Z0JBQ3RFLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7YUFDOUQsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELG9CQUFvQixDQUFFLFNBQVM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELEdBQUc7UUFDQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUUvQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUU1RCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDcEI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRW5CLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJO1FBQ0EsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZSxDQUFFLElBQUk7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGlCQUFpQixDQUFFLE9BQU87UUFDdEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBRWxELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGNBQWMsQ0FBRSxPQUFPO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLEdBQUcsd0JBQWMsQ0FBQyxJQUFJLENBQUM7UUFFcEMsTUFBTSxtQkFBbUIsR0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyx3QkFBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRHLElBQUksQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLG1CQUFtQjtZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFcEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQWEsSUFBQSxhQUFJLEVBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRS9ELE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMvQyxPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTdELElBQUksbUJBQW1CLElBQUksQ0FBQyxhQUFhO1lBQ3JDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxNQUFNL
|