@autometa/test-builder 0.3.1 → 0.3.3

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.
@@ -1,21 +1,66 @@
1
1
 
2
- > @autometa/test-builder@0.3.0 test /Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder
2
+ > @autometa/test-builder@0.3.1 test /Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder
3
3
  > vitest run --passWithNoTests
4
4
 
5
5
 
6
6
  RUN v1.4.0 /Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder
7
7
 
8
- ✓ src/gherkin-walker.spec.ts (1 test) 2ms
9
- ✓ src/bridges/bridge-query.spec.ts (1 test) 3ms
8
+ ✓ src/gherkin-walker.spec.ts (1 test) 1ms
9
+ ✓ src/bridges/bridge-query.spec.ts (1 test) 2ms
10
10
  stdout | src/bridges/bridge-search.spec.ts > Bridge Search > findRuleType > should find a rule by name
11
11
  My Rule
12
12
 
13
- ✓ src/bridges/bridge-search.spec.ts (18 tests) 7ms
14
- ✓ src/scope-search.spec.ts (12 tests) 170ms
15
- src/test-builder.spec.ts (12 tests) 41ms
13
+ ✓ src/bridges/bridge-search.spec.ts (18 tests) 6ms
14
+ ✓ src/scope-search.spec.ts (12 tests) 9ms
15
+ src/test-builder.spec.ts (12 tests | 2 failed) 30ms
16
+ ❯ src/test-builder.spec.ts > TestBuilder > should walk through a feature with a scenario outline with examples with steps
17
+ → 'Example: My Scenario Outline' could not find a step definition
18
+ ❯ src/test-builder.spec.ts > TestBuilder > should walk through a feature with a scenario outline with examples table
19
+ → 'Example: My Scenario Outline' could not find a step definition
16
20
 
17
- Test Files 5 passed (5)
18
- Tests 44 passed (44)
19
- Start at 16:48:22
20
- Duration 4.39s (transform 3.62s, setup 0ms, collect 10.05s, tests 223ms, environment 12ms, prepare 4.99s)
21
+ ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯
21
22
 
23
+ FAIL src/test-builder.spec.ts > TestBuilder > should walk through a feature with a scenario outline with examples with steps
24
+ FAIL src/test-builder.spec.ts > TestBuilder > should walk through a feature with a scenario outline with examples table
25
+ AutomationError: 'Example: My Scenario Outline' could not find a step definition
26
+ ❯ Module.raise ../errors/src/automation-error.ts:16:9
27
+ ❯ getStep src/test-builder.ts:156:5
28
+ 154| const cause = e as Error;
29
+ 155| const { title } = gherkin as Scenario;
30
+ 156| raise(`'${title}' could not find a step definition`, { cause });
31
+ | ^
32
+ 157| }
33
+ 158| }
34
+ ❯ Object.onStep src/test-builder.ts:102:28
35
+ ❯ Function.#walkNode src/gherkin-walker.ts:95:32
36
+ ❯ Function.walk src/gherkin-walker.ts:45:10
37
+ ❯ Function.#walkChildren src/gherkin-walker.ts:107:12
38
+ ❯ Function.#walkNode src/gherkin-walker.ts:72:19
39
+ ❯ Function.walk src/gherkin-walker.ts:45:10
40
+ ❯ Function.#walkChildren src/gherkin-walker.ts:107:12
41
+ ❯ Function.#walkNode src/gherkin-walker.ts:67:19
42
+
43
+ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
44
+ Serialized Error: { opts: { cause: { stack: 'AutomationError: No stored step could be found matching [Given test step bar]\n at StepCache.throwOnNotFound (/Users/ben.aherne/Documents/GitHub/autometa/packages/scopes/src/caches/hook-cache.ts:258:13)\n at StepCache.find (/Users/ben.aherne/Documents/GitHub/autometa/packages/scopes/src/caches/hook-cache.ts:251:12)\n at StepCache.findByExample (/Users/ben.aherne/Documents/GitHub/autometa/packages/scopes/src/caches/hook-cache.ts:210:17)\n at getStep (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/test-builder.ts:149:22)\n at Object.onStep (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/test-builder.ts:102:28)\n at Function.#walkNode (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/gherkin-walker.ts:95:32)\n at Function.walk (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/gherkin-walker.ts:45:10)\n at Function.#walkChildren (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/gherkin-walker.ts:107:12)\n at Function.#walkNode (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/gherkin-walker.ts:72:19)\n at Function.walk (/Users/ben.aherne/Documents/GitHub/autometa/packages/test-builder/src/gherkin-walker.ts:45:10)', message: 'No stored step could be found matching [Given test step bar]', opts: {}, name: 'AutomationError', constructor: 'Function<AutomationError>', toString: 'Function<toString>' } } }
45
+ Caused by: AutomationError: No stored step could be found matching [Given test step bar]
46
+ ❯ StepCache.throwOnNotFound ../scopes/src/caches/hook-cache.ts:258:13
47
+ ❯ StepCache.find ../scopes/src/caches/hook-cache.ts:251:12
48
+ ❯ StepCache.findByExample ../scopes/src/caches/hook-cache.ts:210:17
49
+ ❯ getStep src/test-builder.ts:149:22
50
+ ❯ Object.onStep src/test-builder.ts:102:28
51
+ ❯ Function.#walkNode src/gherkin-walker.ts:95:32
52
+ ❯ Function.walk src/gherkin-walker.ts:45:10
53
+ ❯ Function.#walkChildren src/gherkin-walker.ts:107:12
54
+ ❯ Function.#walkNode src/gherkin-walker.ts:72:19
55
+ ❯ Function.walk src/gherkin-walker.ts:45:10
56
+
57
+ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
58
+ Serialized Error: { opts: {} }
59
+ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯
60
+
61
+ Test Files 1 failed | 4 passed (5)
62
+ Tests 2 failed | 42 passed (44)
63
+ Start at 19:00:35
64
+ Duration 1.06s (transform 536ms, setup 1ms, collect 2.37s, tests 48ms, environment 0ms, prepare 826ms)
65
+
66
+  ELIFECYCLE  Test failed. See above for more details.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @autometa/test-builder
2
2
 
3
+ ## 0.3.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [bf6e5dd]
8
+ - @autometa/gherkin@0.6.13
9
+ - @autometa/events@0.2.25
10
+ - @autometa/scopes@0.6.3
11
+
12
+ ## 0.3.2
13
+
14
+ ### Patch Changes
15
+
16
+ - c9cc41c: fix: additional example interpolation fixes
17
+ - Updated dependencies [c9cc41c]
18
+ - @autometa/gherkin@0.6.12
19
+ - @autometa/events@0.2.24
20
+ - @autometa/scopes@0.6.2
21
+
3
22
  ## 0.3.1
4
23
 
5
24
  ### Patch Changes
