@autometa/jest-executor 0.6.1 → 0.6.2

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