1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const phase_1 = __importDefault(require("../test-run/phase"));
|
7 | const process_test_fn_error_1 = __importDefault(require("../errors/process-test-fn-error"));
|
8 | class FixtureHookController {
|
9 | constructor(tests, browserConnectionCount) {
|
10 | this.fixtureMap = FixtureHookController._createFixtureMap(tests, browserConnectionCount);
|
11 | }
|
12 | static _ensureFixtureMapItem(fixtureMap, fixture) {
|
13 | if (!fixtureMap.has(fixture)) {
|
14 | const item = {
|
15 | started: false,
|
16 | runningFixtureBeforeHook: false,
|
17 | fixtureBeforeHookErr: null,
|
18 | pendingTestRunCount: 0,
|
19 | fixtureCtx: Object.create(null)
|
20 | };
|
21 | fixtureMap.set(fixture, item);
|
22 | }
|
23 | }
|
24 | static _createFixtureMap(tests, browserConnectionCount) {
|
25 | return tests.reduce((fixtureMap, test) => {
|
26 | const fixture = test.fixture;
|
27 | if (!test.skip) {
|
28 | FixtureHookController._ensureFixtureMapItem(fixtureMap, fixture);
|
29 | const item = fixtureMap.get(fixture);
|
30 | item.pendingTestRunCount += browserConnectionCount;
|
31 | }
|
32 | return fixtureMap;
|
33 | }, new Map());
|
34 | }
|
35 | _getFixtureMapItem(test) {
|
36 | return test.skip ? null : this.fixtureMap.get(test.fixture);
|
37 | }
|
38 | isTestBlocked(test) {
|
39 | const item = this._getFixtureMapItem(test);
|
40 | return item && item.runningFixtureBeforeHook;
|
41 | }
|
42 | async runFixtureBeforeHookIfNecessary(testRun) {
|
43 | const fixture = testRun.test.fixture;
|
44 | const item = this._getFixtureMapItem(testRun.test);
|
45 | if (item) {
|
46 | const shouldRunBeforeHook = !item.started && fixture.beforeFn;
|
47 | item.started = true;
|
48 | if (shouldRunBeforeHook) {
|
49 | item.runningFixtureBeforeHook = true;
|
50 | try {
|
51 | await fixture.beforeFn(item.fixtureCtx);
|
52 | }
|
53 | catch (err) {
|
54 | item.fixtureBeforeHookErr = process_test_fn_error_1.default(err);
|
55 | }
|
56 | item.runningFixtureBeforeHook = false;
|
57 | }
|
58 | // NOTE: fail all tests in fixture if fixture.before hook has error
|
59 | if (item.fixtureBeforeHookErr) {
|
60 | testRun.phase = phase_1.default.inFixtureBeforeHook;
|
61 | testRun.addError(item.fixtureBeforeHookErr);
|
62 | return false;
|
63 | }
|
64 | testRun.fixtureCtx = item.fixtureCtx;
|
65 | }
|
66 | return true;
|
67 | }
|
68 | async runFixtureAfterHookIfNecessary(testRun) {
|
69 | const fixture = testRun.test.fixture;
|
70 | const item = this._getFixtureMapItem(testRun.test);
|
71 | if (item) {
|
72 | item.pendingTestRunCount--;
|
73 | if (item.pendingTestRunCount === 0 && fixture.afterFn) {
|
74 | testRun.phase = phase_1.default.inFixtureAfterHook;
|
75 | try {
|
76 | await fixture.afterFn(item.fixtureCtx);
|
77 | }
|
78 | catch (err) {
|
79 | testRun.addError(process_test_fn_error_1.default(err));
|
80 | }
|
81 | }
|
82 | }
|
83 | }
|
84 | }
|
85 | exports.default = FixtureHookController;
|
86 | module.exports = exports.default;
|
87 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1ob29rLWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2ZpeHR1cmUtaG9vay1jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQStDO0FBQy9DLDRGQUFpRTtBQUVqRSxNQUFxQixxQkFBcUI7SUFDdEMsWUFBYSxLQUFLLEVBQUUsc0JBQXNCO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBRSxVQUFVLEVBQUUsT0FBTztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixNQUFNLElBQUksR0FBRztnQkFDVCxPQUFPLEVBQW1CLEtBQUs7Z0JBQy9CLHdCQUF3QixFQUFFLEtBQUs7Z0JBQy9CLG9CQUFvQixFQUFNLElBQUk7Z0JBQzlCLG1CQUFtQixFQUFPLENBQUM7Z0JBQzNCLFVBQVUsRUFBZ0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDaEQsQ0FBQztZQUVGLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBRSxLQUFLLEVBQUUsc0JBQXNCO1FBQ25ELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNaLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFakUsTUFBTSxJQUFJLEdB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dGVzdC1ydW4vcGhhc2UnO1xuaW1wb3J0IHByb2Nlc3NUZXN0Rm5FcnJvciBmcm9tICcuLi9lcnJvcnMvcHJvY2Vzcy10ZXN0LWZuLWVycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRml4dHVyZUhvb2tDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvciAodGVzdHMsIGJyb3dzZXJDb25uZWN0aW9uQ291bnQpIHtcbiAgICAgICAgdGhpcy5maXh0dXJlTWFwID0gRml4dHVyZUhvb2tDb250cm9sbGVyLl9jcmVhdGVGaXh0dXJlTWFwKHRlc3RzLCBicm93c2VyQ29ubmVjdGlvbkNvdW50KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgX2Vuc3VyZUZpeHR1cmVNYXBJdGVtIChmaXh0dXJlTWFwLCBmaXh0dXJlKSB7XG4gICAgICAgIGlmICghZml4dHVyZU1hcC5oYXMoZml4dHVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgc3RhcnRlZDogICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBydW5uaW5nRml4dHVyZUJlZm9yZUhvb2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpeHR1cmVCZWZvcmVIb29rRXJyOiAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBwZW5kaW5nVGVzdFJ1bkNvdW50OiAgICAgIDAsXG4gICAgICAgICAgICAgICAgZml4dHVyZUN0eDogICAgICAgICAgICAgICBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmaXh0dXJlTWFwLnNldChmaXh0dXJlLCBpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBfY3JlYXRlRml4dHVyZU1hcCAodGVzdHMsIGJyb3dzZXJDb25uZWN0aW9uQ291bnQpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RzLnJlZHVjZSgoZml4dHVyZU1hcCwgdGVzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IHRlc3QuZml4dHVyZTtcblxuICAgICAgICAgICAgaWYgKCF0ZXN0LnNraXApIHtcbiAgICAgICAgICAgICAgICBGaXh0dXJlSG9va0NvbnRyb2xsZXIuX2Vuc3VyZUZpeHR1cmVNYXBJdGVtKGZpeHR1cmVNYXAsIGZpeHR1cmUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGZpeHR1cmVNYXAuZ2V0KGZpeHR1cmUpO1xuXG4gICAgICAgICAgICAgICAgaXRlbS5wZW5kaW5nVGVzdFJ1bkNvdW50ICs9IGJyb3dzZXJDb25uZWN0aW9uQ291bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaXh0dXJlTWFwO1xuICAgICAgICB9LCBuZXcgTWFwKCkpO1xuICAgIH1cblxuICAgIF9nZXRGaXh0dXJlTWFwSXRlbSAodGVzdCkge1xuICAgICAgICByZXR1cm4gdGVzdC5za2lwID8gbnVsbCA6IHRoaXMuZml4dHVyZU1hcC5nZXQodGVzdC5maXh0dXJlKTtcbiAgICB9XG5cbiAgICBpc1Rlc3RCbG9ja2VkICh0ZXN0KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9nZXRGaXh0dXJlTWFwSXRlbSh0ZXN0KTtcblxuICAgICAgICByZXR1cm4gaXRlbSAmJiBpdGVtLnJ1bm5pbmdGaXh0dXJlQmVmb3JlSG9vaztcbiAgICB9XG5cbiAgICBhc3luYyBydW5GaXh0dXJlQmVmb3JlSG9va0lmTmVjZXNzYXJ5ICh0ZXN0UnVuKSB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0ZXN0UnVuLnRlc3QuZml4dHVyZTtcbiAgICAgICAgY29uc3QgaXRlbSAgICA9IHRoaXMuX2dldEZpeHR1cmVNYXBJdGVtKHRlc3RSdW4udGVzdCk7XG5cbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFJ1bkJlZm9yZUhvb2sgPSAhaXRlbS5zdGFydGVkICYmIGZpeHR1cmUuYmVmb3JlRm47XG5cbiAgICAgICAgICAgIGl0ZW0uc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChzaG91bGRSdW5CZWZvcmVIb29rKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5ydW5uaW5nRml4dHVyZUJlZm9yZUhvb2sgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZml4dHVyZS5iZWZvcmVGbihpdGVtLmZpeHR1cmVDdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZml4dHVyZUJlZm9yZUhvb2tFcnIgPSBwcm9jZXNzVGVzdEZuRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpdGVtLnJ1bm5pbmdGaXh0dXJlQmVmb3JlSG9vayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOT1RFOiBmYWlsIGFsbCB0ZXN0cyBpbiBmaXh0dXJlIGlmIGZpeHR1cmUuYmVmb3JlIGhvb2sgaGFzIGVycm9yXG4gICAgICAgICAgICBpZiAoaXRlbS5maXh0dXJlQmVmb3JlSG9va0Vycikge1xuICAgICAgICAgICAgICAgIHRlc3RSdW4ucGhhc2UgPSBURVNUX1JVTl9QSEFTRS5pbkZpeHR1cmVCZWZvcmVIb29rO1xuXG4gICAgICAgICAgICAgICAgdGVzdFJ1bi5hZGRFcnJvcihpdGVtLmZpeHR1cmVCZWZvcmVIb29rRXJyKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGVzdFJ1bi5maXh0dXJlQ3R4ID0gaXRlbS5maXh0dXJlQ3R4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgcnVuRml4dHVyZUFmdGVySG9va0lmTmVjZXNzYXJ5ICh0ZXN0UnVuKSB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0ZXN0UnVuLnRlc3QuZml4dHVyZTtcbiAgICAgICAgY29uc3QgaXRlbSAgICA9IHRoaXMuX2dldEZpeHR1cmVNYXBJdGVtKHRlc3RSdW4udGVzdCk7XG5cbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIGl0ZW0ucGVuZGluZ1Rlc3RSdW5Db3VudC0tO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5wZW5kaW5nVGVzdFJ1bkNvdW50ID09PSAwICYmIGZpeHR1cmUuYWZ0ZXJGbikge1xuICAgICAgICAgICAgICAgIHRlc3RSdW4ucGhhc2UgPSBURVNUX1JVTl9QSEFTRS5pbkZpeHR1cmVBZnRlckhvb2s7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmaXh0dXJlLmFmdGVyRm4oaXRlbS5maXh0dXJlQ3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0ZXN0UnVuLmFkZEVycm9yKHByb2Nlc3NUZXN0Rm5FcnJvcihlcnIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0= |
\ | No newline at end of file |