@autometa/jest-executor 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/esm/index.js +74 -33
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +74 -33
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @autometa/jest-executor
|
|
2
2
|
|
|
3
|
+
## 0.6.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8df323c: feat: tag filters for disposer methods
|
|
8
|
+
- Updated dependencies [8df323c]
|
|
9
|
+
- @autometa/injection@0.1.5
|
|
10
|
+
- @autometa/app@0.4.2
|
|
11
|
+
- @autometa/gherkin@0.7.2
|
|
12
|
+
- @autometa/scopes@0.7.2
|
|
13
|
+
- @autometa/test-builder@0.4.2
|
|
14
|
+
- @autometa/config@0.1.27
|
|
15
|
+
- @autometa/events@0.3.2
|
|
16
|
+
|
|
3
17
|
## 0.6.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/esm/index.js
CHANGED
|
@@ -52,6 +52,7 @@ function chooseTimeout(timeout1, timeout2) {
|
|
|
52
52
|
// src/executor.ts
|
|
53
53
|
import { NullTimeout as NullTimeout2, Timeout as Timeout2 } from "@autometa/scopes";
|
|
54
54
|
import { Container, defineContainerContext } from "@autometa/injection";
|
|
55
|
+
import { isTagsMatch } from "@autometa/gherkin";
|
|
55
56
|
var outlineApps = /* @__PURE__ */ new Map();
|
|
56
57
|
var examplesApps = /* @__PURE__ */ new Map();
|
|
57
58
|
var featureApps = /* @__PURE__ */ new Map();
|
|
@@ -112,15 +113,30 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
112
113
|
hook.options.timeout
|
|
113
114
|
).getTimeout(config).milliseconds;
|
|
114
115
|
beforeAll(async () => {
|
|
115
|
-
|
|
116
|
+
const tags2 = bridge?.data?.gherkin?.tags ?? [];
|
|
117
|
+
if (!hook.canExecute(...tags2)) {
|
|
116
118
|
return;
|
|
117
119
|
}
|
|
118
|
-
|
|
120
|
+
events.beforeFeature.emitStart({
|
|
121
|
+
title: hook.description,
|
|
122
|
+
tags: [...tags2]
|
|
123
|
+
});
|
|
119
124
|
const report = await hook.execute(staticApp, ...tags2);
|
|
120
125
|
if (report.error) {
|
|
121
126
|
const message = `${hook.name}: ${hook.description} failed to execute.`;
|
|
127
|
+
events.beforeFeature.emitEnd({
|
|
128
|
+
title: hook.description,
|
|
129
|
+
tags: [...tags2],
|
|
130
|
+
status: "FAILED",
|
|
131
|
+
error: report.error
|
|
132
|
+
});
|
|
122
133
|
throw new AutomationError(message, { cause: report.error });
|
|
123
134
|
}
|
|
135
|
+
events.beforeFeature.emitEnd({
|
|
136
|
+
title: hook.description,
|
|
137
|
+
tags: [...tags2],
|
|
138
|
+
status: "PASSED"
|
|
139
|
+
});
|
|
124
140
|
}, hookTimeout);
|
|
125
141
|
});
|
|
126
142
|
bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {
|
|
@@ -129,17 +145,32 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
129
145
|
hook.options.timeout
|
|
130
146
|
).getTimeout(config).milliseconds;
|
|
131
147
|
afterAll(async () => {
|
|
148
|
+
const tags2 = bridge?.data?.gherkin?.tags ?? [];
|
|
132
149
|
if (!hook.canExecute(...bridge.data.gherkin.tags)) {
|
|
133
150
|
return;
|
|
134
151
|
}
|
|
152
|
+
events.afterFeature.emitStart({
|
|
153
|
+
title: hook.description,
|
|
154
|
+
tags: [...tags2]
|
|
155
|
+
});
|
|
135
156
|
const testName = expect.getState().currentTestName;
|
|
136
|
-
const tags2 = bridge?.data?.gherkin?.tags ?? [];
|
|
137
157
|
const apps = featureApps.get(testName);
|
|
138
158
|
const report = await hook.execute(staticApp, apps, ...tags2);
|
|
139
159
|
if (report.error) {
|
|
140
160
|
const message = `${hook.name}: ${hook.description} failed to execute.`;
|
|
161
|
+
events.afterFeature.emitEnd({
|
|
162
|
+
title: hook.description,
|
|
163
|
+
tags: [...tags2],
|
|
164
|
+
status: "FAILED",
|
|
165
|
+
error: report.error
|
|
166
|
+
});
|
|
141
167
|
throw new AutomationError(message, { cause: report.error });
|
|
142
168
|
}
|
|
169
|
+
events.afterFeature.emitEnd({
|
|
170
|
+
title: hook.description,
|
|
171
|
+
tags: [...tags2],
|
|
172
|
+
status: "PASSED"
|
|
173
|
+
});
|
|
143
174
|
}, hookTimeout);
|
|
144
175
|
});
|
|
145
176
|
bootstrapSetupHooks(globalBridge, staticApp, events, [
|
|
@@ -147,31 +178,41 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
147
178
|
chosenTimeout
|
|
148
179
|
]);
|
|
149
180
|
bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);
|
|
150
|
-
bootstrapBeforeHooks(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
config,
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
181
|
+
bootstrapBeforeHooks(
|
|
182
|
+
bridge,
|
|
183
|
+
globalBridge,
|
|
184
|
+
() => [testContainer, localApp],
|
|
185
|
+
events,
|
|
186
|
+
[config, chosenTimeout]
|
|
187
|
+
);
|
|
188
|
+
bootstrapBeforeHooks(
|
|
189
|
+
bridge,
|
|
190
|
+
bridge,
|
|
191
|
+
() => [testContainer, localApp],
|
|
192
|
+
events,
|
|
193
|
+
[config, chosenTimeout]
|
|
194
|
+
);
|
|
195
|
+
bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [
|
|
163
196
|
config,
|
|
164
197
|
chosenTimeout
|
|
165
198
|
]);
|
|
166
|
-
|
|
199
|
+
bootstrapScenarios(
|
|
200
|
+
bridge,
|
|
201
|
+
bridge,
|
|
202
|
+
() => [testContainer, localApp],
|
|
203
|
+
staticApp,
|
|
204
|
+
events,
|
|
205
|
+
[config, chosenTimeout]
|
|
206
|
+
);
|
|
207
|
+
bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [
|
|
167
208
|
config,
|
|
168
209
|
chosenTimeout
|
|
169
210
|
]);
|
|
170
|
-
bootstrapAfterHooks(bridge, bridge, () => localApp, events, [
|
|
211
|
+
bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [
|
|
171
212
|
config,
|
|
172
213
|
chosenTimeout
|
|
173
214
|
]);
|
|
174
|
-
bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [
|
|
215
|
+
bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [
|
|
175
216
|
config,
|
|
176
217
|
chosenTimeout
|
|
177
218
|
]);
|
|
@@ -180,11 +221,8 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
180
221
|
chosenTimeout
|
|
181
222
|
]);
|
|
182
223
|
bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);
|
|
183
|
-
afterEach(async () => {
|
|
184
|
-
await testContainer.disposeAll();
|
|
185
|
-
});
|
|
186
224
|
afterAll(async () => {
|
|
187
|
-
await globalContainer.disposeGlobal();
|
|
225
|
+
await globalContainer.disposeGlobal(tags, isTagsMatch);
|
|
188
226
|
});
|
|
189
227
|
});
|
|
190
228
|
afterAll(async () => {
|
|
@@ -238,7 +276,7 @@ function bootstrapBackground(root, bridge, localApp, events, [config, timeout])
|
|
|
238
276
|
const steps = background.steps;
|
|
239
277
|
try {
|
|
240
278
|
for (const step of steps) {
|
|
241
|
-
const app = localApp();
|
|
279
|
+
const [_, app] = localApp();
|
|
242
280
|
const args = step.args?.(app) ?? [];
|
|
243
281
|
const title2 = step.data.scope.stepText(
|
|
244
282
|
step.data.gherkin.keyword,
|
|
@@ -306,9 +344,10 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
306
344
|
title: bridge.title,
|
|
307
345
|
tags: bridge.tags
|
|
308
346
|
});
|
|
347
|
+
const [container, app] = localApp();
|
|
309
348
|
try {
|
|
310
349
|
for (const step of bridge.steps) {
|
|
311
|
-
await tryRunStep(step, events, bridge,
|
|
350
|
+
await tryRunStep(step, events, bridge, () => app);
|
|
312
351
|
}
|
|
313
352
|
bridge.report = { passed: true };
|
|
314
353
|
events.scenario.emitEnd({
|
|
@@ -328,6 +367,8 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
328
367
|
const message = `${bridge.title} failed while executing a step`;
|
|
329
368
|
const meta = { cause: error };
|
|
330
369
|
throw new AutomationError(message, meta);
|
|
370
|
+
} finally {
|
|
371
|
+
await container.disposeAll(bridge.tags, isTagsMatch);
|
|
331
372
|
}
|
|
332
373
|
},
|
|
333
374
|
chosenTimeout.milliseconds
|
|
@@ -399,9 +440,9 @@ function bootstrapScenarioOutline(root, bridge, localApp, staticApp, events, [co
|
|
|
399
440
|
outlineApps.set(testName, []);
|
|
400
441
|
}
|
|
401
442
|
const apps = outlineApps.get(testName);
|
|
402
|
-
const app = original();
|
|
443
|
+
const [container, app] = original();
|
|
403
444
|
apps.push(app);
|
|
404
|
-
return app;
|
|
445
|
+
return [container, app];
|
|
405
446
|
};
|
|
406
447
|
group(title, () => {
|
|
407
448
|
beforeScenarioOutlineHooks.forEach((hook) => {
|
|
@@ -529,9 +570,9 @@ function bootstrapExamples(root, example, localApp, staticApp, events, timeout)
|
|
|
529
570
|
examplesApps.set(testName, []);
|
|
530
571
|
}
|
|
531
572
|
const apps = examplesApps.get(testName);
|
|
532
|
-
const app = original();
|
|
573
|
+
const [container, app] = original();
|
|
533
574
|
apps.push(app);
|
|
534
|
-
return app;
|
|
575
|
+
return [container, app];
|
|
535
576
|
};
|
|
536
577
|
const [group] = getGroupOrModifier(
|
|
537
578
|
example,
|
|
@@ -639,9 +680,9 @@ function bootstrapRules(bridge, localApp, staticApp, events, [config, timeout])
|
|
|
639
680
|
ruleApps.set(testName, []);
|
|
640
681
|
}
|
|
641
682
|
const apps = ruleApps.get(testName);
|
|
642
|
-
const app = original();
|
|
683
|
+
const [container, app] = original();
|
|
643
684
|
apps.push(app);
|
|
644
|
-
return app;
|
|
685
|
+
return [container, app];
|
|
645
686
|
};
|
|
646
687
|
});
|
|
647
688
|
bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {
|
|
@@ -808,7 +849,7 @@ function bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
808
849
|
title: `${hook.name}: ${hook.description}`,
|
|
809
850
|
tags: [...tags]
|
|
810
851
|
});
|
|
811
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
852
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
812
853
|
events.before.emitEnd({
|
|
813
854
|
title: `${hook.name}: ${hook.description}`,
|
|
814
855
|
tags: [...tags],
|
|
@@ -883,7 +924,7 @@ function bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
883
924
|
title: `${hook.name}: ${hook.description}`,
|
|
884
925
|
tags: [...tags]
|
|
885
926
|
});
|
|
886
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
927
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
887
928
|
events.after.emitEnd({
|
|
888
929
|
title: `${hook.name}: ${hook.description}`,
|
|
889
930
|
tags: [...tags],
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/executor.ts","../../src/timeout-selector.ts","../../src/index.ts"],"sourcesContent":["import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBeforeHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBackground(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(bridge, bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapRules(bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n\n afterEach(async () => {\n await testContainer.disposeAll();\n });\n afterAll(async () => {\n await globalContainer.disposeGlobal();\n });\n });\n\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const app = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, localApp);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n\n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp(), ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp(), ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n","import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n"],"mappings":"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","names":["NullTimeout","Timeout","tags","title"]}
|
|
1
|
+
{"version":3,"sources":["../../src/executor.ts","../../src/timeout-selector.ts","../../src/index.ts"],"sourcesContent":["import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\nimport { isTagsMatch } from \"@autometa/gherkin\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...tags)) {\n return;\n }\n events.beforeFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n events.afterFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n\n const testName = expect.getState().currentTestName as string;\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(\n bridge,\n globalBridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBeforeHooks(\n bridge,\n bridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(\n bridge,\n bridge,\n () => [testContainer, localApp],\n staticApp,\n events,\n [config, chosenTimeout]\n );\n bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n\n\n afterAll(async () => {\n await globalContainer.disposeGlobal(tags, isTagsMatch);\n });\n });\n\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const [_, app] = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n const [container, app] = localApp();\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, () => app);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n } finally {\n await container.disposeAll(bridge.tags, isTagsMatch);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n\n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp()[1], ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp()[1], ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n","import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n"],"mappings":"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","names":["NullTimeout","Timeout","tags","title"]}
|
package/dist/index.js
CHANGED
|
@@ -59,6 +59,7 @@ function chooseTimeout(timeout1, timeout2) {
|
|
|
59
59
|
// src/executor.ts
|
|
60
60
|
var import_scopes2 = require("@autometa/scopes");
|
|
61
61
|
var import_injection = require("@autometa/injection");
|
|
62
|
+
var import_gherkin = require("@autometa/gherkin");
|
|
62
63
|
var outlineApps = /* @__PURE__ */ new Map();
|
|
63
64
|
var examplesApps = /* @__PURE__ */ new Map();
|
|
64
65
|
var featureApps = /* @__PURE__ */ new Map();
|
|
@@ -119,15 +120,30 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
119
120
|
hook.options.timeout
|
|
120
121
|
).getTimeout(config).milliseconds;
|
|
121
122
|
(0, import_globals.beforeAll)(async () => {
|
|
122
|
-
|
|
123
|
+
const tags2 = bridge?.data?.gherkin?.tags ?? [];
|
|
124
|
+
if (!hook.canExecute(...tags2)) {
|
|
123
125
|
return;
|
|
124
126
|
}
|
|
125
|
-
|
|
127
|
+
events.beforeFeature.emitStart({
|
|
128
|
+
title: hook.description,
|
|
129
|
+
tags: [...tags2]
|
|
130
|
+
});
|
|
126
131
|
const report = await hook.execute(staticApp, ...tags2);
|
|
127
132
|
if (report.error) {
|
|
128
133
|
const message = `${hook.name}: ${hook.description} failed to execute.`;
|
|
134
|
+
events.beforeFeature.emitEnd({
|
|
135
|
+
title: hook.description,
|
|
136
|
+
tags: [...tags2],
|
|
137
|
+
status: "FAILED",
|
|
138
|
+
error: report.error
|
|
139
|
+
});
|
|
129
140
|
throw new import_errors.AutomationError(message, { cause: report.error });
|
|
130
141
|
}
|
|
142
|
+
events.beforeFeature.emitEnd({
|
|
143
|
+
title: hook.description,
|
|
144
|
+
tags: [...tags2],
|
|
145
|
+
status: "PASSED"
|
|
146
|
+
});
|
|
131
147
|
}, hookTimeout);
|
|
132
148
|
});
|
|
133
149
|
bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {
|
|
@@ -136,17 +152,32 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
136
152
|
hook.options.timeout
|
|
137
153
|
).getTimeout(config).milliseconds;
|
|
138
154
|
(0, import_globals.afterAll)(async () => {
|
|
155
|
+
const tags2 = bridge?.data?.gherkin?.tags ?? [];
|
|
139
156
|
if (!hook.canExecute(...bridge.data.gherkin.tags)) {
|
|
140
157
|
return;
|
|
141
158
|
}
|
|
159
|
+
events.afterFeature.emitStart({
|
|
160
|
+
title: hook.description,
|
|
161
|
+
tags: [...tags2]
|
|
162
|
+
});
|
|
142
163
|
const testName = import_globals.expect.getState().currentTestName;
|
|
143
|
-
const tags2 = bridge?.data?.gherkin?.tags ?? [];
|
|
144
164
|
const apps = featureApps.get(testName);
|
|
145
165
|
const report = await hook.execute(staticApp, apps, ...tags2);
|
|
146
166
|
if (report.error) {
|
|
147
167
|
const message = `${hook.name}: ${hook.description} failed to execute.`;
|
|
168
|
+
events.afterFeature.emitEnd({
|
|
169
|
+
title: hook.description,
|
|
170
|
+
tags: [...tags2],
|
|
171
|
+
status: "FAILED",
|
|
172
|
+
error: report.error
|
|
173
|
+
});
|
|
148
174
|
throw new import_errors.AutomationError(message, { cause: report.error });
|
|
149
175
|
}
|
|
176
|
+
events.afterFeature.emitEnd({
|
|
177
|
+
title: hook.description,
|
|
178
|
+
tags: [...tags2],
|
|
179
|
+
status: "PASSED"
|
|
180
|
+
});
|
|
150
181
|
}, hookTimeout);
|
|
151
182
|
});
|
|
152
183
|
bootstrapSetupHooks(globalBridge, staticApp, events, [
|
|
@@ -154,31 +185,41 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
154
185
|
chosenTimeout
|
|
155
186
|
]);
|
|
156
187
|
bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);
|
|
157
|
-
bootstrapBeforeHooks(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
config,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
188
|
+
bootstrapBeforeHooks(
|
|
189
|
+
bridge,
|
|
190
|
+
globalBridge,
|
|
191
|
+
() => [testContainer, localApp],
|
|
192
|
+
events,
|
|
193
|
+
[config, chosenTimeout]
|
|
194
|
+
);
|
|
195
|
+
bootstrapBeforeHooks(
|
|
196
|
+
bridge,
|
|
197
|
+
bridge,
|
|
198
|
+
() => [testContainer, localApp],
|
|
199
|
+
events,
|
|
200
|
+
[config, chosenTimeout]
|
|
201
|
+
);
|
|
202
|
+
bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [
|
|
170
203
|
config,
|
|
171
204
|
chosenTimeout
|
|
172
205
|
]);
|
|
173
|
-
|
|
206
|
+
bootstrapScenarios(
|
|
207
|
+
bridge,
|
|
208
|
+
bridge,
|
|
209
|
+
() => [testContainer, localApp],
|
|
210
|
+
staticApp,
|
|
211
|
+
events,
|
|
212
|
+
[config, chosenTimeout]
|
|
213
|
+
);
|
|
214
|
+
bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [
|
|
174
215
|
config,
|
|
175
216
|
chosenTimeout
|
|
176
217
|
]);
|
|
177
|
-
bootstrapAfterHooks(bridge, bridge, () => localApp, events, [
|
|
218
|
+
bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [
|
|
178
219
|
config,
|
|
179
220
|
chosenTimeout
|
|
180
221
|
]);
|
|
181
|
-
bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [
|
|
222
|
+
bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [
|
|
182
223
|
config,
|
|
183
224
|
chosenTimeout
|
|
184
225
|
]);
|
|
@@ -187,11 +228,8 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
187
228
|
chosenTimeout
|
|
188
229
|
]);
|
|
189
230
|
bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);
|
|
190
|
-
(0, import_globals.afterEach)(async () => {
|
|
191
|
-
await testContainer.disposeAll();
|
|
192
|
-
});
|
|
193
231
|
(0, import_globals.afterAll)(async () => {
|
|
194
|
-
await globalContainer.disposeGlobal();
|
|
232
|
+
await globalContainer.disposeGlobal(tags, import_gherkin.isTagsMatch);
|
|
195
233
|
});
|
|
196
234
|
});
|
|
197
235
|
(0, import_globals.afterAll)(async () => {
|
|
@@ -245,7 +283,7 @@ function bootstrapBackground(root, bridge, localApp, events, [config, timeout])
|
|
|
245
283
|
const steps = background.steps;
|
|
246
284
|
try {
|
|
247
285
|
for (const step of steps) {
|
|
248
|
-
const app = localApp();
|
|
286
|
+
const [_, app] = localApp();
|
|
249
287
|
const args = step.args?.(app) ?? [];
|
|
250
288
|
const title2 = step.data.scope.stepText(
|
|
251
289
|
step.data.gherkin.keyword,
|
|
@@ -313,9 +351,10 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
313
351
|
title: bridge.title,
|
|
314
352
|
tags: bridge.tags
|
|
315
353
|
});
|
|
354
|
+
const [container, app] = localApp();
|
|
316
355
|
try {
|
|
317
356
|
for (const step of bridge.steps) {
|
|
318
|
-
await tryRunStep(step, events, bridge,
|
|
357
|
+
await tryRunStep(step, events, bridge, () => app);
|
|
319
358
|
}
|
|
320
359
|
bridge.report = { passed: true };
|
|
321
360
|
events.scenario.emitEnd({
|
|
@@ -335,6 +374,8 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
335
374
|
const message = `${bridge.title} failed while executing a step`;
|
|
336
375
|
const meta = { cause: error };
|
|
337
376
|
throw new import_errors.AutomationError(message, meta);
|
|
377
|
+
} finally {
|
|
378
|
+
await container.disposeAll(bridge.tags, import_gherkin.isTagsMatch);
|
|
338
379
|
}
|
|
339
380
|
},
|
|
340
381
|
chosenTimeout.milliseconds
|
|
@@ -406,9 +447,9 @@ function bootstrapScenarioOutline(root, bridge, localApp, staticApp, events, [co
|
|
|
406
447
|
outlineApps.set(testName, []);
|
|
407
448
|
}
|
|
408
449
|
const apps = outlineApps.get(testName);
|
|
409
|
-
const app = original();
|
|
450
|
+
const [container, app] = original();
|
|
410
451
|
apps.push(app);
|
|
411
|
-
return app;
|
|
452
|
+
return [container, app];
|
|
412
453
|
};
|
|
413
454
|
group(title, () => {
|
|
414
455
|
beforeScenarioOutlineHooks.forEach((hook) => {
|
|
@@ -536,9 +577,9 @@ function bootstrapExamples(root, example, localApp, staticApp, events, timeout)
|
|
|
536
577
|
examplesApps.set(testName, []);
|
|
537
578
|
}
|
|
538
579
|
const apps = examplesApps.get(testName);
|
|
539
|
-
const app = original();
|
|
580
|
+
const [container, app] = original();
|
|
540
581
|
apps.push(app);
|
|
541
|
-
return app;
|
|
582
|
+
return [container, app];
|
|
542
583
|
};
|
|
543
584
|
const [group] = getGroupOrModifier(
|
|
544
585
|
example,
|
|
@@ -646,9 +687,9 @@ function bootstrapRules(bridge, localApp, staticApp, events, [config, timeout])
|
|
|
646
687
|
ruleApps.set(testName, []);
|
|
647
688
|
}
|
|
648
689
|
const apps = ruleApps.get(testName);
|
|
649
|
-
const app = original();
|
|
690
|
+
const [container, app] = original();
|
|
650
691
|
apps.push(app);
|
|
651
|
-
return app;
|
|
692
|
+
return [container, app];
|
|
652
693
|
};
|
|
653
694
|
});
|
|
654
695
|
bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {
|
|
@@ -815,7 +856,7 @@ function bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
815
856
|
title: `${hook.name}: ${hook.description}`,
|
|
816
857
|
tags: [...tags]
|
|
817
858
|
});
|
|
818
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
859
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
819
860
|
events.before.emitEnd({
|
|
820
861
|
title: `${hook.name}: ${hook.description}`,
|
|
821
862
|
tags: [...tags],
|
|
@@ -890,7 +931,7 @@ function bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
890
931
|
title: `${hook.name}: ${hook.description}`,
|
|
891
932
|
tags: [...tags]
|
|
892
933
|
});
|
|
893
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
934
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
894
935
|
events.after.emitEnd({
|
|
895
936
|
title: `${hook.name}: ${hook.description}`,
|
|
896
937
|
tags: [...tags],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/executor.ts","../src/timeout-selector.ts"],"sourcesContent":["import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n","import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBeforeHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBackground(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(bridge, bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapRules(bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n\n afterEach(async () => {\n await testContainer.disposeAll();\n });\n afterAll(async () => {\n await globalContainer.disposeGlobal();\n });\n });\n\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const app = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, localApp);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n\n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp(), ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp(), ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n"],"mappings":"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","names":["import_test_builder","import_scopes","tags","title"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/executor.ts","../src/timeout-selector.ts"],"sourcesContent":["import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n","import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\nimport { isTagsMatch } from \"@autometa/gherkin\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...tags)) {\n return;\n }\n events.beforeFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n events.afterFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n\n const testName = expect.getState().currentTestName as string;\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(\n bridge,\n globalBridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBeforeHooks(\n bridge,\n bridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(\n bridge,\n bridge,\n () => [testContainer, localApp],\n staticApp,\n events,\n [config, chosenTimeout]\n );\n bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n\n\n afterAll(async () => {\n await globalContainer.disposeGlobal(tags, isTagsMatch);\n });\n });\n\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const [_, app] = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n const [container, app] = localApp();\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, () => app);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n } finally {\n await container.disposeAll(bridge.tags, isTagsMatch);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n\n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp()[1], ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp()[1], ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n"],"mappings":"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","names":["import_test_builder","import_scopes","tags","title"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autometa/jest-executor",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -41,16 +41,16 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@cucumber/tag-expressions": "^5.0.1",
|
|
44
|
-
"@autometa/
|
|
45
|
-
"@autometa/
|
|
46
|
-
"@autometa/
|
|
47
|
-
"@autometa/
|
|
48
|
-
"@autometa/
|
|
49
|
-
"@autometa/
|
|
50
|
-
"@autometa/
|
|
51
|
-
"@autometa/test-builder": "^0.4.1",
|
|
44
|
+
"@autometa/errors": "^0.2.2",
|
|
45
|
+
"@autometa/events": "^0.3.2",
|
|
46
|
+
"@autometa/config": "^0.1.27",
|
|
47
|
+
"@autometa/app": "^0.4.2",
|
|
48
|
+
"@autometa/test-builder": "^0.4.2",
|
|
49
|
+
"@autometa/gherkin": "^0.7.2",
|
|
50
|
+
"@autometa/injection": "^0.1.5",
|
|
52
51
|
"@autometa/types": "^0.4.1",
|
|
53
|
-
"@autometa/
|
|
52
|
+
"@autometa/asserters": "^0.1.8",
|
|
53
|
+
"@autometa/scopes": "^0.7.2"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"test": "vitest run --passWithNoTests",
|