package/dist/esm/index.js CHANGED
@@ -523,9 +523,6 @@ function scope(value) {
523
523
 
524
524
  // src/test-builder.ts
525
525
  import { Bind } from "@autometa/bind-decorator";
526
- import {
527
- scenarioExampleTitle
528
- } from "@autometa/gherkin";
529
526
  import { raise } from "@autometa/errors";
530
527
  var TestBuilder = class {
531
528
  constructor(feature) {
@@ -579,13 +576,7 @@ var TestBuilder = class {
579
576
  `Example ${gherkin.name} has no Example Table data. A Row of data is required.`
580
577
  );
581
578
  }
582
- const titleSegments = Object.keys(gherkin.table);
583
- const values = Object.values(gherkin.table);
584
- const title = scenarioExampleTitle(
585
- titleSegments,
586
- gherkin.name,
587
- values
588
- );
579
+ const title = gherkin.name;
589
580
  const exampleScope = scope(accumulator.data.scope).findExample(title);
590
581
  const bridge2 = new ExampleBridge();
591
582
  bridge2.data = { gherkin, scope: exampleScope };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bridges/bridge.ts","../../src/bridges/bridge-search.ts","../../src/bridges/bridge-query.ts","../../src/gherkin-walker.ts","../../src/scope-search.ts","../../src/test-builder.ts"],"sourcesContent":["import { App } from \"@autometa/app\";\nimport {\n Background,\n DataTable,\n Example,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { BackgroundScope, GlobalScope } from \"@autometa/scopes\";\nimport {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n ScenarioScope,\n Scope,\n StepScope,\n} from \"@autometa/scopes\";\n\nexport abstract class GherkinCodeBridge {\n abstract data: { gherkin: GherkinNode; scope: Scope };\n}\nexport class GlobalBridge extends GherkinCodeBridge {\n readonly data: { gherkin: GherkinNode; scope: GlobalScope };\n constructor(scope: GlobalScope) {\n super();\n const nullNode = class extends GherkinNode {\n keyword = \"none\";\n };\n this.data = {\n scope,\n gherkin: new nullNode(),\n };\n }\n}\nexport class FeatureBridge extends GherkinCodeBridge {\n data: { gherkin: Feature; scope: FeatureScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n rules: RuleBridge[] = [];\n steps: StepBridge[] = [];\n}\nexport class BackgroundBridge extends GherkinCodeBridge {\n data: { gherkin: Background; scope: BackgroundScope };\n steps: StepBridge[] = [];\n}\n\nexport class RuleBridge extends GherkinCodeBridge {\n data: { gherkin: Rule; scope: RuleScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n steps: StepBridge[] = [];\n}\n\nexport class ScenarioBridge extends GherkinCodeBridge {\n data: { gherkin: Scenario; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ExampleBridge extends GherkinCodeBridge {\n data: { gherkin: Example; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ScenarioOutlineBridge extends GherkinCodeBridge {\n data: { gherkin: ScenarioOutline; scope: ScenarioOutlineScope };\n examples: ExamplesBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class ExamplesBridge extends GherkinCodeBridge {\n data: { gherkin: Examples; scope: ScenarioOutlineScope };\n scenarios: ScenarioBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class StepBridge extends GherkinCodeBridge {\n data: {\n gherkin: Step;\n scope: StepScope<string, DataTable | undefined>;\n args: undefined | ((app: App) => unknown[]);\n };\n\n get args() {\n return this.data.args\n }\n\n get expressionText() {\n return this.data.scope.expression.source;\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport {\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n RuleBridge,\n} from \"./bridge\";\n\nexport function find(\n bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n if (bridge instanceof FeatureBridge) {\n return findByFeature(bridge, testName);\n }\n if (bridge instanceof RuleBridge) {\n return findByRule(bridge, testName);\n }\n if (bridge instanceof ScenarioOutlineBridge) {\n return findScenarioOutlineOrChild(bridge, testName);\n }\n\n throw new AutomationError(`Could not find test matching ${testName}`);\n}\nfunction findByFeature(\n feature: FeatureBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = feature.data.scope.title(feature.data.gherkin);\n const byScenario = findTestTypes(feature.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleTypes(feature.rules, testName, title);\n if (byRule) {\n return byRule;\n }\n}\nfunction findByRule(\n rule: RuleBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = rule.data.scope.title(rule.data.gherkin);\n const byScenario = findTestTypes(rule.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleOrChild(rule, testName, title);\n if (byRule) {\n return byRule;\n }\n}\n\nexport function findTestTypes(\n scenarios: (ScenarioBridge | ScenarioOutlineBridge | ExamplesBridge)[],\n testName: string,\n from?: string\n) {\n for (const scenario of scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n const found = findScenarioOutlineOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ExamplesBridge) {\n const found = findExamplesOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ScenarioBridge) {\n const found = findScenario(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n }\n}\n\nexport function findRuleTypes(\n rules: RuleBridge[],\n testName: string,\n from?: string\n) {\n for (const rule of rules) {\n const found = findRuleOrChild(rule, testName, from);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findRuleOrChild(\n rule: RuleBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = rule;\n const title = scope.title(gherkin);\n if (testName === title) {\n return rule;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return rule;\n }\n }\n const newFrom = appendPath(from, title);\n return findTestTypes(rule.scenarios, testName, newFrom);\n}\n\nexport function findScenarioOutlineOrChild(\n outline: ScenarioOutlineBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = outline;\n const title = scope.title(gherkin);\n if (testName === title) {\n return outline;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return outline;\n }\n }\n for (const example of outline.examples) {\n const newFrom = appendPath(from, title);\n const found = findExamplesOrChild(example, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nfunction appendPath(from: string | undefined, title: string) {\n return from ? `${from} ${title}` : title;\n}\n\nexport function findExamplesOrChild(\n example: ExamplesBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = example;\n const title = scope.title(gherkin);\n if (testName === title) {\n return example;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return example;\n }\n }\n for (const scenario of example.scenarios) {\n const newFrom = appendPath(from, title);\n const found = findScenario(scenario, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findScenario(\n scenario: ScenarioBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = scenario;\n const title = scope.title(gherkin);\n if (testName === title) {\n return scenario;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return scenario;\n }\n }\n}\n","import { Background, GherkinNode } from \"@autometa/gherkin\";\nimport {\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n} from \".\";\n\nfunction failed(bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n if (bridge instanceof ScenarioOutlineBridge) {\n return failedOutline(bridge);\n }\n for (const scenario of bridge.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed && scenario.report.error !== undefined) {\n accumulator.push(scenario);\n }\n }\n if (bridge instanceof FeatureBridge) {\n accumulator.push(...failedRule(bridge));\n }\n return accumulator;\n}\n\nfunction failedOutline(bridge: ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n\n for (const example of bridge.examples) {\n for (const scenario of example.scenarios) {\n if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction failedRule(bridge: FeatureBridge) {\n const accumulator: ScenarioBridge[] = [];\n for (const rule of bridge.rules) {\n for (const scenario of rule.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction gherkinToTestNames(\n node: GherkinNode,\n path = \"\",\n accumulator: string[] = []\n) {\n if (!(\"name\" in node) || node instanceof Background) {\n return;\n }\n const title = `${node.keyword}: ${node.name}`;\n const fullPath = path ? `${path} ${title}` : title;\n accumulator.push(fullPath);\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n if (!(\"name\" in child) || child instanceof Background) {\n continue;\n }\n gherkinToTestNames(child, fullPath, accumulator);\n }\n return accumulator;\n}\n\nexport const Query = {\n find: {\n failed,\n },\n testNames: gherkinToTestNames,\n};\n","import {\n Background,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { Example } from \"@autometa/gherkin\";\n\nexport type WalkFunction<T extends GherkinNode, TAccumulator, TReturn> = (\n node: T,\n accumulator: TAccumulator,\n lastNode?: GherkinNode\n) => TReturn;\n\nexport type WalkFunctionMap<TAccumulator> = {\n onFeature?: WalkFunction<Feature, TAccumulator, TAccumulator>;\n onRule?: WalkFunction<Rule, TAccumulator, TAccumulator>;\n onBackground?: WalkFunction<Background, TAccumulator, TAccumulator>;\n onScenario?: WalkFunction<Scenario, TAccumulator, TAccumulator>;\n onScenarioOutline?: WalkFunction<ScenarioOutline, TAccumulator, TAccumulator>;\n onExamples?: WalkFunction<Examples, TAccumulator, TAccumulator>;\n onExample?: WalkFunction<Example, TAccumulator, TAccumulator>;\n onStep?: WalkFunction<Step, TAccumulator, TAccumulator>;\n};\n\nexport class GherkinWalker {\n static walk<TAccumulator>(\n walkFunction: WalkFunctionMap<TAccumulator>,\n childNode: GherkinNode,\n accumulator: TAccumulator,\n parentNode?: GherkinNode\n ) {\n if (accumulator === undefined) {\n throw new AutomationError(\n `An accumulator must be defined to continue the walker from ${\n childNode.constructor.name\n }${JSON.stringify(childNode)}`\n );\n }\n this.#walkNode(childNode, accumulator, walkFunction, parentNode);\n return accumulator;\n }\n\n static #walkNode<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n walkFunction: WalkFunctionMap<TAccumulator>,\n lastNode?: GherkinNode\n ) {\n if (child instanceof Feature && walkFunction.onFeature) {\n const acc = walkFunction.onFeature(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Rule && walkFunction.onRule) {\n const acc = walkFunction.onRule(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Examples) {\n const acc = walkFunction.onExamples?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Example) {\n const acc = walkFunction.onExample?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Scenario) {\n const acc = walkFunction.onScenario?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof ScenarioOutline) {\n const acc = walkFunction.onScenarioOutline?.(\n child,\n accumulator,\n lastNode\n );\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Background) {\n const acc = walkFunction?.onBackground?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Step) {\n const acc = walkFunction.onStep?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n }\n\n static #walkChildren<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walkFunction: WalkFunctionMap<any>\n ) {\n for (const node of child.children) {\n this.walk(walkFunction, node, accumulator, child);\n }\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport { StepKeyword } from \"@autometa/gherkin\";\nimport { StepType } from \"@autometa/gherkin\";\nimport {\n Scope,\n RuleScope,\n ScenarioScope,\n ScenarioOutlineScope,\n BackgroundScope,\n} from \"@autometa/scopes\";\nimport { Empty_Function } from \"@autometa/scopes\";\n\nexport function scope(value: Scope) {\n return {\n findRule: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return child instanceof RuleScope && child.name === name;\n }) as RuleScope | undefined;\n if (!found) {\n const rule = new RuleScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(rule);\n return rule;\n }\n return found;\n },\n findScenario: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return (\n child instanceof ScenarioScope &&\n child.name === name &&\n !(child instanceof ScenarioOutlineScope)\n );\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findBackground: ({ name }: { name?: string }): BackgroundScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof BackgroundScope;\n }) as BackgroundScope | undefined;\n if (found && found.name !== name) {\n throw new AutomationError(\n `Could not find background matching ${name} but found ${found?.name}`\n );\n }\n if (found) {\n return found;\n }\n\n const bgScope = new BackgroundScope(\n name,\n Empty_Function,\n value.hooks,\n value.steps\n );\n value.attach(bgScope);\n return bgScope;\n },\n findScenarioOutline: (name: string): ScenarioOutlineScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof ScenarioOutlineScope && child.name === name;\n }) as ScenarioOutlineScope | undefined;\n if (!found) {\n const scenarioOutline = new ScenarioOutlineScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenarioOutline);\n return scenarioOutline;\n }\n return found;\n },\n findExample(name: string): ScenarioScope {\n const found = value.closedScopes.find((child) => {\n if (!(child instanceof ScenarioScope)) {\n return false;\n }\n return child.name === name;\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findStep: (keywordType: StepType, keyword: StepKeyword, name: string) => {\n return value.steps.find(keywordType, keyword, name);\n },\n };\n}\n","import {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n StepCache,\n} from \"@autometa/scopes\";\nimport {\n BackgroundBridge,\n ExampleBridge,\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n StepBridge,\n} from \"./bridges\";\nimport { GherkinWalker } from \"./gherkin-walker\";\nimport { scope } from \"./scope-search\";\nimport { Bind } from \"@autometa/bind-decorator\";\nimport {\n Example,\n Feature,\n GherkinNode,\n Scenario,\n scenarioExampleTitle,\n} from \"@autometa/gherkin\";\nimport { raise } from \"@autometa/errors\";\nimport { StepKeyword, StepType } from \"@autometa/types\";\nexport class TestBuilder {\n constructor(readonly feature: Feature) {}\n @Bind\n onFeatureExecuted(featureScope: FeatureScope) {\n const bridge = new FeatureBridge();\n GherkinWalker.walk<GherkinCodeBridge>(\n {\n onFeature: (feature, accumulator) => {\n accumulator.data = { gherkin: feature, scope: featureScope };\n return accumulator;\n },\n onRule: (rule, accumulator) => {\n const ruleScope = scope(featureScope).findRule(\n rule.name\n ) as RuleScope;\n const bridge = new RuleBridge();\n bridge.data = { gherkin: rule, scope: ruleScope };\n (accumulator as FeatureBridge).rules.push(bridge);\n return bridge;\n },\n onScenario: (gherkin, accumulator) => {\n const scenarioScope = scope(accumulator.data.scope).findScenario(\n gherkin.name\n );\n const bridge = new ScenarioBridge();\n bridge.data = { gherkin, scope: scenarioScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n // if accumulator is a outline, push to examples\n\n return bridge;\n },\n onScenarioOutline: (gherkin, accumulator) => {\n const outlineScope = scope(\n accumulator.data.scope\n ).findScenarioOutline(gherkin.name);\n const bridge = new ScenarioOutlineBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n return bridge;\n },\n onExamples: (gherkin, accumulator) => {\n const outlineScope = accumulator.data.scope as ScenarioOutlineScope;\n const bridge = new ExamplesBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as ScenarioOutlineBridge).examples.push(bridge);\n return bridge;\n },\n onExample(gherkin, accumulator) {\n if (gherkin.table === undefined) {\n raise(\n `Example ${gherkin.name} has no Example Table data. A Row of data is required.`\n );\n }\n const titleSegments = Object.keys(gherkin.table);\n const values = Object.values(gherkin.table);\n const title = scenarioExampleTitle(\n titleSegments,\n gherkin.name,\n values\n );\n\n const exampleScope = scope(accumulator.data.scope).findExample(title);\n const bridge = new ExampleBridge();\n bridge.data = { gherkin, scope: exampleScope };\n const acc = accumulator as ExamplesBridge;\n acc.scenarios.push(bridge);\n return bridge;\n },\n onBackground(gherkin, accumulator) {\n const backgroundScope = scope(accumulator.data.scope).findBackground({\n name: gherkin.name,\n });\n const bridge = new BackgroundBridge();\n bridge.data = { gherkin, scope: backgroundScope };\n const acc = accumulator as FeatureBridge | RuleBridge;\n acc.background = bridge;\n return bridge;\n },\n onStep: (step, accumulator) => {\n const {\n data: { scope: parentScope, gherkin },\n } = accumulator;\n const { keyword, keywordType, text } = step;\n const cache = parentScope.steps;\n const existing = getStep(\n accumulator,\n gherkin,\n cache,\n keywordType,\n keyword,\n text\n );\n const bridge = new StepBridge();\n const acc = accumulator as\n | BackgroundBridge\n | ScenarioBridge\n | RuleBridge\n | FeatureBridge;\n\n if (existing) {\n bridge.data = {\n gherkin: step,\n scope: existing.step,\n args: existing.args,\n };\n } else {\n raise(`No step definition matching ${step.keyword} ${step.text}`);\n }\n\n acc.steps.push(bridge);\n return accumulator;\n },\n },\n this.feature,\n bridge\n );\n return bridge;\n }\n}\nfunction getStep(\n accumulator: GherkinCodeBridge,\n gherkin: GherkinNode,\n cache: StepCache,\n keywordType: StepType,\n keyword: StepKeyword,\n text: string\n) {\n try {\n if (accumulator instanceof ExampleBridge) {\n const scenario = gherkin as Example;\n if (scenario.table) {\n return cache.findByExample(keywordType, keyword, text, scenario.table);\n }\n }\n return cache.find(keywordType, keyword, text);\n } catch (e) {\n const cause = e as Error;\n const { title } = gherkin as Scenario;\n raise(`'${title}' could not find a step definition`, { cause });\n }\n}\n"],"mappings":"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","names":["scope","scope","Background","Background","Background","Examples","Feature","Rule","Scenario","ScenarioOutline","Step","AutomationError","Example","AutomationError","Feature","Rule","Examples","Example","Scenario","ScenarioOutline","Background","Step","AutomationError","bridge"]}
