@autometa/jest-executor 0.6.0 → 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 +28 -0
- package/dist/esm/index.js +76 -29
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +76 -29
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
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
|
+
|
|
17
|
+
## 0.6.1
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- da669a3: feat: disposable injectables
|
|
22
|
+
- Updated dependencies [da669a3]
|
|
23
|
+
- @autometa/injection@0.1.4
|
|
24
|
+
- @autometa/app@0.4.1
|
|
25
|
+
- @autometa/config@0.1.26
|
|
26
|
+
- @autometa/scopes@0.7.1
|
|
27
|
+
- @autometa/test-builder@0.4.1
|
|
28
|
+
- @autometa/gherkin@0.7.1
|
|
29
|
+
- @autometa/events@0.3.1
|
|
30
|
+
|
|
3
31
|
## 0.6.0
|
|
4
32
|
|
|
5
33
|
### Minor 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,6 +221,9 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
180
221
|
chosenTimeout
|
|
181
222
|
]);
|
|
182
223
|
bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);
|
|
224
|
+
afterAll(async () => {
|
|
225
|
+
await globalContainer.disposeGlobal(tags, isTagsMatch);
|
|
226
|
+
});
|
|
183
227
|
});
|
|
184
228
|
afterAll(async () => {
|
|
185
229
|
const failures = Query.find.failed(bridge);
|
|
@@ -232,7 +276,7 @@ function bootstrapBackground(root, bridge, localApp, events, [config, timeout])
|
|
|
232
276
|
const steps = background.steps;
|
|
233
277
|
try {
|
|
234
278
|
for (const step of steps) {
|
|
235
|
-
const app = localApp();
|
|
279
|
+
const [_, app] = localApp();
|
|
236
280
|
const args = step.args?.(app) ?? [];
|
|
237
281
|
const title2 = step.data.scope.stepText(
|
|
238
282
|
step.data.gherkin.keyword,
|
|
@@ -300,9 +344,10 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
300
344
|
title: bridge.title,
|
|
301
345
|
tags: bridge.tags
|
|
302
346
|
});
|
|
347
|
+
const [container, app] = localApp();
|
|
303
348
|
try {
|
|
304
349
|
for (const step of bridge.steps) {
|
|
305
|
-
await tryRunStep(step, events, bridge,
|
|
350
|
+
await tryRunStep(step, events, bridge, () => app);
|
|
306
351
|
}
|
|
307
352
|
bridge.report = { passed: true };
|
|
308
353
|
events.scenario.emitEnd({
|
|
@@ -322,6 +367,8 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
322
367
|
const message = `${bridge.title} failed while executing a step`;
|
|
323
368
|
const meta = { cause: error };
|
|
324
369
|
throw new AutomationError(message, meta);
|
|
370
|
+
} finally {
|
|
371
|
+
await container.disposeAll(bridge.tags, isTagsMatch);
|
|
325
372
|
}
|
|
326
373
|
},
|
|
327
374
|
chosenTimeout.milliseconds
|
|
@@ -393,9 +440,9 @@ function bootstrapScenarioOutline(root, bridge, localApp, staticApp, events, [co
|
|
|
393
440
|
outlineApps.set(testName, []);
|
|
394
441
|
}
|
|
395
442
|
const apps = outlineApps.get(testName);
|
|
396
|
-
const app = original();
|
|
443
|
+
const [container, app] = original();
|
|
397
444
|
apps.push(app);
|
|
398
|
-
return app;
|
|
445
|
+
return [container, app];
|
|
399
446
|
};
|
|
400
447
|
group(title, () => {
|
|
401
448
|
beforeScenarioOutlineHooks.forEach((hook) => {
|
|
@@ -523,9 +570,9 @@ function bootstrapExamples(root, example, localApp, staticApp, events, timeout)
|
|
|
523
570
|
examplesApps.set(testName, []);
|
|
524
571
|
}
|
|
525
572
|
const apps = examplesApps.get(testName);
|
|
526
|
-
const app = original();
|
|
573
|
+
const [container, app] = original();
|
|
527
574
|
apps.push(app);
|
|
528
|
-
return app;
|
|
575
|
+
return [container, app];
|
|
529
576
|
};
|
|
530
577
|
const [group] = getGroupOrModifier(
|
|
531
578
|
example,
|
|
@@ -633,9 +680,9 @@ function bootstrapRules(bridge, localApp, staticApp, events, [config, timeout])
|
|
|
633
680
|
ruleApps.set(testName, []);
|
|
634
681
|
}
|
|
635
682
|
const apps = ruleApps.get(testName);
|
|
636
|
-
const app = original();
|
|
683
|
+
const [container, app] = original();
|
|
637
684
|
apps.push(app);
|
|
638
|
-
return app;
|
|
685
|
+
return [container, app];
|
|
639
686
|
};
|
|
640
687
|
});
|
|
641
688
|
bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {
|
|
@@ -802,7 +849,7 @@ function bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
802
849
|
title: `${hook.name}: ${hook.description}`,
|
|
803
850
|
tags: [...tags]
|
|
804
851
|
});
|
|
805
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
852
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
806
853
|
events.before.emitEnd({
|
|
807
854
|
title: `${hook.name}: ${hook.description}`,
|
|
808
855
|
tags: [...tags],
|
|
@@ -877,7 +924,7 @@ function bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
877
924
|
title: `${hook.name}: ${hook.description}`,
|
|
878
925
|
tags: [...tags]
|
|
879
926
|
});
|
|
880
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
927
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
881
928
|
events.after.emitEnd({
|
|
882
929
|
title: `${hook.name}: ${hook.description}`,
|
|
883
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 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 \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,6 +228,9 @@ function execute({ app, world }, global, bridge, events, config) {
|
|
|
187
228
|
chosenTimeout
|
|
188
229
|
]);
|
|
189
230
|
bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);
|
|
231
|
+
(0, import_globals.afterAll)(async () => {
|
|
232
|
+
await globalContainer.disposeGlobal(tags, import_gherkin.isTagsMatch);
|
|
233
|
+
});
|
|
190
234
|
});
|
|
191
235
|
(0, import_globals.afterAll)(async () => {
|
|
192
236
|
const failures = import_test_builder2.Query.find.failed(bridge);
|
|
@@ -239,7 +283,7 @@ function bootstrapBackground(root, bridge, localApp, events, [config, timeout])
|
|
|
239
283
|
const steps = background.steps;
|
|
240
284
|
try {
|
|
241
285
|
for (const step of steps) {
|
|
242
|
-
const app = localApp();
|
|
286
|
+
const [_, app] = localApp();
|
|
243
287
|
const args = step.args?.(app) ?? [];
|
|
244
288
|
const title2 = step.data.scope.stepText(
|
|
245
289
|
step.data.gherkin.keyword,
|
|
@@ -307,9 +351,10 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
307
351
|
title: bridge.title,
|
|
308
352
|
tags: bridge.tags
|
|
309
353
|
});
|
|
354
|
+
const [container, app] = localApp();
|
|
310
355
|
try {
|
|
311
356
|
for (const step of bridge.steps) {
|
|
312
|
-
await tryRunStep(step, events, bridge,
|
|
357
|
+
await tryRunStep(step, events, bridge, () => app);
|
|
313
358
|
}
|
|
314
359
|
bridge.report = { passed: true };
|
|
315
360
|
events.scenario.emitEnd({
|
|
@@ -329,6 +374,8 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
|
|
|
329
374
|
const message = `${bridge.title} failed while executing a step`;
|
|
330
375
|
const meta = { cause: error };
|
|
331
376
|
throw new import_errors.AutomationError(message, meta);
|
|
377
|
+
} finally {
|
|
378
|
+
await container.disposeAll(bridge.tags, import_gherkin.isTagsMatch);
|
|
332
379
|
}
|
|
333
380
|
},
|
|
334
381
|
chosenTimeout.milliseconds
|
|
@@ -400,9 +447,9 @@ function bootstrapScenarioOutline(root, bridge, localApp, staticApp, events, [co
|
|
|
400
447
|
outlineApps.set(testName, []);
|
|
401
448
|
}
|
|
402
449
|
const apps = outlineApps.get(testName);
|
|
403
|
-
const app = original();
|
|
450
|
+
const [container, app] = original();
|
|
404
451
|
apps.push(app);
|
|
405
|
-
return app;
|
|
452
|
+
return [container, app];
|
|
406
453
|
};
|
|
407
454
|
group(title, () => {
|
|
408
455
|
beforeScenarioOutlineHooks.forEach((hook) => {
|
|
@@ -530,9 +577,9 @@ function bootstrapExamples(root, example, localApp, staticApp, events, timeout)
|
|
|
530
577
|
examplesApps.set(testName, []);
|
|
531
578
|
}
|
|
532
579
|
const apps = examplesApps.get(testName);
|
|
533
|
-
const app = original();
|
|
580
|
+
const [container, app] = original();
|
|
534
581
|
apps.push(app);
|
|
535
|
-
return app;
|
|
582
|
+
return [container, app];
|
|
536
583
|
};
|
|
537
584
|
const [group] = getGroupOrModifier(
|
|
538
585
|
example,
|
|
@@ -640,9 +687,9 @@ function bootstrapRules(bridge, localApp, staticApp, events, [config, timeout])
|
|
|
640
687
|
ruleApps.set(testName, []);
|
|
641
688
|
}
|
|
642
689
|
const apps = ruleApps.get(testName);
|
|
643
|
-
const app = original();
|
|
690
|
+
const [container, app] = original();
|
|
644
691
|
apps.push(app);
|
|
645
|
-
return app;
|
|
692
|
+
return [container, app];
|
|
646
693
|
};
|
|
647
694
|
});
|
|
648
695
|
bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {
|
|
@@ -809,7 +856,7 @@ function bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
809
856
|
title: `${hook.name}: ${hook.description}`,
|
|
810
857
|
tags: [...tags]
|
|
811
858
|
});
|
|
812
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
859
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
813
860
|
events.before.emitEnd({
|
|
814
861
|
title: `${hook.name}: ${hook.description}`,
|
|
815
862
|
tags: [...tags],
|
|
@@ -884,7 +931,7 @@ function bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout])
|
|
|
884
931
|
title: `${hook.name}: ${hook.description}`,
|
|
885
932
|
tags: [...tags]
|
|
886
933
|
});
|
|
887
|
-
const report = await hook.execute(localApp(), ...tags);
|
|
934
|
+
const report = await hook.execute(localApp()[1], ...tags);
|
|
888
935
|
events.after.emitEnd({
|
|
889
936
|
title: `${hook.name}: ${hook.description}`,
|
|
890
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 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 \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/asserters": "^0.1.8",
|
|
45
|
-
"@autometa/app": "^0.4.0",
|
|
46
|
-
"@autometa/config": "^0.1.25",
|
|
47
|
-
"@autometa/events": "^0.3.0",
|
|
48
|
-
"@autometa/gherkin": "^0.7.0",
|
|
49
44
|
"@autometa/errors": "^0.2.2",
|
|
50
|
-
"@autometa/
|
|
51
|
-
"@autometa/
|
|
52
|
-
"@autometa/
|
|
53
|
-
"@autometa/
|
|
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",
|
|
51
|
+
"@autometa/types": "^0.4.1",
|
|
52
|
+
"@autometa/asserters": "^0.1.8",
|
|
53
|
+
"@autometa/scopes": "^0.7.2"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"test": "vitest run --passWithNoTests",
|