From d13612eb353fc0ad444161fda3aeb87889a7206b Mon Sep 17 00:00:00 2001 From: ilslv Date: Mon, 31 Jan 2022 14:15:34 +0300 Subject: [PATCH 1/6] Remove additional extension check --- .github/workflows/ci.yml | 9 ++++++++- CHANGELOG.md | 13 +++++++++++++ book/src/architecture/parser.md | 2 +- book/src/architecture/runner.md | 2 +- book/src/architecture/writer.md | 4 ++-- book/src/cli.md | 2 +- book/src/introduction.md | 2 +- book/src/output/terminal.md | 14 +++++++------- book/src/quickstart.md | 14 +++++++------- book/src/writing/asserting.md | 4 ++-- book/src/writing/background.md | 2 +- book/src/writing/capturing.md | 8 ++++---- book/src/writing/data_tables.md | 2 +- book/src/writing/doc_strings.md | 2 +- book/src/writing/languages.md | 2 +- book/src/writing/rule.md | 2 +- book/src/writing/scenario_outline.md | 2 +- book/src/writing/tags.md | 2 +- src/parser/basic.rs | 6 ------ tests/features/output/.feature | 5 +++++ tests/features/output/.feature.out | 12 ++++++++++++ tests/output.rs | 5 +++++ 22 files changed, 76 insertions(+), 40 deletions(-) create mode 100644 tests/features/output/.feature create mode 100644 tests/features/output/.feature.out diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51242896..839ceb7d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,7 +159,14 @@ jobs: if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') || !contains(github.event.head_commit.message, '[skip ci]') }} - runs-on: ubuntu-latest + strategy: + matrix: + fail-fast: false + os: + - ubuntu + - macOS + - windows + runs-on: ${{ matrix.os }}-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e5e22b4..547640a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,19 @@ All user visible changes to `cucumber` crate will be documented in this file. Th +## [0.11.3] · 2022-01-31 +[0.11.3]: /../../tree/v0.11.3 + +[Diff](/../../compare/v0.11.2...v0.11.3) | [Milestone](/../../milestone/8) + +### Fixed + +- Skipped files named `.feature`. ([#201]) + +[#201]: /../../issues/198 + + + ## [0.11.2] · 2022-01-19 [0.11.2]: /../../tree/v0.11.2 diff --git a/book/src/architecture/parser.md b/book/src/architecture/parser.md index f166669d..fe79eb2c 100644 --- a/book/src/architecture/parser.md +++ b/book/src/architecture/parser.md @@ -129,7 +129,7 @@ impl cucumber::Parser for CustomParser { async fn main() { AnimalWorld::cucumber::<&str>() // aiding type inference .with_parser(CustomParser) - .run_and_exit("/tests/features/book") // path doesn't actually matter + .run_and_exit("tests/features/book") // path doesn't actually matter .await; // here due to our implementation } ``` diff --git a/book/src/architecture/runner.md b/book/src/architecture/runner.md index 7a32ebb9..362aa9b1 100644 --- a/book/src/architecture/runner.md +++ b/book/src/architecture/runner.md @@ -259,7 +259,7 @@ async fn main() { AnimalWorld::cucumber::<&str>() // aiding type inference for `CustomParser` .with_parser(CustomParser) .with_runner(CustomRunner) - .run_and_exit("/tests/features/book") + .run_and_exit("tests/features/book") .await; } ``` diff --git a/book/src/architecture/writer.md b/book/src/architecture/writer.md index 93d05c74..38c3cbe2 100644 --- a/book/src/architecture/writer.md +++ b/book/src/architecture/writer.md @@ -291,7 +291,7 @@ async fn main() { .with_parser(CustomParser) .with_runner(CustomRunner) .with_writer(CustomWriter.assert_normalized()) // OK because of `CustomRunner` - .run("/tests/features/book") + .run("tests/features/book") .await; } ``` @@ -469,7 +469,7 @@ async fn main() { AnimalWorld::cucumber::<&str>() // aiding type inference for `CustomParser` .with_parser(CustomParser) .with_writer(CustomWriter.normalized()) // wrapping into `writer::Normalize`, - .run("/tests/features/book") // so it works OK with the default + .run("tests/features/book") // so it works OK with the default .await; // concurrent `Runner` } ``` diff --git a/book/src/cli.md b/book/src/cli.md index b4d4b010..61707ee3 100644 --- a/book/src/cli.md +++ b/book/src/cli.md @@ -139,7 +139,7 @@ async fn main() { AnimalWorld::cucumber() .before(move |_, _, _, _| sleep(pre_pause).boxed_local()) .with_cli(opts) - .run_and_exit("/tests/features/book/cli.feature") + .run_and_exit("tests/features/book/cli.feature") .await; } ``` diff --git a/book/src/introduction.md b/book/src/introduction.md index 94305992..2c3f4485 100644 --- a/book/src/introduction.md +++ b/book/src/introduction.md @@ -64,7 +64,7 @@ async fn is_full(w: &mut World) { # # #[tokio::main] # async fn main() { -# World::run("/tests/features/readme").await; +# World::run("tests/features/readme").await; # } ``` ![record](rec/readme.gif) diff --git a/book/src/output/terminal.md b/book/src/output/terminal.md index bfdc3913..b619bab9 100644 --- a/book/src/output/terminal.md +++ b/book/src/output/terminal.md @@ -69,7 +69,7 @@ async fn feed_cat(_: &mut AnimalWorld) {} # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("/tests/features/book/output/terminal_verbose.feature") +# .run_and_exit("tests/features/book/output/terminal_verbose.feature") # .await; # } ``` @@ -155,7 +155,7 @@ Feature: Animal feature #[tokio::main] async fn main() { AnimalWorld::cucumber() - .run_and_exit("/tests/features/book/output/terminal_verbose.feature") + .run_and_exit("tests/features/book/output/terminal_verbose.feature") .await; } ``` @@ -229,7 +229,7 @@ Coloring may be disabled by specifying `--color` CLI option: #[tokio::main] async fn main() { AnimalWorld::cucumber() - .run_and_exit("/tests/features/book/output/terminal.feature") + .run_and_exit("tests/features/book/output/terminal.feature") .await; } ``` @@ -308,7 +308,7 @@ async fn feed_cat(world: &mut AnimalWorld) { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("/tests/features/book/output/terminal.feature") +# .run_and_exit("tests/features/book/output/terminal.feature") # .await; # } ``` @@ -387,7 +387,7 @@ async fn main() { .summarized() .assert_normalized(), ) - .run_and_exit("/tests/features/book/output/terminal.feature") + .run_and_exit("tests/features/book/output/terminal.feature") .await; } ``` @@ -465,7 +465,7 @@ As a number of [scenario]s grows, it may become quite difficult to find failed/s async fn main() { AnimalWorld::cucumber() .repeat_failed() - .run_and_exit("/tests/features/book/output/terminal_repeat_failed.feature") + .run_and_exit("tests/features/book/output/terminal_repeat_failed.feature") .await; } ``` @@ -534,7 +534,7 @@ async fn main() { async fn main() { AnimalWorld::cucumber() .repeat_skipped() - .run_and_exit("/tests/features/book/output/terminal_repeat_skipped.feature") + .run_and_exit("tests/features/book/output/terminal_repeat_skipped.feature") .await; } ``` diff --git a/book/src/quickstart.md b/book/src/quickstart.md index 9fd6d38e..c8085784 100644 --- a/book/src/quickstart.md +++ b/book/src/quickstart.md @@ -82,7 +82,7 @@ fn main() { // You may choose any executor you like (`tokio`, `async-std`, etc.). // You may even have an `async` main, it doesn't matter. The point is that // Cucumber is composable. :) - futures::executor::block_on(AnimalWorld::run("/tests/features/book")); + futures::executor::block_on(AnimalWorld::run("tests/features/book")); } ``` @@ -149,7 +149,7 @@ fn feed_cat(world: &mut AnimalWorld) { } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); # } ``` @@ -208,7 +208,7 @@ fn cat_is_fed(world: &mut AnimalWorld) { } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); # } ``` @@ -267,7 +267,7 @@ fn cat_is_fed(world: &mut AnimalWorld) { assert!(world.cat.hungry); } # fn main() { -# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); # } ``` @@ -345,7 +345,7 @@ fn hungry_cat(world: &mut AnimalWorld, state: String) { # } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/concurrent.feature")); +# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/concurrent.feature")); # } ``` @@ -410,7 +410,7 @@ fn hungry_cat(world: &mut AnimalWorld, state: String) { # } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); # } ``` @@ -497,7 +497,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { #[tokio::main] async fn main() { - AnimalWorld::run("/tests/features/book/quickstart").await; + AnimalWorld::run("tests/features/book/quickstart").await; } ``` ![record](rec/quickstart_concurrent_async.gif) diff --git a/book/src/writing/asserting.md b/book/src/writing/asserting.md index 2c0fdc4f..d6da98ef 100644 --- a/book/src/writing/asserting.md +++ b/book/src/writing/asserting.md @@ -66,7 +66,7 @@ fn cat_is_fed(_: &mut AnimalWorld) { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("/tests/features/book/writing/asserting.feature") +# .run_and_exit("tests/features/book/writing/asserting.feature") # .await; # } ``` @@ -131,7 +131,7 @@ fn cat_is_fed(world: &mut AnimalWorld) -> Result<(), &'static str> { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("/tests/features/book/writing/asserting.feature") +# .run_and_exit("tests/features/book/writing/asserting.feature") # .await; # } ``` diff --git a/book/src/writing/background.md b/book/src/writing/background.md index 387b0fb9..ff13e724 100644 --- a/book/src/writing/background.md +++ b/book/src/writing/background.md @@ -89,7 +89,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/background.feature").await; +# AnimalWorld::run("tests/features/book/writing/background.feature").await; # } ``` ![record](../rec/writing_background.gif) diff --git a/book/src/writing/capturing.md b/book/src/writing/capturing.md index 4eb3d8b3..f052f971 100644 --- a/book/src/writing/capturing.md +++ b/book/src/writing/capturing.md @@ -65,7 +65,7 @@ fn feed_cat(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; # } ``` > __NOTE__: We surround the [regex] with `^..$` to ensure an __exact__ match. This is much more useful when adding more and more [step]s, so they won't accidentally interfere with each other. @@ -153,7 +153,7 @@ fn feed_cat(world: &mut AnimalWorld, times: u8) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; # } ``` ![record](../rec/writing_capturing_both.gif) @@ -236,7 +236,7 @@ fn feed_cat(world: &mut AnimalWorld, times: u8) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; # } ``` @@ -327,7 +327,7 @@ fn hungry_cat(world: &mut AnimalWorld, state: State) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; # } ``` diff --git a/book/src/writing/data_tables.md b/book/src/writing/data_tables.md index 64531de1..9d16aaf1 100644 --- a/book/src/writing/data_tables.md +++ b/book/src/writing/data_tables.md @@ -98,7 +98,7 @@ impl World for AnimalWorld { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/data_tables.feature").await; +# AnimalWorld::run("tests/features/book/writing/data_tables.feature").await; # } ``` diff --git a/book/src/writing/doc_strings.md b/book/src/writing/doc_strings.md index b50d8239..902e85f1 100644 --- a/book/src/writing/doc_strings.md +++ b/book/src/writing/doc_strings.md @@ -116,7 +116,7 @@ async fn hungry_cat(world: &mut AnimalWorld, step: &Step, state: String) { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("/tests/features/book/writing/doc_strings.feature") +# .run_and_exit("tests/features/book/writing/doc_strings.feature") # .await; # } ``` diff --git a/book/src/writing/languages.md b/book/src/writing/languages.md index 3fd0fa58..b7dfd37f 100644 --- a/book/src/writing/languages.md +++ b/book/src/writing/languages.md @@ -71,7 +71,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/languages.feature").await; +# AnimalWorld::run("tests/features/book/writing/languages.feature").await; # } ``` ![record](../rec/writing_languages.gif) diff --git a/book/src/writing/rule.md b/book/src/writing/rule.md index 5f083afa..ea671ed7 100644 --- a/book/src/writing/rule.md +++ b/book/src/writing/rule.md @@ -83,7 +83,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/rule.feature").await; +# AnimalWorld::run("tests/features/book/writing/rule.feature").await; # } ``` ![record](../rec/writing_rule.gif) diff --git a/book/src/writing/scenario_outline.md b/book/src/writing/scenario_outline.md index 1fb2f7a8..3bcbc8f7 100644 --- a/book/src/writing/scenario_outline.md +++ b/book/src/writing/scenario_outline.md @@ -86,7 +86,7 @@ async fn animal_is_fed(world: &mut AnimalWorld, which: String) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("/tests/features/book/writing/scenario_outline.feature").await; +# AnimalWorld::run("tests/features/book/writing/scenario_outline.feature").await; # } ``` diff --git a/book/src/writing/tags.md b/book/src/writing/tags.md index dc27da80..c7b863c0 100644 --- a/book/src/writing/tags.md +++ b/book/src/writing/tags.md @@ -193,7 +193,7 @@ Feature: Animal feature async fn main() { AnimalWorld::cucumber() .fail_on_skipped() - .run_and_exit("/tests/features/book/writing/tags_skip_failed.feature") + .run_and_exit("tests/features/book/writing/tags_skip_failed.feature") .await; } ``` diff --git a/src/parser/basic.rs b/src/parser/basic.rs index 17d789bb..e34e7420 100644 --- a/src/parser/basic.rs +++ b/src/parser/basic.rs @@ -60,12 +60,6 @@ impl> Parser for Basic { walker .filter_map(Result::ok) .sorted_by(|l, r| Ord::cmp(l.path(), r.path())) - .filter(|file| { - file.path() - .extension() - .map(|ext| ext == "feature") - .unwrap_or_default() - }) .map(|file| { let env = self .language diff --git a/tests/features/output/.feature b/tests/features/output/.feature new file mode 100644 index 00000000..aa2e151c --- /dev/null +++ b/tests/features/output/.feature @@ -0,0 +1,5 @@ +Feature: output + Scenario: output + Given foo is 0 + When foo is 1 + Then foo is 2 diff --git a/tests/features/output/.feature.out b/tests/features/output/.feature.out new file mode 100644 index 00000000..840a17d3 --- /dev/null +++ b/tests/features/output/.feature.out @@ -0,0 +1,12 @@ +Started +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Started) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Started)) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Step(Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Started))) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Step(Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Passed(CaptureLocations(Locations([Some(0), Some(8), Some(7), Some(8)])))))) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Step(Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Started))) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Step(Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Passed(CaptureLocations(Locations([Some(0), Some(8), Some(7), Some(8)])))))) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Step(Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }, Started))) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Step(Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }, Passed(CaptureLocations(Locations([Some(0), Some(8), Some(7), Some(8)])))))) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Scenario(Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }, Finished)) +Feature(Feature { keyword: "Feature", name: "output", description: None, background: None, scenarios: [Scenario { keyword: "Scenario", name: "output", steps: [Step { keyword: "Given", ty: Given, value: "foo is 0", docstring: None, table: None, position: LineCol { line: 3, col: 5 } }, Step { keyword: "When", ty: When, value: "foo is 1", docstring: None, table: None, position: LineCol { line: 4, col: 5 } }, Step { keyword: "Then", ty: Then, value: "foo is 2", docstring: None, table: None, position: LineCol { line: 5, col: 5 } }], examples: [], tags: [], position: LineCol { line: 2, col: 3 } }], rules: [], tags: [], position: LineCol { line: 1, col: 1 }, }, Finished) +Finished diff --git a/tests/output.rs b/tests/output.rs index 5cf58f8b..3b8fcdb7 100644 --- a/tests/output.rs +++ b/tests/output.rs @@ -165,6 +165,11 @@ mod spec { .map(|entry| entry.file_name().to_str().unwrap().to_owned()) .collect::>(); + assert_eq!( + files.len(), + fs::read_dir("tests/features/output").unwrap().count() / 2, + ); + for file in files { // TODO: Use "{file}" syntax once MSRV bumps above 1.58. let out = fs::read_to_string(format!( From 7feea75142d48f6e4e130f6b8958ee45d9f7180f Mon Sep 17 00:00:00 2001 From: ilslv Date: Mon, 31 Jan 2022 14:17:18 +0300 Subject: [PATCH 2/6] CAHNGELOG --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 547640a5..4913f1e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,8 +14,10 @@ All user visible changes to `cucumber` crate will be documented in this file. Th ### Fixed - Skipped files named `.feature`. ([#201]) +- Book examples failing on Windows ([#201], [#200]) -[#201]: /../../issues/198 +[#201]: /../../issues/201 +[#200]: /../../issues/200 From f9345749d9b06dbd802ea32d9df1893c081fc32e Mon Sep 17 00:00:00 2001 From: ilslv Date: Mon, 31 Jan 2022 14:24:11 +0300 Subject: [PATCH 3/6] Correction --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 839ceb7d..27b52ef5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -160,8 +160,8 @@ jobs: || startsWith(github.ref, 'refs/tags/v') || !contains(github.event.head_commit.message, '[skip ci]') }} strategy: + fail-fast: false matrix: - fail-fast: false os: - ubuntu - macOS From 93c04b93e57b85763630497b0cfc49d78d913d3a Mon Sep 17 00:00:00 2001 From: ilslv Date: Mon, 31 Jan 2022 14:31:19 +0300 Subject: [PATCH 4/6] CHANGELOG --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4913f1e7..47bd7ac6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,14 +13,15 @@ All user visible changes to `cucumber` crate will be documented in this file. Th ### Fixed -- Skipped files named `.feature`. ([#201]) -- Book examples failing on Windows ([#201], [#200]) +- `parser::Basic` skipping files named `.feature`. ([#201]) +- Book examples failing on Windows. ([#201], [#200]) [#201]: /../../issues/201 [#200]: /../../issues/200 + ## [0.11.2] · 2022-01-19 [0.11.2]: /../../tree/v0.11.2 From e9e946e91eedb60ca28e71888c05ad99909cee95 Mon Sep 17 00:00:00 2001 From: ilslv Date: Mon, 31 Jan 2022 15:12:25 +0300 Subject: [PATCH 5/6] Revert changes related to the book --- .github/workflows/ci.yml | 9 +-------- CHANGELOG.md | 2 -- book/src/architecture/parser.md | 2 +- book/src/architecture/runner.md | 2 +- book/src/architecture/writer.md | 4 ++-- book/src/cli.md | 2 +- book/src/introduction.md | 2 +- book/src/output/terminal.md | 14 +++++++------- book/src/quickstart.md | 14 +++++++------- book/src/writing/asserting.md | 4 ++-- book/src/writing/background.md | 2 +- book/src/writing/capturing.md | 8 ++++---- book/src/writing/data_tables.md | 2 +- book/src/writing/doc_strings.md | 2 +- book/src/writing/languages.md | 2 +- book/src/writing/rule.md | 2 +- book/src/writing/scenario_outline.md | 2 +- book/src/writing/tags.md | 2 +- 18 files changed, 34 insertions(+), 43 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 27b52ef5..51242896 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,14 +159,7 @@ jobs: if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') || !contains(github.event.head_commit.message, '[skip ci]') }} - strategy: - fail-fast: false - matrix: - os: - - ubuntu - - macOS - - windows - runs-on: ${{ matrix.os }}-latest + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 47bd7ac6..c669aa2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,10 +14,8 @@ All user visible changes to `cucumber` crate will be documented in this file. Th ### Fixed - `parser::Basic` skipping files named `.feature`. ([#201]) -- Book examples failing on Windows. ([#201], [#200]) [#201]: /../../issues/201 -[#200]: /../../issues/200 diff --git a/book/src/architecture/parser.md b/book/src/architecture/parser.md index fe79eb2c..f166669d 100644 --- a/book/src/architecture/parser.md +++ b/book/src/architecture/parser.md @@ -129,7 +129,7 @@ impl cucumber::Parser for CustomParser { async fn main() { AnimalWorld::cucumber::<&str>() // aiding type inference .with_parser(CustomParser) - .run_and_exit("tests/features/book") // path doesn't actually matter + .run_and_exit("/tests/features/book") // path doesn't actually matter .await; // here due to our implementation } ``` diff --git a/book/src/architecture/runner.md b/book/src/architecture/runner.md index 362aa9b1..7a32ebb9 100644 --- a/book/src/architecture/runner.md +++ b/book/src/architecture/runner.md @@ -259,7 +259,7 @@ async fn main() { AnimalWorld::cucumber::<&str>() // aiding type inference for `CustomParser` .with_parser(CustomParser) .with_runner(CustomRunner) - .run_and_exit("tests/features/book") + .run_and_exit("/tests/features/book") .await; } ``` diff --git a/book/src/architecture/writer.md b/book/src/architecture/writer.md index 38c3cbe2..93d05c74 100644 --- a/book/src/architecture/writer.md +++ b/book/src/architecture/writer.md @@ -291,7 +291,7 @@ async fn main() { .with_parser(CustomParser) .with_runner(CustomRunner) .with_writer(CustomWriter.assert_normalized()) // OK because of `CustomRunner` - .run("tests/features/book") + .run("/tests/features/book") .await; } ``` @@ -469,7 +469,7 @@ async fn main() { AnimalWorld::cucumber::<&str>() // aiding type inference for `CustomParser` .with_parser(CustomParser) .with_writer(CustomWriter.normalized()) // wrapping into `writer::Normalize`, - .run("tests/features/book") // so it works OK with the default + .run("/tests/features/book") // so it works OK with the default .await; // concurrent `Runner` } ``` diff --git a/book/src/cli.md b/book/src/cli.md index 61707ee3..b4d4b010 100644 --- a/book/src/cli.md +++ b/book/src/cli.md @@ -139,7 +139,7 @@ async fn main() { AnimalWorld::cucumber() .before(move |_, _, _, _| sleep(pre_pause).boxed_local()) .with_cli(opts) - .run_and_exit("tests/features/book/cli.feature") + .run_and_exit("/tests/features/book/cli.feature") .await; } ``` diff --git a/book/src/introduction.md b/book/src/introduction.md index 2c3f4485..94305992 100644 --- a/book/src/introduction.md +++ b/book/src/introduction.md @@ -64,7 +64,7 @@ async fn is_full(w: &mut World) { # # #[tokio::main] # async fn main() { -# World::run("tests/features/readme").await; +# World::run("/tests/features/readme").await; # } ``` ![record](rec/readme.gif) diff --git a/book/src/output/terminal.md b/book/src/output/terminal.md index b619bab9..bfdc3913 100644 --- a/book/src/output/terminal.md +++ b/book/src/output/terminal.md @@ -69,7 +69,7 @@ async fn feed_cat(_: &mut AnimalWorld) {} # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("tests/features/book/output/terminal_verbose.feature") +# .run_and_exit("/tests/features/book/output/terminal_verbose.feature") # .await; # } ``` @@ -155,7 +155,7 @@ Feature: Animal feature #[tokio::main] async fn main() { AnimalWorld::cucumber() - .run_and_exit("tests/features/book/output/terminal_verbose.feature") + .run_and_exit("/tests/features/book/output/terminal_verbose.feature") .await; } ``` @@ -229,7 +229,7 @@ Coloring may be disabled by specifying `--color` CLI option: #[tokio::main] async fn main() { AnimalWorld::cucumber() - .run_and_exit("tests/features/book/output/terminal.feature") + .run_and_exit("/tests/features/book/output/terminal.feature") .await; } ``` @@ -308,7 +308,7 @@ async fn feed_cat(world: &mut AnimalWorld) { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("tests/features/book/output/terminal.feature") +# .run_and_exit("/tests/features/book/output/terminal.feature") # .await; # } ``` @@ -387,7 +387,7 @@ async fn main() { .summarized() .assert_normalized(), ) - .run_and_exit("tests/features/book/output/terminal.feature") + .run_and_exit("/tests/features/book/output/terminal.feature") .await; } ``` @@ -465,7 +465,7 @@ As a number of [scenario]s grows, it may become quite difficult to find failed/s async fn main() { AnimalWorld::cucumber() .repeat_failed() - .run_and_exit("tests/features/book/output/terminal_repeat_failed.feature") + .run_and_exit("/tests/features/book/output/terminal_repeat_failed.feature") .await; } ``` @@ -534,7 +534,7 @@ async fn main() { async fn main() { AnimalWorld::cucumber() .repeat_skipped() - .run_and_exit("tests/features/book/output/terminal_repeat_skipped.feature") + .run_and_exit("/tests/features/book/output/terminal_repeat_skipped.feature") .await; } ``` diff --git a/book/src/quickstart.md b/book/src/quickstart.md index c8085784..9fd6d38e 100644 --- a/book/src/quickstart.md +++ b/book/src/quickstart.md @@ -82,7 +82,7 @@ fn main() { // You may choose any executor you like (`tokio`, `async-std`, etc.). // You may even have an `async` main, it doesn't matter. The point is that // Cucumber is composable. :) - futures::executor::block_on(AnimalWorld::run("tests/features/book")); + futures::executor::block_on(AnimalWorld::run("/tests/features/book")); } ``` @@ -149,7 +149,7 @@ fn feed_cat(world: &mut AnimalWorld) { } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); # } ``` @@ -208,7 +208,7 @@ fn cat_is_fed(world: &mut AnimalWorld) { } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); # } ``` @@ -267,7 +267,7 @@ fn cat_is_fed(world: &mut AnimalWorld) { assert!(world.cat.hungry); } # fn main() { -# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); # } ``` @@ -345,7 +345,7 @@ fn hungry_cat(world: &mut AnimalWorld, state: String) { # } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/concurrent.feature")); +# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/concurrent.feature")); # } ``` @@ -410,7 +410,7 @@ fn hungry_cat(world: &mut AnimalWorld, state: String) { # } # # fn main() { -# futures::executor::block_on(AnimalWorld::run("tests/features/book/quickstart/simple.feature")); +# futures::executor::block_on(AnimalWorld::run("/tests/features/book/quickstart/simple.feature")); # } ``` @@ -497,7 +497,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { #[tokio::main] async fn main() { - AnimalWorld::run("tests/features/book/quickstart").await; + AnimalWorld::run("/tests/features/book/quickstart").await; } ``` ![record](rec/quickstart_concurrent_async.gif) diff --git a/book/src/writing/asserting.md b/book/src/writing/asserting.md index d6da98ef..2c0fdc4f 100644 --- a/book/src/writing/asserting.md +++ b/book/src/writing/asserting.md @@ -66,7 +66,7 @@ fn cat_is_fed(_: &mut AnimalWorld) { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("tests/features/book/writing/asserting.feature") +# .run_and_exit("/tests/features/book/writing/asserting.feature") # .await; # } ``` @@ -131,7 +131,7 @@ fn cat_is_fed(world: &mut AnimalWorld) -> Result<(), &'static str> { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("tests/features/book/writing/asserting.feature") +# .run_and_exit("/tests/features/book/writing/asserting.feature") # .await; # } ``` diff --git a/book/src/writing/background.md b/book/src/writing/background.md index ff13e724..387b0fb9 100644 --- a/book/src/writing/background.md +++ b/book/src/writing/background.md @@ -89,7 +89,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/background.feature").await; +# AnimalWorld::run("/tests/features/book/writing/background.feature").await; # } ``` ![record](../rec/writing_background.gif) diff --git a/book/src/writing/capturing.md b/book/src/writing/capturing.md index f052f971..4eb3d8b3 100644 --- a/book/src/writing/capturing.md +++ b/book/src/writing/capturing.md @@ -65,7 +65,7 @@ fn feed_cat(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; # } ``` > __NOTE__: We surround the [regex] with `^..$` to ensure an __exact__ match. This is much more useful when adding more and more [step]s, so they won't accidentally interfere with each other. @@ -153,7 +153,7 @@ fn feed_cat(world: &mut AnimalWorld, times: u8) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; # } ``` ![record](../rec/writing_capturing_both.gif) @@ -236,7 +236,7 @@ fn feed_cat(world: &mut AnimalWorld, times: u8) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; # } ``` @@ -327,7 +327,7 @@ fn hungry_cat(world: &mut AnimalWorld, state: State) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/capturing.feature").await; +# AnimalWorld::run("/tests/features/book/writing/capturing.feature").await; # } ``` diff --git a/book/src/writing/data_tables.md b/book/src/writing/data_tables.md index 9d16aaf1..64531de1 100644 --- a/book/src/writing/data_tables.md +++ b/book/src/writing/data_tables.md @@ -98,7 +98,7 @@ impl World for AnimalWorld { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/data_tables.feature").await; +# AnimalWorld::run("/tests/features/book/writing/data_tables.feature").await; # } ``` diff --git a/book/src/writing/doc_strings.md b/book/src/writing/doc_strings.md index 902e85f1..b50d8239 100644 --- a/book/src/writing/doc_strings.md +++ b/book/src/writing/doc_strings.md @@ -116,7 +116,7 @@ async fn hungry_cat(world: &mut AnimalWorld, step: &Step, state: String) { # #[tokio::main] # async fn main() { # AnimalWorld::cucumber() -# .run_and_exit("tests/features/book/writing/doc_strings.feature") +# .run_and_exit("/tests/features/book/writing/doc_strings.feature") # .await; # } ``` diff --git a/book/src/writing/languages.md b/book/src/writing/languages.md index b7dfd37f..3fd0fa58 100644 --- a/book/src/writing/languages.md +++ b/book/src/writing/languages.md @@ -71,7 +71,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/languages.feature").await; +# AnimalWorld::run("/tests/features/book/writing/languages.feature").await; # } ``` ![record](../rec/writing_languages.gif) diff --git a/book/src/writing/rule.md b/book/src/writing/rule.md index ea671ed7..5f083afa 100644 --- a/book/src/writing/rule.md +++ b/book/src/writing/rule.md @@ -83,7 +83,7 @@ async fn cat_is_fed(world: &mut AnimalWorld) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/rule.feature").await; +# AnimalWorld::run("/tests/features/book/writing/rule.feature").await; # } ``` ![record](../rec/writing_rule.gif) diff --git a/book/src/writing/scenario_outline.md b/book/src/writing/scenario_outline.md index 3bcbc8f7..1fb2f7a8 100644 --- a/book/src/writing/scenario_outline.md +++ b/book/src/writing/scenario_outline.md @@ -86,7 +86,7 @@ async fn animal_is_fed(world: &mut AnimalWorld, which: String) { # # #[tokio::main] # async fn main() { -# AnimalWorld::run("tests/features/book/writing/scenario_outline.feature").await; +# AnimalWorld::run("/tests/features/book/writing/scenario_outline.feature").await; # } ``` diff --git a/book/src/writing/tags.md b/book/src/writing/tags.md index c7b863c0..dc27da80 100644 --- a/book/src/writing/tags.md +++ b/book/src/writing/tags.md @@ -193,7 +193,7 @@ Feature: Animal feature async fn main() { AnimalWorld::cucumber() .fail_on_skipped() - .run_and_exit("tests/features/book/writing/tags_skip_failed.feature") + .run_and_exit("/tests/features/book/writing/tags_skip_failed.feature") .await; } ``` From 18cb58ac1bb100a398b3eb1bc56740a7a36e3c8f Mon Sep 17 00:00:00 2001 From: tyranron Date: Mon, 31 Jan 2022 15:11:14 +0200 Subject: [PATCH 6/6] Minor corrections --- tests/output.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/output.rs b/tests/output.rs index 3b8fcdb7..1c482f68 100644 --- a/tests/output.rs +++ b/tests/output.rs @@ -168,6 +168,7 @@ mod spec { assert_eq!( files.len(), fs::read_dir("tests/features/output").unwrap().count() / 2, + "Not all `.feature` files were collected", ); for file in files {