1
+ {"version":3,"sources":["../../src/bridges/bridge.ts","../../src/bridges/bridge-search.ts","../../src/bridges/bridge-query.ts","../../src/gherkin-walker.ts","../../src/scope-search.ts","../../src/test-builder.ts"],"sourcesContent":["import { App } from \"@autometa/app\";\nimport {\n Background,\n DataTable,\n Example,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { BackgroundScope, GlobalScope } from \"@autometa/scopes\";\nimport {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n ScenarioScope,\n Scope,\n StepScope,\n} from \"@autometa/scopes\";\n\nexport abstract class GherkinCodeBridge {\n abstract data: { gherkin: GherkinNode; scope: Scope };\n}\nexport class GlobalBridge extends GherkinCodeBridge {\n readonly data: { gherkin: GherkinNode; scope: GlobalScope };\n constructor(scope: GlobalScope) {\n super();\n const nullNode = class extends GherkinNode {\n keyword = \"none\";\n };\n this.data = {\n scope,\n gherkin: new nullNode(),\n };\n }\n}\nexport class FeatureBridge extends GherkinCodeBridge {\n data: { gherkin: Feature; scope: FeatureScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n rules: RuleBridge[] = [];\n steps: StepBridge[] = [];\n}\nexport class BackgroundBridge extends GherkinCodeBridge {\n data: { gherkin: Background; scope: BackgroundScope };\n steps: StepBridge[] = [];\n}\n\nexport class RuleBridge extends GherkinCodeBridge {\n data: { gherkin: Rule; scope: RuleScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n steps: StepBridge[] = [];\n}\n\nexport class ScenarioBridge extends GherkinCodeBridge {\n data: { gherkin: Scenario; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ExampleBridge extends GherkinCodeBridge {\n data: { gherkin: Example; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ScenarioOutlineBridge extends GherkinCodeBridge {\n data: { gherkin: ScenarioOutline; scope: ScenarioOutlineScope };\n examples: ExamplesBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class ExamplesBridge extends GherkinCodeBridge {\n data: { gherkin: Examples; scope: ScenarioOutlineScope };\n scenarios: ScenarioBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class StepBridge extends GherkinCodeBridge {\n data: {\n gherkin: Step;\n scope: StepScope<string, DataTable | undefined>;\n args: undefined | ((app: App) => unknown[]);\n };\n\n get args() {\n return this.data.args\n }\n\n get expressionText() {\n return this.data.scope.expression.source;\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport {\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n RuleBridge,\n} from \"./bridge\";\n\nexport function find(\n bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n if (bridge instanceof FeatureBridge) {\n return findByFeature(bridge, testName);\n }\n if (bridge instanceof RuleBridge) {\n return findByRule(bridge, testName);\n }\n if (bridge instanceof ScenarioOutlineBridge) {\n return findScenarioOutlineOrChild(bridge, testName);\n }\n\n throw new AutomationError(`Could not find test matching ${testName}`);\n}\nfunction findByFeature(\n feature: FeatureBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = feature.data.scope.title(feature.data.gherkin);\n const byScenario = findTestTypes(feature.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleTypes(feature.rules, testName, title);\n if (byRule) {\n return byRule;\n }\n}\nfunction findByRule(\n rule: RuleBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = rule.data.scope.title(rule.data.gherkin);\n const byScenario = findTestTypes(rule.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleOrChild(rule, testName, title);\n if (byRule) {\n return byRule;\n }\n}\n\nexport function findTestTypes(\n scenarios: (ScenarioBridge | ScenarioOutlineBridge | ExamplesBridge)[],\n testName: string,\n from?: string\n) {\n for (const scenario of scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n const found = findScenarioOutlineOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ExamplesBridge) {\n const found = findExamplesOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ScenarioBridge) {\n const found = findScenario(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n }\n}\n\nexport function findRuleTypes(\n rules: RuleBridge[],\n testName: string,\n from?: string\n) {\n for (const rule of rules) {\n const found = findRuleOrChild(rule, testName, from);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findRuleOrChild(\n rule: RuleBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = rule;\n const title = scope.title(gherkin);\n if (testName === title) {\n return rule;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return rule;\n }\n }\n const newFrom = appendPath(from, title);\n return findTestTypes(rule.scenarios, testName, newFrom);\n}\n\nexport function findScenarioOutlineOrChild(\n outline: ScenarioOutlineBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = outline;\n const title = scope.title(gherkin);\n if (testName === title) {\n return outline;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return outline;\n }\n }\n for (const example of outline.examples) {\n const newFrom = appendPath(from, title);\n const found = findExamplesOrChild(example, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nfunction appendPath(from: string | undefined, title: string) {\n return from ? `${from} ${title}` : title;\n}\n\nexport function findExamplesOrChild(\n example: ExamplesBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = example;\n const title = scope.title(gherkin);\n if (testName === title) {\n return example;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return example;\n }\n }\n for (const scenario of example.scenarios) {\n const newFrom = appendPath(from, title);\n const found = findScenario(scenario, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findScenario(\n scenario: ScenarioBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = scenario;\n const title = scope.title(gherkin);\n if (testName === title) {\n return scenario;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return scenario;\n }\n }\n}\n","import { Background, GherkinNode } from \"@autometa/gherkin\";\nimport {\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n} from \".\";\n\nfunction failed(bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n if (bridge instanceof ScenarioOutlineBridge) {\n return failedOutline(bridge);\n }\n for (const scenario of bridge.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed && scenario.report.error !== undefined) {\n accumulator.push(scenario);\n }\n }\n if (bridge instanceof FeatureBridge) {\n accumulator.push(...failedRule(bridge));\n }\n return accumulator;\n}\n\nfunction failedOutline(bridge: ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n\n for (const example of bridge.examples) {\n for (const scenario of example.scenarios) {\n if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction failedRule(bridge: FeatureBridge) {\n const accumulator: ScenarioBridge[] = [];\n for (const rule of bridge.rules) {\n for (const scenario of rule.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction gherkinToTestNames(\n node: GherkinNode,\n path = \"\",\n accumulator: string[] = []\n) {\n if (!(\"name\" in node) || node instanceof Background) {\n return;\n }\n const title = `${node.keyword}: ${node.name}`;\n const fullPath = path ? `${path} ${title}` : title;\n accumulator.push(fullPath);\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n if (!(\"name\" in child) || child instanceof Background) {\n continue;\n }\n gherkinToTestNames(child, fullPath, accumulator);\n }\n return accumulator;\n}\n\nexport const Query = {\n find: {\n failed,\n },\n testNames: gherkinToTestNames,\n};\n","import {\n Background,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { Example } from \"@autometa/gherkin\";\n\nexport type WalkFunction<T extends GherkinNode, TAccumulator, TReturn> = (\n node: T,\n accumulator: TAccumulator,\n lastNode?: GherkinNode\n) => TReturn;\n\nexport type WalkFunctionMap<TAccumulator> = {\n onFeature?: WalkFunction<Feature, TAccumulator, TAccumulator>;\n onRule?: WalkFunction<Rule, TAccumulator, TAccumulator>;\n onBackground?: WalkFunction<Background, TAccumulator, TAccumulator>;\n onScenario?: WalkFunction<Scenario, TAccumulator, TAccumulator>;\n onScenarioOutline?: WalkFunction<ScenarioOutline, TAccumulator, TAccumulator>;\n onExamples?: WalkFunction<Examples, TAccumulator, TAccumulator>;\n onExample?: WalkFunction<Example, TAccumulator, TAccumulator>;\n onStep?: WalkFunction<Step, TAccumulator, TAccumulator>;\n};\n\nexport class GherkinWalker {\n static walk<TAccumulator>(\n walkFunction: WalkFunctionMap<TAccumulator>,\n childNode: GherkinNode,\n accumulator: TAccumulator,\n parentNode?: GherkinNode\n ) {\n if (accumulator === undefined) {\n throw new AutomationError(\n `An accumulator must be defined to continue the walker from ${\n childNode.constructor.name\n }${JSON.stringify(childNode)}`\n );\n }\n this.#walkNode(childNode, accumulator, walkFunction, parentNode);\n return accumulator;\n }\n\n static #walkNode<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n walkFunction: WalkFunctionMap<TAccumulator>,\n lastNode?: GherkinNode\n ) {\n if (child instanceof Feature && walkFunction.onFeature) {\n const acc = walkFunction.onFeature(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Rule && walkFunction.onRule) {\n const acc = walkFunction.onRule(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Examples) {\n const acc = walkFunction.onExamples?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Example) {\n const acc = walkFunction.onExample?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Scenario) {\n const acc = walkFunction.onScenario?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof ScenarioOutline) {\n const acc = walkFunction.onScenarioOutline?.(\n child,\n accumulator,\n lastNode\n );\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Background) {\n const acc = walkFunction?.onBackground?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Step) {\n const acc = walkFunction.onStep?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n }\n\n static #walkChildren<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walkFunction: WalkFunctionMap<any>\n ) {\n for (const node of child.children) {\n this.walk(walkFunction, node, accumulator, child);\n }\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport { StepKeyword } from \"@autometa/gherkin\";\nimport { StepType } from \"@autometa/gherkin\";\nimport {\n Scope,\n RuleScope,\n ScenarioScope,\n ScenarioOutlineScope,\n BackgroundScope,\n} from \"@autometa/scopes\";\nimport { Empty_Function } from \"@autometa/scopes\";\n\nexport function scope(value: Scope) {\n return {\n findRule: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return child instanceof RuleScope && child.name === name;\n }) as RuleScope | undefined;\n if (!found) {\n const rule = new RuleScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(rule);\n return rule;\n }\n return found;\n },\n findScenario: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return (\n child instanceof ScenarioScope &&\n child.name === name &&\n !(child instanceof ScenarioOutlineScope)\n );\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findBackground: ({ name }: { name?: string }): BackgroundScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof BackgroundScope;\n }) as BackgroundScope | undefined;\n if (found && found.name !== name) {\n throw new AutomationError(\n `Could not find background matching ${name} but found ${found?.name}`\n );\n }\n if (found) {\n return found;\n }\n\n const bgScope = new BackgroundScope(\n name,\n Empty_Function,\n value.hooks,\n value.steps\n );\n value.attach(bgScope);\n return bgScope;\n },\n findScenarioOutline: (name: string): ScenarioOutlineScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof ScenarioOutlineScope && child.name === name;\n }) as ScenarioOutlineScope | undefined;\n if (!found) {\n const scenarioOutline = new ScenarioOutlineScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenarioOutline);\n return scenarioOutline;\n }\n return found;\n },\n findExample(name: string): ScenarioScope {\n const found = value.closedScopes.find((child) => {\n if (!(child instanceof ScenarioScope)) {\n return false;\n }\n return child.name === name;\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findStep: (keywordType: StepType, keyword: StepKeyword, name: string) => {\n return value.steps.find(keywordType, keyword, name);\n },\n };\n}\n","import {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n StepCache,\n} from \"@autometa/scopes\";\nimport {\n BackgroundBridge,\n ExampleBridge,\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n StepBridge,\n} from \"./bridges\";\nimport { GherkinWalker } from \"./gherkin-walker\";\nimport { scope } from \"./scope-search\";\nimport { Bind } from \"@autometa/bind-decorator\";\nimport { Example, Feature, GherkinNode, Scenario } from \"@autometa/gherkin\";\nimport { raise } from \"@autometa/errors\";\nimport { StepKeyword, StepType } from \"@autometa/types\";\nexport class TestBuilder {\n constructor(readonly feature: Feature) {}\n @Bind\n onFeatureExecuted(featureScope: FeatureScope) {\n const bridge = new FeatureBridge();\n GherkinWalker.walk<GherkinCodeBridge>(\n {\n onFeature: (feature, accumulator) => {\n accumulator.data = { gherkin: feature, scope: featureScope };\n return accumulator;\n },\n onRule: (rule, accumulator) => {\n const ruleScope = scope(featureScope).findRule(\n rule.name\n ) as RuleScope;\n const bridge = new RuleBridge();\n bridge.data = { gherkin: rule, scope: ruleScope };\n (accumulator as FeatureBridge).rules.push(bridge);\n return bridge;\n },\n onScenario: (gherkin, accumulator) => {\n const scenarioScope = scope(accumulator.data.scope).findScenario(\n gherkin.name\n );\n const bridge = new ScenarioBridge();\n bridge.data = { gherkin, scope: scenarioScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n // if accumulator is a outline, push to examples\n\n return bridge;\n },\n onScenarioOutline: (gherkin, accumulator) => {\n const outlineScope = scope(\n accumulator.data.scope\n ).findScenarioOutline(gherkin.name);\n const bridge = new ScenarioOutlineBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n return bridge;\n },\n onExamples: (gherkin, accumulator) => {\n const outlineScope = accumulator.data.scope as ScenarioOutlineScope;\n const bridge = new ExamplesBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as ScenarioOutlineBridge).examples.push(bridge);\n return bridge;\n },\n onExample(gherkin, accumulator) {\n if (gherkin.table === undefined) {\n raise(\n `Example ${gherkin.name} has no Example Table data. A Row of data is required.`\n );\n }\n const title = gherkin.name;\n\n const exampleScope = scope(accumulator.data.scope).findExample(title);\n const bridge = new ExampleBridge();\n bridge.data = { gherkin, scope: exampleScope };\n const acc = accumulator as ExamplesBridge;\n acc.scenarios.push(bridge);\n return bridge;\n },\n onBackground(gherkin, accumulator) {\n const backgroundScope = scope(accumulator.data.scope).findBackground({\n name: gherkin.name,\n });\n const bridge = new BackgroundBridge();\n bridge.data = { gherkin, scope: backgroundScope };\n const acc = accumulator as FeatureBridge | RuleBridge;\n acc.background = bridge;\n return bridge;\n },\n onStep: (step, accumulator) => {\n const {\n data: { scope: parentScope, gherkin },\n } = accumulator;\n const { keyword, keywordType, text } = step;\n const cache = parentScope.steps;\n const existing = getStep(\n accumulator,\n gherkin,\n cache,\n keywordType,\n keyword,\n text\n );\n const bridge = new StepBridge();\n const acc = accumulator as\n | BackgroundBridge\n | ScenarioBridge\n | RuleBridge\n | FeatureBridge;\n\n if (existing) {\n bridge.data = {\n gherkin: step,\n scope: existing.step,\n args: existing.args,\n };\n } else {\n raise(`No step definition matching ${step.keyword} ${step.text}`);\n }\n\n acc.steps.push(bridge);\n return accumulator;\n },\n },\n this.feature,\n bridge\n );\n return bridge;\n }\n}\nfunction getStep(\n accumulator: GherkinCodeBridge,\n gherkin: GherkinNode,\n cache: StepCache,\n keywordType: StepType,\n keyword: StepKeyword,\n text: string\n) {\n try {\n if (accumulator instanceof ExampleBridge) {\n const scenario = gherkin as Example;\n if (scenario.table) {\n return cache.findByExample(keywordType, keyword, text, scenario.table);\n }\n }\n return cache.find(keywordType, keyword, text);\n } catch (e) {\n const cause = e as Error;\n const { title } = gherkin as Scenario;\n raise(`'${title}' could not find a step definition`, { cause });\n }\n}\n"],"mappings":"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","names":["scope","scope","Background","Background","Background","Examples","Feature","Rule","Scenario","ScenarioOutline","Step","AutomationError","Example","AutomationError","Feature","Rule","Examples","Example","Scenario","ScenarioOutline","Background","Step","AutomationError","bridge"]}
package/dist/index.js CHANGED
@@ -551,7 +551,6 @@ function scope(value) {
551
551
 
552
552
  // src/test-builder.ts
553
553
  var import_bind_decorator = require("@autometa/bind-decorator");
554
- var import_gherkin5 = require("@autometa/gherkin");
555
554
  var import_errors4 = require("@autometa/errors");
556
555
  var TestBuilder = class {
557
556
  constructor(feature) {
@@ -605,13 +604,7 @@ var TestBuilder = class {
605
604
  `Example ${gherkin.name} has no Example Table data. A Row of data is required.`
606
605
  );
607
606
  }
608
- const titleSegments = Object.keys(gherkin.table);
609
- const values = Object.values(gherkin.table);
610
- const title = (0, import_gherkin5.scenarioExampleTitle)(
611
- titleSegments,
612
- gherkin.name,
613
- values
614
- );
607
+ const title = gherkin.name;
615
608
  const exampleScope = scope(accumulator.data.scope).findExample(title);
616
609
  const bridge2 = new ExampleBridge();
617
610
  bridge2.data = { gherkin, scope: exampleScope };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/bridges/bridge.ts","../src/bridges/bridge-search.ts","../src/bridges/bridge-query.ts","../src/gherkin-walker.ts","../src/scope-search.ts","../src/test-builder.ts"],"sourcesContent":["export * from \"./bridges\";\nexport * from \"./test-builder\";\nexport * from \"./scope-search\";\nexport * from \"./gherkin-walker\";\n","import { App } from \"@autometa/app\";\nimport {\n Background,\n DataTable,\n Example,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { BackgroundScope, GlobalScope } from \"@autometa/scopes\";\nimport {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n ScenarioScope,\n Scope,\n StepScope,\n} from \"@autometa/scopes\";\n\nexport abstract class GherkinCodeBridge {\n abstract data: { gherkin: GherkinNode; scope: Scope };\n}\nexport class GlobalBridge extends GherkinCodeBridge {\n readonly data: { gherkin: GherkinNode; scope: GlobalScope };\n constructor(scope: GlobalScope) {\n super();\n const nullNode = class extends GherkinNode {\n keyword = \"none\";\n };\n this.data = {\n scope,\n gherkin: new nullNode(),\n };\n }\n}\nexport class FeatureBridge extends GherkinCodeBridge {\n data: { gherkin: Feature; scope: FeatureScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n rules: RuleBridge[] = [];\n steps: StepBridge[] = [];\n}\nexport class BackgroundBridge extends GherkinCodeBridge {\n data: { gherkin: Background; scope: BackgroundScope };\n steps: StepBridge[] = [];\n}\n\nexport class RuleBridge extends GherkinCodeBridge {\n data: { gherkin: Rule; scope: RuleScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n steps: StepBridge[] = [];\n}\n\nexport class ScenarioBridge extends GherkinCodeBridge {\n data: { gherkin: Scenario; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ExampleBridge extends GherkinCodeBridge {\n data: { gherkin: Example; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ScenarioOutlineBridge extends GherkinCodeBridge {\n data: { gherkin: ScenarioOutline; scope: ScenarioOutlineScope };\n examples: ExamplesBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class ExamplesBridge extends GherkinCodeBridge {\n data: { gherkin: Examples; scope: ScenarioOutlineScope };\n scenarios: ScenarioBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class StepBridge extends GherkinCodeBridge {\n data: {\n gherkin: Step;\n scope: StepScope<string, DataTable | undefined>;\n args: undefined | ((app: App) => unknown[]);\n };\n\n get args() {\n return this.data.args\n }\n\n get expressionText() {\n return this.data.scope.expression.source;\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport {\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n RuleBridge,\n} from \"./bridge\";\n\nexport function find(\n bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n if (bridge instanceof FeatureBridge) {\n return findByFeature(bridge, testName);\n }\n if (bridge instanceof RuleBridge) {\n return findByRule(bridge, testName);\n }\n if (bridge instanceof ScenarioOutlineBridge) {\n return findScenarioOutlineOrChild(bridge, testName);\n }\n\n throw new AutomationError(`Could not find test matching ${testName}`);\n}\nfunction findByFeature(\n feature: FeatureBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = feature.data.scope.title(feature.data.gherkin);\n const byScenario = findTestTypes(feature.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleTypes(feature.rules, testName, title);\n if (byRule) {\n return byRule;\n }\n}\nfunction findByRule(\n rule: RuleBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = rule.data.scope.title(rule.data.gherkin);\n const byScenario = findTestTypes(rule.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleOrChild(rule, testName, title);\n if (byRule) {\n return byRule;\n }\n}\n\nexport function findTestTypes(\n scenarios: (ScenarioBridge | ScenarioOutlineBridge | ExamplesBridge)[],\n testName: string,\n from?: string\n) {\n for (const scenario of scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n const found = findScenarioOutlineOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ExamplesBridge) {\n const found = findExamplesOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ScenarioBridge) {\n const found = findScenario(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n }\n}\n\nexport function findRuleTypes(\n rules: RuleBridge[],\n testName: string,\n from?: string\n) {\n for (const rule of rules) {\n const found = findRuleOrChild(rule, testName, from);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findRuleOrChild(\n rule: RuleBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = rule;\n const title = scope.title(gherkin);\n if (testName === title) {\n return rule;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return rule;\n }\n }\n const newFrom = appendPath(from, title);\n return findTestTypes(rule.scenarios, testName, newFrom);\n}\n\nexport function findScenarioOutlineOrChild(\n outline: ScenarioOutlineBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = outline;\n const title = scope.title(gherkin);\n if (testName === title) {\n return outline;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return outline;\n }\n }\n for (const example of outline.examples) {\n const newFrom = appendPath(from, title);\n const found = findExamplesOrChild(example, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nfunction appendPath(from: string | undefined, title: string) {\n return from ? `${from} ${title}` : title;\n}\n\nexport function findExamplesOrChild(\n example: ExamplesBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = example;\n const title = scope.title(gherkin);\n if (testName === title) {\n return example;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return example;\n }\n }\n for (const scenario of example.scenarios) {\n const newFrom = appendPath(from, title);\n const found = findScenario(scenario, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findScenario(\n scenario: ScenarioBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = scenario;\n const title = scope.title(gherkin);\n if (testName === title) {\n return scenario;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return scenario;\n }\n }\n}\n","import { Background, GherkinNode } from \"@autometa/gherkin\";\nimport {\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n} from \".\";\n\nfunction failed(bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n if (bridge instanceof ScenarioOutlineBridge) {\n return failedOutline(bridge);\n }\n for (const scenario of bridge.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed && scenario.report.error !== undefined) {\n accumulator.push(scenario);\n }\n }\n if (bridge instanceof FeatureBridge) {\n accumulator.push(...failedRule(bridge));\n }\n return accumulator;\n}\n\nfunction failedOutline(bridge: ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n\n for (const example of bridge.examples) {\n for (const scenario of example.scenarios) {\n if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction failedRule(bridge: FeatureBridge) {\n const accumulator: ScenarioBridge[] = [];\n for (const rule of bridge.rules) {\n for (const scenario of rule.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction gherkinToTestNames(\n node: GherkinNode,\n path = \"\",\n accumulator: string[] = []\n) {\n if (!(\"name\" in node) || node instanceof Background) {\n return;\n }\n const title = `${node.keyword}: ${node.name}`;\n const fullPath = path ? `${path} ${title}` : title;\n accumulator.push(fullPath);\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n if (!(\"name\" in child) || child instanceof Background) {\n continue;\n }\n gherkinToTestNames(child, fullPath, accumulator);\n }\n return accumulator;\n}\n\nexport const Query = {\n find: {\n failed,\n },\n testNames: gherkinToTestNames,\n};\n","import {\n Background,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { Example } from \"@autometa/gherkin\";\n\nexport type WalkFunction<T extends GherkinNode, TAccumulator, TReturn> = (\n node: T,\n accumulator: TAccumulator,\n lastNode?: GherkinNode\n) => TReturn;\n\nexport type WalkFunctionMap<TAccumulator> = {\n onFeature?: WalkFunction<Feature, TAccumulator, TAccumulator>;\n onRule?: WalkFunction<Rule, TAccumulator, TAccumulator>;\n onBackground?: WalkFunction<Background, TAccumulator, TAccumulator>;\n onScenario?: WalkFunction<Scenario, TAccumulator, TAccumulator>;\n onScenarioOutline?: WalkFunction<ScenarioOutline, TAccumulator, TAccumulator>;\n onExamples?: WalkFunction<Examples, TAccumulator, TAccumulator>;\n onExample?: WalkFunction<Example, TAccumulator, TAccumulator>;\n onStep?: WalkFunction<Step, TAccumulator, TAccumulator>;\n};\n\nexport class GherkinWalker {\n static walk<TAccumulator>(\n walkFunction: WalkFunctionMap<TAccumulator>,\n childNode: GherkinNode,\n accumulator: TAccumulator,\n parentNode?: GherkinNode\n ) {\n if (accumulator === undefined) {\n throw new AutomationError(\n `An accumulator must be defined to continue the walker from ${\n childNode.constructor.name\n }${JSON.stringify(childNode)}`\n );\n }\n this.#walkNode(childNode, accumulator, walkFunction, parentNode);\n return accumulator;\n }\n\n static #walkNode<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n walkFunction: WalkFunctionMap<TAccumulator>,\n lastNode?: GherkinNode\n ) {\n if (child instanceof Feature && walkFunction.onFeature) {\n const acc = walkFunction.onFeature(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Rule && walkFunction.onRule) {\n const acc = walkFunction.onRule(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Examples) {\n const acc = walkFunction.onExamples?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Example) {\n const acc = walkFunction.onExample?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Scenario) {\n const acc = walkFunction.onScenario?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof ScenarioOutline) {\n const acc = walkFunction.onScenarioOutline?.(\n child,\n accumulator,\n lastNode\n );\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Background) {\n const acc = walkFunction?.onBackground?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Step) {\n const acc = walkFunction.onStep?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n }\n\n static #walkChildren<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walkFunction: WalkFunctionMap<any>\n ) {\n for (const node of child.children) {\n this.walk(walkFunction, node, accumulator, child);\n }\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport { StepKeyword } from \"@autometa/gherkin\";\nimport { StepType } from \"@autometa/gherkin\";\nimport {\n Scope,\n RuleScope,\n ScenarioScope,\n ScenarioOutlineScope,\n BackgroundScope,\n} from \"@autometa/scopes\";\nimport { Empty_Function } from \"@autometa/scopes\";\n\nexport function scope(value: Scope) {\n return {\n findRule: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return child instanceof RuleScope && child.name === name;\n }) as RuleScope | undefined;\n if (!found) {\n const rule = new RuleScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(rule);\n return rule;\n }\n return found;\n },\n findScenario: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return (\n child instanceof ScenarioScope &&\n child.name === name &&\n !(child instanceof ScenarioOutlineScope)\n );\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findBackground: ({ name }: { name?: string }): BackgroundScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof BackgroundScope;\n }) as BackgroundScope | undefined;\n if (found && found.name !== name) {\n throw new AutomationError(\n `Could not find background matching ${name} but found ${found?.name}`\n );\n }\n if (found) {\n return found;\n }\n\n const bgScope = new BackgroundScope(\n name,\n Empty_Function,\n value.hooks,\n value.steps\n );\n value.attach(bgScope);\n return bgScope;\n },\n findScenarioOutline: (name: string): ScenarioOutlineScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof ScenarioOutlineScope && child.name === name;\n }) as ScenarioOutlineScope | undefined;\n if (!found) {\n const scenarioOutline = new ScenarioOutlineScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenarioOutline);\n return scenarioOutline;\n }\n return found;\n },\n findExample(name: string): ScenarioScope {\n const found = value.closedScopes.find((child) => {\n if (!(child instanceof ScenarioScope)) {\n return false;\n }\n return child.name === name;\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findStep: (keywordType: StepType, keyword: StepKeyword, name: string) => {\n return value.steps.find(keywordType, keyword, name);\n },\n };\n}\n","import {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n StepCache,\n} from \"@autometa/scopes\";\nimport {\n BackgroundBridge,\n ExampleBridge,\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n StepBridge,\n} from \"./bridges\";\nimport { GherkinWalker } from \"./gherkin-walker\";\nimport { scope } from \"./scope-search\";\nimport { Bind } from \"@autometa/bind-decorator\";\nimport {\n Example,\n Feature,\n GherkinNode,\n Scenario,\n scenarioExampleTitle,\n} from \"@autometa/gherkin\";\nimport { raise } from \"@autometa/errors\";\nimport { StepKeyword, StepType } from \"@autometa/types\";\nexport class TestBuilder {\n constructor(readonly feature: Feature) {}\n @Bind\n onFeatureExecuted(featureScope: FeatureScope) {\n const bridge = new FeatureBridge();\n GherkinWalker.walk<GherkinCodeBridge>(\n {\n onFeature: (feature, accumulator) => {\n accumulator.data = { gherkin: feature, scope: featureScope };\n return accumulator;\n },\n onRule: (rule, accumulator) => {\n const ruleScope = scope(featureScope).findRule(\n rule.name\n ) as RuleScope;\n const bridge = new RuleBridge();\n bridge.data = { gherkin: rule, scope: ruleScope };\n (accumulator as FeatureBridge).rules.push(bridge);\n return bridge;\n },\n onScenario: (gherkin, accumulator) => {\n const scenarioScope = scope(accumulator.data.scope).findScenario(\n gherkin.name\n );\n const bridge = new ScenarioBridge();\n bridge.data = { gherkin, scope: scenarioScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n // if accumulator is a outline, push to examples\n\n return bridge;\n },\n onScenarioOutline: (gherkin, accumulator) => {\n const outlineScope = scope(\n accumulator.data.scope\n ).findScenarioOutline(gherkin.name);\n const bridge = new ScenarioOutlineBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n return bridge;\n },\n onExamples: (gherkin, accumulator) => {\n const outlineScope = accumulator.data.scope as ScenarioOutlineScope;\n const bridge = new ExamplesBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as ScenarioOutlineBridge).examples.push(bridge);\n return bridge;\n },\n onExample(gherkin, accumulator) {\n if (gherkin.table === undefined) {\n raise(\n `Example ${gherkin.name} has no Example Table data. A Row of data is required.`\n );\n }\n const titleSegments = Object.keys(gherkin.table);\n const values = Object.values(gherkin.table);\n const title = scenarioExampleTitle(\n titleSegments,\n gherkin.name,\n values\n );\n\n const exampleScope = scope(accumulator.data.scope).findExample(title);\n const bridge = new ExampleBridge();\n bridge.data = { gherkin, scope: exampleScope };\n const acc = accumulator as ExamplesBridge;\n acc.scenarios.push(bridge);\n return bridge;\n },\n onBackground(gherkin, accumulator) {\n const backgroundScope = scope(accumulator.data.scope).findBackground({\n name: gherkin.name,\n });\n const bridge = new BackgroundBridge();\n bridge.data = { gherkin, scope: backgroundScope };\n const acc = accumulator as FeatureBridge | RuleBridge;\n acc.background = bridge;\n return bridge;\n },\n onStep: (step, accumulator) => {\n const {\n data: { scope: parentScope, gherkin },\n } = accumulator;\n const { keyword, keywordType, text } = step;\n const cache = parentScope.steps;\n const existing = getStep(\n accumulator,\n gherkin,\n cache,\n keywordType,\n keyword,\n text\n );\n const bridge = new StepBridge();\n const acc = accumulator as\n | BackgroundBridge\n | ScenarioBridge\n | RuleBridge\n | FeatureBridge;\n\n if (existing) {\n bridge.data = {\n gherkin: step,\n scope: existing.step,\n args: existing.args,\n };\n } else {\n raise(`No step definition matching ${step.keyword} ${step.text}`);\n }\n\n acc.steps.push(bridge);\n return accumulator;\n },\n },\n this.feature,\n bridge\n );\n return bridge;\n }\n}\nfunction getStep(\n accumulator: GherkinCodeBridge,\n gherkin: GherkinNode,\n cache: StepCache,\n keywordType: StepType,\n keyword: StepKeyword,\n text: string\n) {\n try {\n if (accumulator instanceof ExampleBridge) {\n const scenario = gherkin as Example;\n if (scenario.table) {\n return cache.findByExample(keywordType, keyword, text, scenario.table);\n }\n }\n return cache.find(keywordType, keyword, text);\n } catch (e) {\n const cause = e as Error;\n const { title } = gherkin as Scenario;\n raise(`'${title}' could not find a step definition`, { cause });\n }\n}\n"],"mappings":"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","names":["scope","scope","import_gherkin","import_gherkin","import_errors","import_errors","import_scopes","import_gherkin","import_errors","bridge"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/bridges/bridge.ts","../src/bridges/bridge-search.ts","../src/bridges/bridge-query.ts","../src/gherkin-walker.ts","../src/scope-search.ts","../src/test-builder.ts"],"sourcesContent":["export * from \"./bridges\";\nexport * from \"./test-builder\";\nexport * from \"./scope-search\";\nexport * from \"./gherkin-walker\";\n","import { App } from \"@autometa/app\";\nimport {\n Background,\n DataTable,\n Example,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { BackgroundScope, GlobalScope } from \"@autometa/scopes\";\nimport {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n ScenarioScope,\n Scope,\n StepScope,\n} from \"@autometa/scopes\";\n\nexport abstract class GherkinCodeBridge {\n abstract data: { gherkin: GherkinNode; scope: Scope };\n}\nexport class GlobalBridge extends GherkinCodeBridge {\n readonly data: { gherkin: GherkinNode; scope: GlobalScope };\n constructor(scope: GlobalScope) {\n super();\n const nullNode = class extends GherkinNode {\n keyword = \"none\";\n };\n this.data = {\n scope,\n gherkin: new nullNode(),\n };\n }\n}\nexport class FeatureBridge extends GherkinCodeBridge {\n data: { gherkin: Feature; scope: FeatureScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n rules: RuleBridge[] = [];\n steps: StepBridge[] = [];\n}\nexport class BackgroundBridge extends GherkinCodeBridge {\n data: { gherkin: Background; scope: BackgroundScope };\n steps: StepBridge[] = [];\n}\n\nexport class RuleBridge extends GherkinCodeBridge {\n data: { gherkin: Rule; scope: RuleScope };\n background: BackgroundBridge;\n scenarios: (ScenarioBridge | ScenarioOutlineBridge)[] = [];\n steps: StepBridge[] = [];\n}\n\nexport class ScenarioBridge extends GherkinCodeBridge {\n data: { gherkin: Scenario; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ExampleBridge extends GherkinCodeBridge {\n data: { gherkin: Example; scope: ScenarioScope };\n steps: StepBridge[] = [];\n report: {\n passed?: boolean;\n error?: Error;\n } = {};\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\nexport class ScenarioOutlineBridge extends GherkinCodeBridge {\n data: { gherkin: ScenarioOutline; scope: ScenarioOutlineScope };\n examples: ExamplesBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class ExamplesBridge extends GherkinCodeBridge {\n data: { gherkin: Examples; scope: ScenarioOutlineScope };\n scenarios: ScenarioBridge[] = [];\n steps: StepBridge[] = [];\n get title() {\n return this.data.scope.title(this.data.gherkin);\n }\n get tags() {\n return [...this.data.gherkin.tags];\n }\n}\n\nexport class StepBridge extends GherkinCodeBridge {\n data: {\n gherkin: Step;\n scope: StepScope<string, DataTable | undefined>;\n args: undefined | ((app: App) => unknown[]);\n };\n\n get args() {\n return this.data.args\n }\n\n get expressionText() {\n return this.data.scope.expression.source;\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport {\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n RuleBridge,\n} from \"./bridge\";\n\nexport function find(\n bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n if (bridge instanceof FeatureBridge) {\n return findByFeature(bridge, testName);\n }\n if (bridge instanceof RuleBridge) {\n return findByRule(bridge, testName);\n }\n if (bridge instanceof ScenarioOutlineBridge) {\n return findScenarioOutlineOrChild(bridge, testName);\n }\n\n throw new AutomationError(`Could not find test matching ${testName}`);\n}\nfunction findByFeature(\n feature: FeatureBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = feature.data.scope.title(feature.data.gherkin);\n const byScenario = findTestTypes(feature.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleTypes(feature.rules, testName, title);\n if (byRule) {\n return byRule;\n }\n}\nfunction findByRule(\n rule: RuleBridge,\n testName: string\n): GherkinCodeBridge | undefined {\n const title = rule.data.scope.title(rule.data.gherkin);\n const byScenario = findTestTypes(rule.scenarios, testName, title);\n if (byScenario) {\n return byScenario;\n }\n const byRule = findRuleOrChild(rule, testName, title);\n if (byRule) {\n return byRule;\n }\n}\n\nexport function findTestTypes(\n scenarios: (ScenarioBridge | ScenarioOutlineBridge | ExamplesBridge)[],\n testName: string,\n from?: string\n) {\n for (const scenario of scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n const found = findScenarioOutlineOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ExamplesBridge) {\n const found = findExamplesOrChild(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n if (scenario instanceof ScenarioBridge) {\n const found = findScenario(scenario, testName, from);\n if (found) {\n return found;\n }\n }\n }\n}\n\nexport function findRuleTypes(\n rules: RuleBridge[],\n testName: string,\n from?: string\n) {\n for (const rule of rules) {\n const found = findRuleOrChild(rule, testName, from);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findRuleOrChild(\n rule: RuleBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = rule;\n const title = scope.title(gherkin);\n if (testName === title) {\n return rule;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return rule;\n }\n }\n const newFrom = appendPath(from, title);\n return findTestTypes(rule.scenarios, testName, newFrom);\n}\n\nexport function findScenarioOutlineOrChild(\n outline: ScenarioOutlineBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = outline;\n const title = scope.title(gherkin);\n if (testName === title) {\n return outline;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return outline;\n }\n }\n for (const example of outline.examples) {\n const newFrom = appendPath(from, title);\n const found = findExamplesOrChild(example, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nfunction appendPath(from: string | undefined, title: string) {\n return from ? `${from} ${title}` : title;\n}\n\nexport function findExamplesOrChild(\n example: ExamplesBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = example;\n const title = scope.title(gherkin);\n if (testName === title) {\n return example;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return example;\n }\n }\n for (const scenario of example.scenarios) {\n const newFrom = appendPath(from, title);\n const found = findScenario(scenario, testName, newFrom);\n if (found) {\n return found;\n }\n }\n}\n\nexport function findScenario(\n scenario: ScenarioBridge,\n testName: string,\n from?: string\n) {\n const {\n data: { scope, gherkin },\n } = scenario;\n const title = scope.title(gherkin);\n if (testName === title) {\n return scenario;\n }\n if (from) {\n const fullTitle = `${from} ${title}`;\n if (fullTitle === testName) {\n return scenario;\n }\n }\n}\n","import { Background, GherkinNode } from \"@autometa/gherkin\";\nimport {\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n} from \".\";\n\nfunction failed(bridge: FeatureBridge | RuleBridge | ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n if (bridge instanceof ScenarioOutlineBridge) {\n return failedOutline(bridge);\n }\n for (const scenario of bridge.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed && scenario.report.error !== undefined) {\n accumulator.push(scenario);\n }\n }\n if (bridge instanceof FeatureBridge) {\n accumulator.push(...failedRule(bridge));\n }\n return accumulator;\n}\n\nfunction failedOutline(bridge: ScenarioOutlineBridge) {\n const accumulator: ScenarioBridge[] = [];\n\n for (const example of bridge.examples) {\n for (const scenario of example.scenarios) {\n if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction failedRule(bridge: FeatureBridge) {\n const accumulator: ScenarioBridge[] = [];\n for (const rule of bridge.rules) {\n for (const scenario of rule.scenarios) {\n if (scenario instanceof ScenarioOutlineBridge) {\n accumulator.push(...failedOutline(scenario));\n } else if (!scenario.report.passed) {\n accumulator.push(scenario);\n }\n }\n }\n return accumulator;\n}\n\nfunction gherkinToTestNames(\n node: GherkinNode,\n path = \"\",\n accumulator: string[] = []\n) {\n if (!(\"name\" in node) || node instanceof Background) {\n return;\n }\n const title = `${node.keyword}: ${node.name}`;\n const fullPath = path ? `${path} ${title}` : title;\n accumulator.push(fullPath);\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n if (!(\"name\" in child) || child instanceof Background) {\n continue;\n }\n gherkinToTestNames(child, fullPath, accumulator);\n }\n return accumulator;\n}\n\nexport const Query = {\n find: {\n failed,\n },\n testNames: gherkinToTestNames,\n};\n","import {\n Background,\n Examples,\n Feature,\n GherkinNode,\n Rule,\n Scenario,\n ScenarioOutline,\n Step,\n} from \"@autometa/gherkin\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { Example } from \"@autometa/gherkin\";\n\nexport type WalkFunction<T extends GherkinNode, TAccumulator, TReturn> = (\n node: T,\n accumulator: TAccumulator,\n lastNode?: GherkinNode\n) => TReturn;\n\nexport type WalkFunctionMap<TAccumulator> = {\n onFeature?: WalkFunction<Feature, TAccumulator, TAccumulator>;\n onRule?: WalkFunction<Rule, TAccumulator, TAccumulator>;\n onBackground?: WalkFunction<Background, TAccumulator, TAccumulator>;\n onScenario?: WalkFunction<Scenario, TAccumulator, TAccumulator>;\n onScenarioOutline?: WalkFunction<ScenarioOutline, TAccumulator, TAccumulator>;\n onExamples?: WalkFunction<Examples, TAccumulator, TAccumulator>;\n onExample?: WalkFunction<Example, TAccumulator, TAccumulator>;\n onStep?: WalkFunction<Step, TAccumulator, TAccumulator>;\n};\n\nexport class GherkinWalker {\n static walk<TAccumulator>(\n walkFunction: WalkFunctionMap<TAccumulator>,\n childNode: GherkinNode,\n accumulator: TAccumulator,\n parentNode?: GherkinNode\n ) {\n if (accumulator === undefined) {\n throw new AutomationError(\n `An accumulator must be defined to continue the walker from ${\n childNode.constructor.name\n }${JSON.stringify(childNode)}`\n );\n }\n this.#walkNode(childNode, accumulator, walkFunction, parentNode);\n return accumulator;\n }\n\n static #walkNode<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n walkFunction: WalkFunctionMap<TAccumulator>,\n lastNode?: GherkinNode\n ) {\n if (child instanceof Feature && walkFunction.onFeature) {\n const acc = walkFunction.onFeature(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Rule && walkFunction.onRule) {\n const acc = walkFunction.onRule(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Examples) {\n const acc = walkFunction.onExamples?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Example) {\n const acc = walkFunction.onExample?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Scenario) {\n const acc = walkFunction.onScenario?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof ScenarioOutline) {\n const acc = walkFunction.onScenarioOutline?.(\n child,\n accumulator,\n lastNode\n );\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Background) {\n const acc = walkFunction?.onBackground?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n\n if (child instanceof Step) {\n const acc = walkFunction.onStep?.(child, accumulator, lastNode);\n return this.#walkChildren(child, acc, walkFunction);\n }\n }\n\n static #walkChildren<TAccumulator>(\n child: GherkinNode,\n accumulator: TAccumulator,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walkFunction: WalkFunctionMap<any>\n ) {\n for (const node of child.children) {\n this.walk(walkFunction, node, accumulator, child);\n }\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport { StepKeyword } from \"@autometa/gherkin\";\nimport { StepType } from \"@autometa/gherkin\";\nimport {\n Scope,\n RuleScope,\n ScenarioScope,\n ScenarioOutlineScope,\n BackgroundScope,\n} from \"@autometa/scopes\";\nimport { Empty_Function } from \"@autometa/scopes\";\n\nexport function scope(value: Scope) {\n return {\n findRule: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return child instanceof RuleScope && child.name === name;\n }) as RuleScope | undefined;\n if (!found) {\n const rule = new RuleScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(rule);\n return rule;\n }\n return found;\n },\n findScenario: (name: string) => {\n const found = value.closedScopes.find((child) => {\n return (\n child instanceof ScenarioScope &&\n child.name === name &&\n !(child instanceof ScenarioOutlineScope)\n );\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findBackground: ({ name }: { name?: string }): BackgroundScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof BackgroundScope;\n }) as BackgroundScope | undefined;\n if (found && found.name !== name) {\n throw new AutomationError(\n `Could not find background matching ${name} but found ${found?.name}`\n );\n }\n if (found) {\n return found;\n }\n\n const bgScope = new BackgroundScope(\n name,\n Empty_Function,\n value.hooks,\n value.steps\n );\n value.attach(bgScope);\n return bgScope;\n },\n findScenarioOutline: (name: string): ScenarioOutlineScope => {\n const found = value.closedScopes.find((child) => {\n return child instanceof ScenarioOutlineScope && child.name === name;\n }) as ScenarioOutlineScope | undefined;\n if (!found) {\n const scenarioOutline = new ScenarioOutlineScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenarioOutline);\n return scenarioOutline;\n }\n return found;\n },\n findExample(name: string): ScenarioScope {\n const found = value.closedScopes.find((child) => {\n if (!(child instanceof ScenarioScope)) {\n return false;\n }\n return child.name === name;\n }) as ScenarioScope;\n if (!found) {\n const scenario = new ScenarioScope(\n name,\n Empty_Function,\n undefined,\n value.hooks,\n value.steps\n );\n value.attach(scenario);\n return scenario;\n }\n return found;\n },\n findStep: (keywordType: StepType, keyword: StepKeyword, name: string) => {\n return value.steps.find(keywordType, keyword, name);\n },\n };\n}\n","import {\n FeatureScope,\n RuleScope,\n ScenarioOutlineScope,\n StepCache,\n} from \"@autometa/scopes\";\nimport {\n BackgroundBridge,\n ExampleBridge,\n ExamplesBridge,\n FeatureBridge,\n GherkinCodeBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n StepBridge,\n} from \"./bridges\";\nimport { GherkinWalker } from \"./gherkin-walker\";\nimport { scope } from \"./scope-search\";\nimport { Bind } from \"@autometa/bind-decorator\";\nimport { Example, Feature, GherkinNode, Scenario } from \"@autometa/gherkin\";\nimport { raise } from \"@autometa/errors\";\nimport { StepKeyword, StepType } from \"@autometa/types\";\nexport class TestBuilder {\n constructor(readonly feature: Feature) {}\n @Bind\n onFeatureExecuted(featureScope: FeatureScope) {\n const bridge = new FeatureBridge();\n GherkinWalker.walk<GherkinCodeBridge>(\n {\n onFeature: (feature, accumulator) => {\n accumulator.data = { gherkin: feature, scope: featureScope };\n return accumulator;\n },\n onRule: (rule, accumulator) => {\n const ruleScope = scope(featureScope).findRule(\n rule.name\n ) as RuleScope;\n const bridge = new RuleBridge();\n bridge.data = { gherkin: rule, scope: ruleScope };\n (accumulator as FeatureBridge).rules.push(bridge);\n return bridge;\n },\n onScenario: (gherkin, accumulator) => {\n const scenarioScope = scope(accumulator.data.scope).findScenario(\n gherkin.name\n );\n const bridge = new ScenarioBridge();\n bridge.data = { gherkin, scope: scenarioScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n // if accumulator is a outline, push to examples\n\n return bridge;\n },\n onScenarioOutline: (gherkin, accumulator) => {\n const outlineScope = scope(\n accumulator.data.scope\n ).findScenarioOutline(gherkin.name);\n const bridge = new ScenarioOutlineBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as FeatureBridge | RuleBridge).scenarios.push(bridge);\n return bridge;\n },\n onExamples: (gherkin, accumulator) => {\n const outlineScope = accumulator.data.scope as ScenarioOutlineScope;\n const bridge = new ExamplesBridge();\n bridge.data = { gherkin, scope: outlineScope };\n (accumulator as ScenarioOutlineBridge).examples.push(bridge);\n return bridge;\n },\n onExample(gherkin, accumulator) {\n if (gherkin.table === undefined) {\n raise(\n `Example ${gherkin.name} has no Example Table data. A Row of data is required.`\n );\n }\n const title = gherkin.name;\n\n const exampleScope = scope(accumulator.data.scope).findExample(title);\n const bridge = new ExampleBridge();\n bridge.data = { gherkin, scope: exampleScope };\n const acc = accumulator as ExamplesBridge;\n acc.scenarios.push(bridge);\n return bridge;\n },\n onBackground(gherkin, accumulator) {\n const backgroundScope = scope(accumulator.data.scope).findBackground({\n name: gherkin.name,\n });\n const bridge = new BackgroundBridge();\n bridge.data = { gherkin, scope: backgroundScope };\n const acc = accumulator as FeatureBridge | RuleBridge;\n acc.background = bridge;\n return bridge;\n },\n onStep: (step, accumulator) => {\n const {\n data: { scope: parentScope, gherkin },\n } = accumulator;\n const { keyword, keywordType, text } = step;\n const cache = parentScope.steps;\n const existing = getStep(\n accumulator,\n gherkin,\n cache,\n keywordType,\n keyword,\n text\n );\n const bridge = new StepBridge();\n const acc = accumulator as\n | BackgroundBridge\n | ScenarioBridge\n | RuleBridge\n | FeatureBridge;\n\n if (existing) {\n bridge.data = {\n gherkin: step,\n scope: existing.step,\n args: existing.args,\n };\n } else {\n raise(`No step definition matching ${step.keyword} ${step.text}`);\n }\n\n acc.steps.push(bridge);\n return accumulator;\n },\n },\n this.feature,\n bridge\n );\n return bridge;\n }\n}\nfunction getStep(\n accumulator: GherkinCodeBridge,\n gherkin: GherkinNode,\n cache: StepCache,\n keywordType: StepType,\n keyword: StepKeyword,\n text: string\n) {\n try {\n if (accumulator instanceof ExampleBridge) {\n const scenario = gherkin as Example;\n if (scenario.table) {\n return cache.findByExample(keywordType, keyword, text, scenario.table);\n }\n }\n return cache.find(keywordType, keyword, text);\n } catch (e) {\n const cause = e as Error;\n const { title } = gherkin as Scenario;\n raise(`'${title}' could not find a step definition`, { cause });\n }\n}\n"],"mappings":"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","names":["scope","scope","import_gherkin","import_gherkin","import_errors","import_errors","import_scopes","import_errors","bridge"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autometa/test-builder",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "internal library for autometa",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -27,22 +27,22 @@
27
27
  "tsup": "^7.2.0",
28
28
  "typescript": "^4.9.5",
29
29
  "vitest": "1.4.0",
30
- "eslint-config-custom": "0.6.0",
31
- "tsconfig": "0.7.0"
30
+ "tsconfig": "0.7.0",
31
+ "eslint-config-custom": "0.6.0"
32
32
  },
33
33
  "dependencies": {
34
34
  "@cucumber/cucumber-expressions": "^16.1.2",
35
35
  "zod": "^3.21.4",
36
36
  "@autometa/app": "^0.3.4",
37
+ "@autometa/errors": "^0.2.2",
37
38
  "@autometa/bind-decorator": "^0.5.1",
39
+ "@autometa/gherkin": "^0.6.13",
38
40
  "@autometa/asserters": "^0.1.8",
39
- "@autometa/dto-builder": "^0.13.9",
40
- "@autometa/errors": "^0.2.2",
41
- "@autometa/events": "^0.2.23",
42
- "@autometa/gherkin": "^0.6.11",
43
- "@autometa/scopes": "^0.6.1",
41
+ "@autometa/phrases": "^0.1.12",
44
42
  "@autometa/types": "^0.4.1",
45
- "@autometa/phrases": "^0.1.12"
43
+ "@autometa/scopes": "^0.6.3",
44
+ "@autometa/dto-builder": "^0.13.9",
45
+ "@autometa/events": "^0.2.25"
46
46
  },
47
47
  "scripts": {
48
48
  "test": "vitest run --passWithNoTests",