testcafe
Version:
Automated browser testing for the modern web development stack.
91 lines • 12.2 kB
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 pinkie_1 = __importDefault(require("pinkie"));
const lodash_1 = __importDefault(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 = pinkie_1.default.resolve();
this.completeAllRunningTests = lodash_1.default;
this.on('all-tests-complete', () => this.completeAllRunningTests());
}
get TestRunCtor() {
if (!this._testRunCtor) {
this._testRunCtor = 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 pinkie_1.default.all(readyToNextPromises);
}
stop() {
this._getTestRuns().forEach(testRun => {
testRun.stop();
});
}
_getTestWrapper(test) {
return this.testWrappers.find(w => w.test === test);
}
_onTestRunCreated(testRun) {
this.allTestsCompletePromise = new pinkie_1.default(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 hasRunningTests = this._getTestRuns().some(t => t.state !== test_run_state_1.default.done);
if (!hasRunningTests)
this.emit('all-tests-complete');
const browserTestRuns = this.testRuns[testRun.browserConnection.id];
testRun.readyToNextPromise = new pinkie_1.default(resolve => {
testRun.setReadyToNext = resolve;
});
if (browserTestRuns.length < this.expectedTestCount || browserTestRuns.some(t => t.state !== test_run_state_1.default.done))
return pinkie_1.default.resolve();
return new pinkie_1.default(resolve => {
testRun.finish = () => {
testRun.finish = null;
testRun.state = test_run_state_1.default.done;
resolve();
};
});
}
_onTestRunReadyToNext(testRun) {
testRun.setReadyToNext();
}
}
exports.default = LiveModeTestRunController;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXZlL3Rlc3QtcnVuLWNvbnRyb2xsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsb0RBQTZCO0FBQzdCLG9EQUEwQjtBQUMxQix5Q0FBZ0Q7QUFDaEQsc0VBQThDO0FBRTlDLE1BQU0seUJBQTBCLFNBQVEsZ0JBQVk7SUFDaEQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBUSxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLFFBQVEsR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxnQkFBSSxDQUFDO1FBRXBDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyw2QkFBa0IsQ0FBQztnQkFDbkMsT0FBTyxFQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztnQkFDdkQsSUFBSSxFQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2dCQUN0RSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENB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QUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssd0JBQWMsQ0FBQyxJQUFJLENBQUM7WUFDN0csT0FBTyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE9BQU8sSUFBSSxnQkFBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNsQixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDdEIsT0FBTyxDQUFDLEtBQUssR0FBSSx3QkFBYyxDQUFDLElBQUksQ0FBQztnQkFDckMsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUIsQ0FBRSxPQUFPO1FBQzFCLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUFFRCxrQkFBZSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ3BpbmtpZSc7XG5pbXBvcnQgbm9vcCBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVGVzdFJ1bkN0b3JGYWN0b3J5IH0gZnJvbSAnLi90ZXN0LXJ1bic7XG5pbXBvcnQgVEVTVF9SVU5fU1RBVEUgZnJvbSAnLi90ZXN0LXJ1bi1zdGF0ZSc7XG5cbmNsYXNzIExpdmVNb2RlVGVzdFJ1bkNvbnRyb2xsZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLnRlc3RXcmFwcGVycyAgICAgID0gW107XG4gICAgICAgIHRoaXMuZXhwZWN0ZWRUZXN0Q291bnQgPSAwO1xuICAgICAgICB0aGlzLl90ZXN0UnVuQ3RvciAgICAgID0gbnVsbDtcblxuICAgICAgICB0aGlzLnRlc3RSdW5zICAgICAgICAgICAgICAgID0ge307XG4gICAgICAgIHRoaXMuYWxsVGVzdHNDb21wbGV0ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy5jb21wbGV0ZUFsbFJ1bm5pbmdUZXN0cyA9IG5vb3A7XG5cbiAgICAgICAgdGhpcy5vbignYWxsLXRlc3RzLWNvbXBsZXRlJywgKCkgPT4gdGhpcy5jb21wbGV0ZUFsbFJ1bm5pbmdUZXN0cygpKTtcbiAgICB9XG5cbiAgICBnZXQgVGVzdFJ1bkN0b3IgKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3Rlc3RSdW5DdG9yKSB7XG4gICAgICAgICAgICB0aGlzLl90ZXN0UnVuQ3RvciA9IFRlc3RSdW5DdG9yRmFjdG9yeSh7XG4gICAgICAgICAgICAgICAgY3JlYXRlZDogICAgIHRlc3RSdW4gPT4gdGhpcy5fb25UZXN0UnVuQ3JlYXRlZCh0ZXN0UnVuKSxcbiAgICAgICAgICAgICAgICBkb25lOiAgICAgICAgKHRlc3RSdW4sIGZvcmNlZCkgPT4gdGhpcy5fb25UZXN0UnVuRG9uZSh0ZXN0UnVuLCBmb3JjZWQpLFxuICAgICAgICAgICAgICAgIHJlYWR5VG9OZXh0OiB0ZXN0UnVuID0+IHRoaXMuX29uVGVzdFJ1blJlYWR5VG9OZXh0KHRlc3RSdW4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXN0UnVuQ3RvcjtcbiAgICB9XG5cbiAgICBzZXRFeHBlY3RlZFRlc3RDb3VudCAodGVzdENvdW50KSB7XG4gICAgICAgIHRoaXMuZXhwZWN0ZWRUZXN0Q291bnQgPSB0ZXN0Q291bnQ7XG4gICAgfVxuXG4gICAgX2dldFRlc3RSdW5zICgpIHtcbiAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCguLi5PYmplY3QudmFsdWVzKHRoaXMudGVzdFJ1bnMpKTtcbiAgICB9XG5cbiAgICBydW4gKCkge1xuICAgICAgICBjb25zdCByZWFkeVRvTmV4dFByb21pc2VzID0gW107XG5cbiAgICAgICAgY29uc3QgdGVzdFJ1bnMgPSBbXS5jb25jYXQoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLnRlc3RSdW5zKSk7XG5cbiAgICAgICAgdGVzdFJ1bnMuZm9yRWFjaCh0ZXN0UnVuID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0UnVuLmZpbmlzaCkge1xuICAgICAgICAgICAgICAgIHJlYWR5VG9OZXh0UHJvbWlzZXMucHVzaCh0ZXN0UnVuLnJlYWR5VG9OZXh0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgdGVzdFJ1bi5maW5pc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVucyA9IHt9O1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZWFkeVRvTmV4dFByb21pc2VzKTtcbiAgICB9XG5cbiAgICBzdG9wICgpIHtcbiAgICAgICAgdGhpcy5fZ2V0VGVzdFJ1bnMoKS5mb3JFYWNoKHRlc3RSdW4gPT4ge1xuICAgICAgICAgICAgdGVzdFJ1bi5zdG9wKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9nZXRUZXN0V3JhcHBlciAodGVzdCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0V3JhcHBlcnMuZmluZCh3ID0+IHcudGVzdCA9PT0gdGVzdCk7XG4gICAgfVxuXG4gICAgX29uVGVzdFJ1bkNyZWF0ZWQgKHRlc3RSdW4pIHtcblxuICAgICAgICB0aGlzLmFsbFRlc3RzQ29tcGxldGVQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlQWxsUnVubmluZ1Rlc3RzID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvbklkID0gdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZDtcblxuICAgICAgICB0aGlzLnRlc3RSdW5zW2Nvbm5lY3Rpb25JZF0gPSB0aGlzLnRlc3RSdW5zW2Nvbm5lY3Rpb25JZF0gfHwgW107XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuc1tjb25uZWN0aW9uSWRdLnB1c2godGVzdFJ1bik7XG4gICAgfVxuXG4gICAgX29uVGVzdFJ1bkRvbmUgKHRlc3RSdW4pIHtcbiAgICAgICAgdGVzdFJ1bi5zdGF0ZSA9IFRFU1RfUlVOX1NUQVRFLmRvbmU7XG5cbiAgICAgICAgY29uc3QgaGFzUnVubmluZ1Rlc3RzID0gdGhpcy5fZ2V0VGVzdFJ1bnMoKS5zb21lKHQgPT4gdC5zdGF0ZSAhPT0gVEVTVF9SVU5fU1RBVEUuZG9uZSk7XG5cbiAgICAgICAgaWYgKCFoYXNSdW5uaW5nVGVzdHMpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2FsbC10ZXN0cy1jb21wbGV0ZScpO1xuXG4gICAgICAgIGNvbnN0IGJyb3dzZXJUZXN0UnVucyA9IHRoaXMudGVzdFJ1bnNbdGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgdGVzdFJ1bi5yZWFkeVRvTmV4dFByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHRlc3RSdW4uc2V0UmVhZHlUb05leHQgPSByZXNvbHZlO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGlmIChicm93c2VyVGVzdFJ1bnMubGVuZ3RoIDwgdGhpcy5leHBlY3RlZFRlc3RDb3VudCB8fCBicm93c2VyVGVzdFJ1bnMuc29tZSh0ID0+IHQuc3RhdGUgIT09IFRFU1RfUlVOX1NUQVRFLmRvbmUpKVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHRlc3RSdW4uZmluaXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRlc3RSdW4uZmluaXNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuLnN0YXRlICA9IFRFU1RfUlVOX1NUQVRFLmRvbmU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX29uVGVzdFJ1blJlYWR5VG9OZXh0ICh0ZXN0UnVuKSB7XG4gICAgICAgIHRlc3RSdW4uc2V0UmVhZHlUb05leHQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpdmVNb2RlVGVzdFJ1bkNvbnRyb2xsZXI7XG4iXX0=