@autometa/test-builder 0.3.4 → 0.3.6

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/test-builder
2
2
 
3
+ ## 0.3.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 23dacf2: fix: non negative tag filters being skipped when group is untagged
8
+
9
+ ## 0.3.5
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [1d3f84e]
14
+ - @autometa/app@0.3.5
15
+ - @autometa/scopes@0.6.5
16
+
3
17
  ## 0.3.4
4
18
 
5
19
  ### Patch Changes
package/dist/esm/index.js CHANGED
@@ -51,6 +51,12 @@ var FeatureBridge = class extends GherkinCodeBridge {
51
51
  this.rules = [];
52
52
  this.steps = [];
53
53
  }
54
+ accumulateTags() {
55
+ const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();
56
+ const ruleTags = this.rules.map((rule) => rule.accumulateTags()).flat();
57
+ const allTags = [...this.data.gherkin.tags, ...scenarioTags, ...ruleTags];
58
+ return [...new Set(allTags)];
59
+ }
54
60
  };
55
61
  var BackgroundBridge = class extends GherkinCodeBridge {
56
62
  constructor() {
@@ -64,6 +70,11 @@ var RuleBridge = class extends GherkinCodeBridge {
64
70
  this.scenarios = [];
65
71
  this.steps = [];
66
72
  }
73
+ accumulateTags() {
74
+ const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();
75
+ const allTags = [...this.data.gherkin.tags, ...scenarioTags];
76
+ return [...new Set(allTags)];
77
+ }
67
78
  };
68
79
  var ScenarioBridge = class extends GherkinCodeBridge {
69
80
  constructor() {
@@ -77,6 +88,9 @@ var ScenarioBridge = class extends GherkinCodeBridge {
77
88
  get tags() {
78
89
  return [...this.data.gherkin.tags];
79
90
  }
91
+ accumulateTags() {
92
+ return this.tags;
93
+ }
80
94
  };
81
95
  var ExampleBridge = class extends GherkinCodeBridge {
82
96
  constructor() {
@@ -90,6 +104,9 @@ var ExampleBridge = class extends GherkinCodeBridge {
90
104
  get tags() {
91
105
  return [...this.data.gherkin.tags];
92
106
  }
107
+ accumulateTags() {
108
+ return this.tags;
109
+ }
93
110
  };
94
111
  var ScenarioOutlineBridge = class extends GherkinCodeBridge {
95
112
  constructor() {
@@ -103,6 +120,11 @@ var ScenarioOutlineBridge = class extends GherkinCodeBridge {
103
120
  get tags() {
104
121
  return [...this.data.gherkin.tags];
105
122
  }
123
+ accumulateTags() {
124
+ const exampleTags = this.examples.map((example) => example.tags).flat();
125
+ const allTags = [...this.data.gherkin.tags, ...exampleTags];
126
+ return [...new Set(allTags)];
127
+ }
106
128
  };
107
129
  var ExamplesBridge = class extends GherkinCodeBridge {
108
130
  constructor() {
@@ -116,6 +138,11 @@ var ExamplesBridge = class extends GherkinCodeBridge {
116
138
  get tags() {
117
139
  return [...this.data.gherkin.tags];
118
140
  }
141
+ accumulateTags() {
142
+ const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();
143
+ const allTags = [...this.data.gherkin.tags, ...scenarioTags];
144
+ return [...new Set(allTags)];
145
+ }
119
146
  };
120
147
  var StepBridge = class extends GherkinCodeBridge {
121
148
  get args() {
@@ -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: { gherkin },\n } = example;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\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"]}
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\n accumulateTags() {\n const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();\n const ruleTags = this.rules.map((rule) => rule.accumulateTags()).flat();\n const allTags = [...this.data.gherkin.tags, ...scenarioTags, ...ruleTags];\n return [...new Set(allTags)];\n }\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 accumulateTags() {\n const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();\n const allTags = [...this.data.gherkin.tags, ...scenarioTags];\n return [...new Set(allTags)];\n }\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\n accumulateTags() {\n return this.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\n accumulateTags() {\n return this.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 accumulateTags() {\n const exampleTags = this.examples.map((example) => example.tags).flat();\n const allTags = [...this.data.gherkin.tags, ...exampleTags];\n return [...new Set(allTags)];\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 \n get tags() {\n return [...this.data.gherkin.tags];\n }\n\n accumulateTags() {\n const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();\n const allTags = [...this.data.gherkin.tags, ...scenarioTags];\n return [...new Set(allTags)];\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: { gherkin },\n } = example;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\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.d.cts CHANGED
@@ -26,6 +26,7 @@ declare class FeatureBridge extends GherkinCodeBridge {
26
26
  scenarios: (ScenarioBridge | ScenarioOutlineBridge)[];
27
27
  rules: RuleBridge[];
28
28
  steps: StepBridge[];
29
+ accumulateTags(): string[];
29
30
  }
30
31
  declare class BackgroundBridge extends GherkinCodeBridge {
31
32
  data: {
@@ -42,6 +43,7 @@ declare class RuleBridge extends GherkinCodeBridge {
42
43
  background: BackgroundBridge;
43
44
  scenarios: (ScenarioBridge | ScenarioOutlineBridge)[];
44
45
  steps: StepBridge[];
46
+ accumulateTags(): string[];
45
47
  }
46
48
  declare class ScenarioBridge extends GherkinCodeBridge {
47
49
  data: {
@@ -55,6 +57,7 @@ declare class ScenarioBridge extends GherkinCodeBridge {
55
57
  };
56
58
  get title(): string;
57
59
  get tags(): string[];
60
+ accumulateTags(): string[];
58
61
  }
59
62
  declare class ExampleBridge extends GherkinCodeBridge {
60
63
  data: {
@@ -68,6 +71,7 @@ declare class ExampleBridge extends GherkinCodeBridge {
68
71
  };
69
72
  get title(): string;
70
73
  get tags(): string[];
74
+ accumulateTags(): string[];
71
75
  }
72
76
  declare class ScenarioOutlineBridge extends GherkinCodeBridge {
73
77
  data: {
@@ -78,6 +82,7 @@ declare class ScenarioOutlineBridge extends GherkinCodeBridge {
78
82
  steps: StepBridge[];
79
83
  get title(): string;
80
84
  get tags(): string[];
85
+ accumulateTags(): string[];
81
86
  }
82
87
  declare class ExamplesBridge extends GherkinCodeBridge {
83
88
  data: {
@@ -88,6 +93,7 @@ declare class ExamplesBridge extends GherkinCodeBridge {
88
93
  steps: StepBridge[];
89
94
  get title(): string;
90
95
  get tags(): string[];
96
+ accumulateTags(): string[];
91
97
  }
92
98
  declare class StepBridge extends GherkinCodeBridge {
93
99
  data: {
package/dist/index.d.ts CHANGED
@@ -26,6 +26,7 @@ declare class FeatureBridge extends GherkinCodeBridge {
26
26
  scenarios: (ScenarioBridge | ScenarioOutlineBridge)[];
27
27
  rules: RuleBridge[];
28
28
  steps: StepBridge[];
29
+ accumulateTags(): string[];
29
30
  }
30
31
  declare class BackgroundBridge extends GherkinCodeBridge {
31
32
  data: {
@@ -42,6 +43,7 @@ declare class RuleBridge extends GherkinCodeBridge {
42
43
  background: BackgroundBridge;
43
44
  scenarios: (ScenarioBridge | ScenarioOutlineBridge)[];
44
45
  steps: StepBridge[];
46
+ accumulateTags(): string[];
45
47
  }
46
48
  declare class ScenarioBridge extends GherkinCodeBridge {
47
49
  data: {
@@ -55,6 +57,7 @@ declare class ScenarioBridge extends GherkinCodeBridge {
55
57
  };
56
58
  get title(): string;
57
59
  get tags(): string[];
60
+ accumulateTags(): string[];
58
61
  }
59
62
  declare class ExampleBridge extends GherkinCodeBridge {
60
63
  data: {
@@ -68,6 +71,7 @@ declare class ExampleBridge extends GherkinCodeBridge {
68
71
  };
69
72
  get title(): string;
70
73
  get tags(): string[];
74
+ accumulateTags(): string[];
71
75
  }
72
76
  declare class ScenarioOutlineBridge extends GherkinCodeBridge {
73
77
  data: {
@@ -78,6 +82,7 @@ declare class ScenarioOutlineBridge extends GherkinCodeBridge {
78
82
  steps: StepBridge[];
79
83
  get title(): string;
80
84
  get tags(): string[];
85
+ accumulateTags(): string[];
81
86
  }
82
87
  declare class ExamplesBridge extends GherkinCodeBridge {
83
88
  data: {
@@ -88,6 +93,7 @@ declare class ExamplesBridge extends GherkinCodeBridge {
88
93
  steps: StepBridge[];
89
94
  get title(): string;
90
95
  get tags(): string[];
96
+ accumulateTags(): string[];
91
97
  }
92
98
  declare class StepBridge extends GherkinCodeBridge {
93
99
  data: {
package/dist/index.js CHANGED
@@ -92,6 +92,12 @@ var FeatureBridge = class extends GherkinCodeBridge {
92
92
  this.rules = [];
93
93
  this.steps = [];
94
94
  }
95
+ accumulateTags() {
96
+ const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();
97
+ const ruleTags = this.rules.map((rule) => rule.accumulateTags()).flat();
98
+ const allTags = [...this.data.gherkin.tags, ...scenarioTags, ...ruleTags];
99
+ return [...new Set(allTags)];
100
+ }
95
101
  };
96
102
  var BackgroundBridge = class extends GherkinCodeBridge {
97
103
  constructor() {
@@ -105,6 +111,11 @@ var RuleBridge = class extends GherkinCodeBridge {
105
111
  this.scenarios = [];
106
112
  this.steps = [];
107
113
  }
114
+ accumulateTags() {
115
+ const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();
116
+ const allTags = [...this.data.gherkin.tags, ...scenarioTags];
117
+ return [...new Set(allTags)];
118
+ }
108
119
  };
109
120
  var ScenarioBridge = class extends GherkinCodeBridge {
110
121
  constructor() {
@@ -118,6 +129,9 @@ var ScenarioBridge = class extends GherkinCodeBridge {
118
129
  get tags() {
119
130
  return [...this.data.gherkin.tags];
120
131
  }
132
+ accumulateTags() {
133
+ return this.tags;
134
+ }
121
135
  };
122
136
  var ExampleBridge = class extends GherkinCodeBridge {
123
137
  constructor() {
@@ -131,6 +145,9 @@ var ExampleBridge = class extends GherkinCodeBridge {
131
145
  get tags() {
132
146
  return [...this.data.gherkin.tags];
133
147
  }
148
+ accumulateTags() {
149
+ return this.tags;
150
+ }
134
151
  };
135
152
  var ScenarioOutlineBridge = class extends GherkinCodeBridge {
136
153
  constructor() {
@@ -144,6 +161,11 @@ var ScenarioOutlineBridge = class extends GherkinCodeBridge {
144
161
  get tags() {
145
162
  return [...this.data.gherkin.tags];
146
163
  }
164
+ accumulateTags() {
165
+ const exampleTags = this.examples.map((example) => example.tags).flat();
166
+ const allTags = [...this.data.gherkin.tags, ...exampleTags];
167
+ return [...new Set(allTags)];
168
+ }
147
169
  };
148
170
  var ExamplesBridge = class extends GherkinCodeBridge {
149
171
  constructor() {
@@ -157,6 +179,11 @@ var ExamplesBridge = class extends GherkinCodeBridge {
157
179
  get tags() {
158
180
  return [...this.data.gherkin.tags];
159
181
  }
182
+ accumulateTags() {
183
+ const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();
184
+ const allTags = [...this.data.gherkin.tags, ...scenarioTags];
185
+ return [...new Set(allTags)];
186
+ }
160
187
  };
161
188
  var StepBridge = class extends GherkinCodeBridge {
162
189
  get args() {
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: { gherkin },\n } = example;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\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"]}
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\n accumulateTags() {\n const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();\n const ruleTags = this.rules.map((rule) => rule.accumulateTags()).flat();\n const allTags = [...this.data.gherkin.tags, ...scenarioTags, ...ruleTags];\n return [...new Set(allTags)];\n }\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 accumulateTags() {\n const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();\n const allTags = [...this.data.gherkin.tags, ...scenarioTags];\n return [...new Set(allTags)];\n }\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\n accumulateTags() {\n return this.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\n accumulateTags() {\n return this.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 accumulateTags() {\n const exampleTags = this.examples.map((example) => example.tags).flat();\n const allTags = [...this.data.gherkin.tags, ...exampleTags];\n return [...new Set(allTags)];\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 \n get tags() {\n return [...this.data.gherkin.tags];\n }\n\n accumulateTags() {\n const scenarioTags = this.scenarios.map((scenario) => scenario.accumulateTags()).flat();\n const allTags = [...this.data.gherkin.tags, ...scenarioTags];\n return [...new Set(allTags)];\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: { gherkin },\n } = example;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\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.4",
3
+ "version": "0.3.6",
4
4
  "description": "internal library for autometa",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -33,16 +33,16 @@
33
33
  "dependencies": {
34
34
  "@cucumber/cucumber-expressions": "^16.1.2",
35
35
  "zod": "^3.21.4",
36
+ "@autometa/app": "^0.3.5",
36
37
  "@autometa/bind-decorator": "^0.5.1",
37
- "@autometa/app": "^0.3.4",
38
38
  "@autometa/errors": "^0.2.2",
39
- "@autometa/asserters": "^0.1.8",
40
- "@autometa/dto-builder": "^0.13.9",
41
- "@autometa/events": "^0.2.26",
42
39
  "@autometa/gherkin": "^0.6.14",
43
- "@autometa/scopes": "^0.6.4",
44
40
  "@autometa/phrases": "^0.1.12",
45
- "@autometa/types": "^0.4.1"
41
+ "@autometa/dto-builder": "^0.13.9",
42
+ "@autometa/scopes": "^0.6.5",
43
+ "@autometa/types": "^0.4.1",
44
+ "@autometa/asserters": "^0.1.8",
45
+ "@autometa/events": "^0.2.26"
46
46
  },
47
47
  "scripts": {
48
48
  "test": "vitest run --passWithNoTests",