diff --git a/CHANGELOG.md b/CHANGELOG.md index 85e04fe5..665b65e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,20 @@ All user visible changes to `cucumber` crate will be documented in this file. Th +## main + +[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.22.0...main) | [Milestone](https://github.com/cucumber-rs/cucumber/milestone/31) + +### Fixed + +- Incorrectly disallowed spaces inside placeholders for `Examples`. ([#388], [#387]) + +[#387]: https://github.com/cucumber-rs/cucumber/issues/387 +[#388]: https://github.com/cucumber-rs/cucumber/pull/388 + + + + ## [0.22.0] · 2025-12-12 [0.22.0]: https://github.com/cucumber-rs/cucumber/tree/v0.22.0 diff --git a/src/feature.rs b/src/feature.rs index 244447e4..b6a0c3a9 100644 --- a/src/feature.rs +++ b/src/feature.rs @@ -142,12 +142,18 @@ fn expand_scenario( ) -> Vec> { /// [`Regex`] matching placeholders [`Examples`] should expand into. /// + /// # Format + /// + /// - Spaces are allowed inside placeholder. + /// - Placeholder cannot start or end with a space. + /// /// [`Examples`]: gherkin::Examples // TODO: Switch back to `lazy-regex::regex!()` once it migrates to `std`: // https://github.com/Canop/lazy-regex/issues/10 #[expect(clippy::unwrap_used, reason = "regex is valid")] - static TEMPLATE_REGEX: LazyLock = - LazyLock::new(|| Regex::new(r"<([^>\s]+)>").unwrap()); + static TEMPLATE_REGEX: LazyLock = LazyLock::new(|| { + Regex::new(r"<([^>\s](?:[^>\s]?|[^>\t\n\r\v\f]*[^>\s]))>").unwrap() + }); if scenario.examples.is_empty() { return vec![Ok(scenario)]; diff --git a/tests/features/output/background_scenario_outline.feature b/tests/features/output/background_scenario_outline.feature index fbff210b..ebaf5c74 100644 --- a/tests/features/output/background_scenario_outline.feature +++ b/tests/features/output/background_scenario_outline.feature @@ -6,8 +6,8 @@ Feature: Outline Scenario Outline: foo Given foo is When foo is - Then foo is + Then foo is Examples: - | bar1 | bar2 | bar3 | - | 1 | 2 | 3 | + | bar1 | bar2 | bar 3 | + | 1 | 2 | 3 | diff --git a/tests/features/output/background_scenario_outline.feature.debug.out b/tests/features/output/background_scenario_outline.feature.debug.out index 14412f5f..b9fc6e2a 100644 --- a/tests/features/output/background_scenario_outline.feature.debug.out +++ b/tests/features/output/background_scenario_outline.feature.debug.out @@ -1,15 +1,15 @@ ParsingFinished { features: 1, rules: 0, scenarios: 1, steps: 3, parser_errors: 0 } Started -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Started) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Started, retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Background(Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Started), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Background(Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 9, column: 1 }))), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Started), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 9, column: 1 }))), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Started), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 10, column: 1 }))), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }, Started), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 11, column: 1 }))), retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Finished, retries: None })) -Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Finished) -Finished \ No newline at end of file +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Started) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Started, retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Background(Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Background(Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 9, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 9, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 10, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Step(Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 11, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }, RetryableScenario { event: Finished, retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: Some(Background { keyword: "Background", name: "", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }], position: LineCol { line: 3 } }), scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 7 } }, Step { keyword: "When ", ty: When, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 8 } }, Step { keyword: "Then ", ty: Then, value: "foo is 3", docstring: None, table: None, position: LineCol { line: 9 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar1", "bar2", "bar 3"], ["1", "2", "3"]], position: LineCol { line: 12 } }), tags: [], position: LineCol { line: 11 } }], tags: [], position: LineCol { line: 13 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Finished) +Finished diff --git a/tests/features/output/scenario_outline_with_spaces_in_headers.feature b/tests/features/output/scenario_outline_with_spaces_in_headers.feature new file mode 100644 index 00000000..40c096d9 --- /dev/null +++ b/tests/features/output/scenario_outline_with_spaces_in_headers.feature @@ -0,0 +1,10 @@ +Feature: Outline + + Scenario Outline: foo + Given foo is + When foo is + Then foo is + + Examples: + | bar 1 | bar two | bar three | + | 0 | 1 | 2 | diff --git a/tests/features/output/scenario_outline_with_spaces_in_headers.feature.basic.out b/tests/features/output/scenario_outline_with_spaces_in_headers.feature.basic.out new file mode 100644 index 00000000..1ff670a4 --- /dev/null +++ b/tests/features/output/scenario_outline_with_spaces_in_headers.feature.basic.out @@ -0,0 +1,5 @@ +Feature: Outline + Scenario Outline: foo + ✔ Given foo is 0 + ✔ When foo is 1 + ✔ Then foo is 2 diff --git a/tests/features/output/scenario_outline_with_spaces_in_headers.feature.colored.out b/tests/features/output/scenario_outline_with_spaces_in_headers.feature.colored.out new file mode 100644 index 00000000..34f5df45 --- /dev/null +++ b/tests/features/output/scenario_outline_with_spaces_in_headers.feature.colored.out @@ -0,0 +1,8 @@ +Feature: Outline + Scenario Outline: foo + Given foo is 0 +  ✔ Given foo is 0 + When foo is 1 +  ✔ When foo is 1 + Then foo is 2 +  ✔ Then foo is 2 diff --git a/tests/features/output/scenario_outline_with_spaces_in_headers.feature.debug.out b/tests/features/output/scenario_outline_with_spaces_in_headers.feature.debug.out new file mode 100644 index 00000000..2973be30 --- /dev/null +++ b/tests/features/output/scenario_outline_with_spaces_in_headers.feature.debug.out @@ -0,0 +1,13 @@ +ParsingFinished { features: 1, rules: 0, scenarios: 1, steps: 3, parser_errors: 0 } +Started +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Started) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Started, retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Step(Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Step(Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 9, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Step(Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Step(Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 10, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Step(Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }, Started), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Step(Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }, Passed(CaptureLocations(Captures { pid: Some(PatternID(0)), spans: {0: 0..8, 1: 7..8} }), Some(Location { line: 11, column: 1 }))), retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Scenario(Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }, RetryableScenario { event: Finished, retries: None })) +Feature(Feature { keyword: "Feature", name: "Outline", description: None, background: None, scenarios: [Scenario { keyword: "Scenario Outline", name: "foo", description: None, steps: [Step { keyword: "Given ", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 4 } }, Step { keyword: "When ", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 5 } }, Step { keyword: "Then ", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 6 } }], examples: [Examples { keyword: "Examples", name: None, description: None, table: Some(Table { rows: [["bar 1", "bar two", "bar three"], ["0", "1", "2"]], position: LineCol { line: 9 } }), tags: [], position: LineCol { line: 8 } }], tags: [], position: LineCol { line: 10 } }], rules: [], tags: [], position: LineCol { line: 1 }, }, Finished) +Finished