66 lines
8.8 KiB
JavaScript
66 lines
8.8 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 process_test_fn_error_1 = __importDefault(require("../errors/process-test-fn-error"));
|
||
|
const phase_1 = __importDefault(require("../test-run/phase"));
|
||
|
const type_assertions_1 = require("../errors/runtime/type-assertions");
|
||
|
class TestRunHookController {
|
||
|
constructor(tests, hook) {
|
||
|
this.beforeFn = hook === null || hook === void 0 ? void 0 : hook.before;
|
||
|
this.afterFn = hook === null || hook === void 0 ? void 0 : hook.after;
|
||
|
this.started = false;
|
||
|
this.runningBeforeHook = false;
|
||
|
this.beforeHookErr = null;
|
||
|
this.pendingTestRunCount = tests.length;
|
||
|
this.testRunCtx = Object.create(null);
|
||
|
this._assertHooks();
|
||
|
}
|
||
|
_assertHooks() {
|
||
|
if (this.beforeFn)
|
||
|
(0, type_assertions_1.assertType)(type_assertions_1.is.function, 'globalBefore', 'The testRun.globalBefore hook', this.beforeFn);
|
||
|
if (this.afterFn)
|
||
|
(0, type_assertions_1.assertType)(type_assertions_1.is.function, 'globalAfter', 'The testRun.globalAfter hook', this.afterFn);
|
||
|
}
|
||
|
isTestBlocked() {
|
||
|
return this.runningBeforeHook;
|
||
|
}
|
||
|
async runTestRunBeforeHookIfNecessary(testRun) {
|
||
|
const shouldRunBeforeHook = !this.started && this.beforeFn;
|
||
|
this.started = true;
|
||
|
if (shouldRunBeforeHook) {
|
||
|
this.runningBeforeHook = true;
|
||
|
try {
|
||
|
await this.beforeFn(this.testRunCtx);
|
||
|
}
|
||
|
catch (err) {
|
||
|
this.beforeHookErr = (0, process_test_fn_error_1.default)(err);
|
||
|
}
|
||
|
this.runningBeforeHook = false;
|
||
|
}
|
||
|
// NOTE: fail all tests if testRun.before hook has error
|
||
|
if (this.beforeHookErr) {
|
||
|
testRun.phase = phase_1.default.inTestRunBeforeHook;
|
||
|
testRun.addError(this.beforeHookErr);
|
||
|
return false;
|
||
|
}
|
||
|
testRun.testRunCtx = this.testRunCtx;
|
||
|
return true;
|
||
|
}
|
||
|
async runTestRunAfterHookIfNecessary(testRun) {
|
||
|
this.pendingTestRunCount--;
|
||
|
if (this.pendingTestRunCount === 0 && this.afterFn) {
|
||
|
testRun.phase = phase_1.default.inTestRunAfterHook;
|
||
|
try {
|
||
|
await this.afterFn(this.testRunCtx);
|
||
|
}
|
||
|
catch (err) {
|
||
|
testRun.addError((0, process_test_fn_error_1.default)(err));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
exports.default = TestRunHookController;
|
||
|
module.exports = exports.default;
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4taG9vay1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bm5lci90ZXN0LXJ1bi1ob29rLWNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBaUU7QUFFakUsOERBQStDO0FBRS9DLHVFQUFtRTtBQUVuRSxNQUFxQixxQkFBcUI7SUFTdEMsWUFBb0IsS0FBYSxFQUFFLElBQXdCO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQWMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFlLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBZSxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixHQUFLLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFTLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFZLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLCtCQUErQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1RixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSw4QkFBOEIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVNLGFBQWE7UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBQywrQkFBK0IsQ0FBRSxPQUFnQjtRQUMxRCxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRTNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksbUJBQW1CLEVBQUU7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUU5QixJQUFJO2dCQUNBLE1BQU8sSUFBSSxDQUFDLFFBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFBLCtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hEO1lBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztTQUNsQztRQUVELHdEQUF3RDtRQUN4RCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFjLENBQUMsbUJBQW1CLENBQUM7WUFFbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFckMsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFckMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyw4QkFBOEIsQ0FBRSxPQUFnQjtRQUN6RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoRCxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWMsQ0FBQyxrQkFBa0IsQ0FBQztZQUVsRCxJQUFJO2dCQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdkM7WUFDRCxPQUFPLEdBQUcsRUFBRTtnQkFDUixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUEsK0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNKO0lBQ0wsQ0FBQztDQUNKO0FBL0VELHdDQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcm9jZXNzVGVzdEZuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL3Byb2Nlc3MtdGVzdC1mbi1lcnJvcic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IFRFU1RfUlVOX1BIQVNFIGZyb20gJy4uL3Rlc3QtcnVuL3BoYXNlJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uL3Rlc3QtcnVuJztcbmltcG9ydCB7IGFzc2VydFR5cGUsIGlzIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUvdHlwZS1hc3NlcnRpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFJ1bkhvb2tDb250cm9sbGVyIHtcbiAgICBwdWJsaWMgYmVmb3JlRm4/OiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgYWZ0ZXJGbj86IEZ1bmN0aW9uO1xuICAgIHB1YmxpYyBzdGFydGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBydW5uaW5nQmVmb3JlSG9vazogYm9vbGVhbjtcbiAgICBwdWJsaWMgYmVmb3JlSG9va0VycjogbnVsbCB8IEVycm9yO1xuICAgIHB1YmxpYyBwZW5kaW5nVGVzdFJ1bkNvdW50OiBudW1iZXI7XG4gICAgcHVibGljIHRlc3RSdW5DdHg6IG9iamVjdDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAodGVzdHM6IFRlc3RbXSwgaG9vaz86IFRlc3RpbmdFbnRyeUhvb2tzKSB7XG4gICAgICAgIHRoaXMuYmVmb3JlRm4gICAgICAgICAgICA9IGhvb2s/LmJlZm9yZTtcbiAgICAgICAgdGhpcy5hZnRlckZuICAgICAgICAgICAgID0gaG9vaz8uYWZ0ZXI7XG4gICAgICAgIHRoaXMuc3RhcnRlZCAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJ1bm5pbmdCZWZvcmVIb29rICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iZWZvcmVIb29rRXJyICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGVzdFJ1bkNvdW50ID0gdGVzdHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnRlc3RSdW5DdHggICAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIHRoaXMuX2Fzc2VydEhvb2tzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXNzZXJ0SG9va3MgKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpc
|