From 464d1c18beafdffa8045f540d38f2f7a86e5a725 Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Sat, 3 Apr 2021 23:09:25 +0200 Subject: [PATCH] [Core] Remove --strict and --no-strict options Cucumber executes scenarios in strict mode by default. Fixes: #1788 --- CHANGELOG.md | 2 + core/README.md | 2 - .../cucumber/core/cli/CommandlineOptions.java | 5 -- .../options/CommandlineOptionsParser.java | 9 ---- .../io/cucumber/core/options/Constants.java | 10 ---- .../CucumberOptionsAnnotationParser.java | 10 ---- .../options/CucumberPropertiesParser.java | 13 ------ .../io/cucumber/core/options/USAGE.txt | 2 - .../options/CommandlineOptionsParserTest.java | 2 +- .../core/options/CucumberOptions.java | 2 - .../CucumberOptionsAnnotationParserTest.java | 15 ------ .../io/cucumber/core/plugin/StatsTest.java | 2 +- .../cucumber/core/runtime/ExitStatusTest.java | 46 +++++++++---------- .../io/cucumber/core/runtime/RuntimeTest.java | 28 +++-------- .../io/cucumber/junit/CucumberOptions.java | 8 ---- .../junit/JUnitCucumberOptionsProvider.java | 5 -- ...UnitReporterWithStepNotificationsTest.java | 38 --------------- .../io/cucumber/testng/CucumberOptions.java | 8 ---- .../testng/TestNGCucumberOptionsProvider.java | 5 -- .../testng/TestNGCucumberRunnerTest.java | 6 +-- 20 files changed, 37 insertions(+), 181 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e8b1fdb70..a4642ca3b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Deprecated ### Removed + * [Core] Removed `--strict` and `--no-strict` options ([#1788](https://github.com/cucumber/cucumber-jvm/issues/1788) M.P. Korstanje) + - Cucumber executes scenarios in strict mode by default ### Fixed diff --git a/core/README.md b/core/README.md index 691a108805..56ff49cb9f 100644 --- a/core/README.md +++ b/core/README.md @@ -28,8 +28,6 @@ cucumber.execution.limit= # number of scenarios to execute (CLI only). cucumber.execution.order= # lexical, reverse, random or random:[seed] (CLI only). default: lexical -cucumber.execution.strict= # true or false. default: false. - cucumber.execution.wip= # true or false. default: false. # Fails if there any passing scenarios # CLI only. diff --git a/core/src/main/java/io/cucumber/core/cli/CommandlineOptions.java b/core/src/main/java/io/cucumber/core/cli/CommandlineOptions.java index 7efc854620..229697b122 100644 --- a/core/src/main/java/io/cucumber/core/cli/CommandlineOptions.java +++ b/core/src/main/java/io/cucumber/core/cli/CommandlineOptions.java @@ -47,11 +47,6 @@ public final class CommandlineOptions { public static final String DRY_RUN = "--dry-run"; public static final String DRY_RUN_SHORT = "-d"; - public static final String NO_STRICT = "--no-strict"; - - public static final String STRICT = "--strict"; - public static final String STRICT_SHORT = "-s"; - public static final String NO_MONOCHROME = "--no-monochrome"; public static final String MONOCHROME = "--monochrome"; diff --git a/core/src/main/java/io/cucumber/core/options/CommandlineOptionsParser.java b/core/src/main/java/io/cucumber/core/options/CommandlineOptionsParser.java index 7a103f6090..8cb7fb150a 100644 --- a/core/src/main/java/io/cucumber/core/options/CommandlineOptionsParser.java +++ b/core/src/main/java/io/cucumber/core/options/CommandlineOptionsParser.java @@ -42,7 +42,6 @@ import static io.cucumber.core.cli.CommandlineOptions.NAME_SHORT; import static io.cucumber.core.cli.CommandlineOptions.NO_DRY_RUN; import static io.cucumber.core.cli.CommandlineOptions.NO_MONOCHROME; -import static io.cucumber.core.cli.CommandlineOptions.NO_STRICT; import static io.cucumber.core.cli.CommandlineOptions.NO_SUMMARY; import static io.cucumber.core.cli.CommandlineOptions.OBJECT_FACTORY; import static io.cucumber.core.cli.CommandlineOptions.ORDER; @@ -50,8 +49,6 @@ import static io.cucumber.core.cli.CommandlineOptions.PLUGIN_SHORT; import static io.cucumber.core.cli.CommandlineOptions.PUBLISH; import static io.cucumber.core.cli.CommandlineOptions.SNIPPETS; -import static io.cucumber.core.cli.CommandlineOptions.STRICT; -import static io.cucumber.core.cli.CommandlineOptions.STRICT_SHORT; import static io.cucumber.core.cli.CommandlineOptions.TAGS; import static io.cucumber.core.cli.CommandlineOptions.TAGS_SHORT; import static io.cucumber.core.cli.CommandlineOptions.THREADS; @@ -141,14 +138,8 @@ private RuntimeOptionsBuilder parse(List args) { parsedOptions.setDryRun(true); } else if (arg.equals(NO_DRY_RUN)) { parsedOptions.setDryRun(false); - } else if (arg.equals(NO_STRICT)) { - out.println("--no-strict is no longer effective"); - exitCode = 1; - return parsedOptions; } else if (arg.equals(NO_SUMMARY)) { parsedOptions.setNoSummary(); - } else if (arg.equals(STRICT) || arg.equals(STRICT_SHORT)) { - log.warn(() -> "--strict is enabled by default. This option will be removed in a future release."); } else if (arg.equals(MONOCHROME) || arg.equals(MONOCHROME_SHORT)) { parsedOptions.setMonochrome(true); } else if (arg.equals(NO_MONOCHROME)) { diff --git a/core/src/main/java/io/cucumber/core/options/Constants.java b/core/src/main/java/io/cucumber/core/options/Constants.java index 7ac6e0bdf7..394c866a8e 100644 --- a/core/src/main/java/io/cucumber/core/options/Constants.java +++ b/core/src/main/java/io/cucumber/core/options/Constants.java @@ -45,16 +45,6 @@ public final class Constants { */ public static final String EXECUTION_ORDER_PROPERTY_NAME = "cucumber.execution.order"; - /** - * Property name used to disable strict execution: {@value} - *

- * When using strict execution Cucumber will treat undefined and pending - * steps as errors. - *

- * By default, strict execution is enabled. - */ - public static final String EXECUTION_STRICT_PROPERTY_NAME = "cucumber.execution.strict"; - /** * Property name used to enable wip execution: {@value} *

diff --git a/core/src/main/java/io/cucumber/core/options/CucumberOptionsAnnotationParser.java b/core/src/main/java/io/cucumber/core/options/CucumberOptionsAnnotationParser.java index ff516b62c0..684af34c2d 100644 --- a/core/src/main/java/io/cucumber/core/options/CucumberOptionsAnnotationParser.java +++ b/core/src/main/java/io/cucumber/core/options/CucumberOptionsAnnotationParser.java @@ -40,7 +40,6 @@ public RuntimeOptionsBuilder parse(Class clazz) { addTags(classWithOptions, options, args); addPlugins(options, args); addPublish(options, args); - addStrict(options, args); addName(options, args); addSnippets(options, args); addGlue(options, args); @@ -94,13 +93,6 @@ private void addPublish(CucumberOptions options, RuntimeOptionsBuilder args) { } } - private void addStrict(CucumberOptions options, RuntimeOptionsBuilder args) { - if (!options.strict()) { - throw new CucumberException( - "@CucumberOptions(strict=false) is no longer supported. Please use strict=true"); - } - } - private void addName(CucumberOptions options, RuntimeOptionsBuilder args) { for (String name : options.name()) { Pattern pattern = Pattern.compile(name); @@ -196,8 +188,6 @@ public interface CucumberOptions { boolean dryRun(); - boolean strict(); - String[] features(); String[] glue(); diff --git a/core/src/main/java/io/cucumber/core/options/CucumberPropertiesParser.java b/core/src/main/java/io/cucumber/core/options/CucumberPropertiesParser.java index c30f9fa8b4..9d40bcf32b 100644 --- a/core/src/main/java/io/cucumber/core/options/CucumberPropertiesParser.java +++ b/core/src/main/java/io/cucumber/core/options/CucumberPropertiesParser.java @@ -19,7 +19,6 @@ import static io.cucumber.core.options.Constants.EXECUTION_DRY_RUN_PROPERTY_NAME; import static io.cucumber.core.options.Constants.EXECUTION_LIMIT_PROPERTY_NAME; import static io.cucumber.core.options.Constants.EXECUTION_ORDER_PROPERTY_NAME; -import static io.cucumber.core.options.Constants.EXECUTION_STRICT_PROPERTY_NAME; import static io.cucumber.core.options.Constants.FEATURES_PROPERTY_NAME; import static io.cucumber.core.options.Constants.FILTER_NAME_PROPERTY_NAME; import static io.cucumber.core.options.Constants.FILTER_TAGS_PROPERTY_NAME; @@ -60,11 +59,6 @@ public RuntimeOptionsBuilder parse(Map properties) { PickleOrderParser::parse, builder::setPickleOrder); - parse(properties, - EXECUTION_STRICT_PROPERTY_NAME, - BooleanString::parseBoolean, - CucumberPropertiesParser::errorOnNonStrict); - parseAll(properties, FEATURES_PROPERTY_NAME, splitAndThenFlatMap(CucumberPropertiesParser::parseFeatureFile), @@ -134,13 +128,6 @@ private void parse( parseAll(properties, propertyName, parser.andThen(Collections::singletonList), setter); } - private static void errorOnNonStrict(Boolean strict) { - if (!strict) { - throw new CucumberException(EXECUTION_STRICT_PROPERTY_NAME - + "=false is no longer effective. Please use =true (the default) or remove this property"); - } - } - private void parseAll( Map properties, String propertyName, Function> parser, Consumer setter diff --git a/core/src/main/resources/io/cucumber/core/options/USAGE.txt b/core/src/main/resources/io/cucumber/core/options/USAGE.txt index 52f41eb47f..af481f33e9 100644 --- a/core/src/main/resources/io/cucumber/core/options/USAGE.txt +++ b/core/src/main/resources/io/cucumber/core/options/USAGE.txt @@ -117,8 +117,6 @@ cucumber.execution.limit= # number of scenarios to execute (CLI only). cucumber.execution.order= # lexical, reverse, random or random:[seed] (CLI only). default: lexical -cucumber.execution.strict= # true or false. default: false. - cucumber.execution.wip= # true or false. default: false. # Fails if there any passing scenarios # CLI only. diff --git a/core/src/test/java/io/cucumber/core/options/CommandlineOptionsParserTest.java b/core/src/test/java/io/cucumber/core/options/CommandlineOptionsParserTest.java index 85223f69b8..c6391f5f47 100644 --- a/core/src/test/java/io/cucumber/core/options/CommandlineOptionsParserTest.java +++ b/core/src/test/java/io/cucumber/core/options/CommandlineOptionsParserTest.java @@ -421,7 +421,7 @@ void set_monochrome_on_color_aware_formatters() { @Test void set_strict_on_strict_aware_formatters() { RuntimeOptions options = parser - .parse("--strict", "--plugin", AwareFormatter.class.getName()) + .parse("--plugin", AwareFormatter.class.getName()) .build(); Plugins plugins = new Plugins(new PluginFactory(), options); plugins.setEventBusOnEventListenerPlugins(new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID)); diff --git a/core/src/test/java/io/cucumber/core/options/CucumberOptions.java b/core/src/test/java/io/cucumber/core/options/CucumberOptions.java index c275690f11..267ac37c55 100644 --- a/core/src/test/java/io/cucumber/core/options/CucumberOptions.java +++ b/core/src/test/java/io/cucumber/core/options/CucumberOptions.java @@ -13,8 +13,6 @@ boolean dryRun() default false; - boolean strict() default true; - String[] features() default {}; String[] glue() default {}; diff --git a/core/src/test/java/io/cucumber/core/options/CucumberOptionsAnnotationParserTest.java b/core/src/test/java/io/cucumber/core/options/CucumberOptionsAnnotationParserTest.java index 290fdf3c09..60240b69ff 100644 --- a/core/src/test/java/io/cucumber/core/options/CucumberOptionsAnnotationParserTest.java +++ b/core/src/test/java/io/cucumber/core/options/CucumberOptionsAnnotationParserTest.java @@ -258,16 +258,6 @@ private static class Snippets { // empty } - @CucumberOptions(strict = true) - private static class Strict { - // empty - } - - @CucumberOptions - private static class NotStrict { - // empty - } - @CucumberOptions(name = { "name1", "name2" }) private static class MultipleNames { // empty @@ -387,11 +377,6 @@ public boolean dryRun() { return annotation.dryRun(); } - @Override - public boolean strict() { - return annotation.strict(); - } - @Override public String[] features() { return annotation.features(); diff --git a/core/src/test/java/io/cucumber/core/plugin/StatsTest.java b/core/src/test/java/io/cucumber/core/plugin/StatsTest.java index e183a7f079..fe180747ba 100755 --- a/core/src/test/java/io/cucumber/core/plugin/StatsTest.java +++ b/core/src/test/java/io/cucumber/core/plugin/StatsTest.java @@ -207,7 +207,7 @@ void should_print_failed_ambiguous_scenarios() { } @Test - void should_print_failed_ambiguous_pending_undefined_scenarios_if_strict() { + void should_print_failed_ambiguous_pending_undefined_scenarios() { Stats counter = createMonochromeSummaryCounter(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/core/src/test/java/io/cucumber/core/runtime/ExitStatusTest.java b/core/src/test/java/io/cucumber/core/runtime/ExitStatusTest.java index c7fcf459d3..61eb6f92d3 100644 --- a/core/src/test/java/io/cucumber/core/runtime/ExitStatusTest.java +++ b/core/src/test/java/io/cucumber/core/runtime/ExitStatusTest.java @@ -28,11 +28,11 @@ class ExitStatusTest { @Test void should_pass_if_no_features_are_found() { - createStrictRuntime(); + createRuntime(); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); } - private void createStrictRuntime() { + private void createRuntime() { createExitStatus(new RuntimeOptionsBuilder().build()); } @@ -44,13 +44,13 @@ private void createExitStatus(RuntimeOptions runtimeOptions) { @Test void wip_with_ambiguous_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.AMBIGUOUS)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); } - private void createStrictWipRuntime() { + private void createWipRuntime() { createExitStatus(new RuntimeOptionsBuilder().setWip(true).build()); } @@ -60,7 +60,7 @@ private TestCaseFinished testCaseFinishedWithStatus(Status resultStatus) { @Test void wip_with_failed_failed_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.FAILED)); bus.send(testCaseFinishedWithStatus(Status.FAILED)); @@ -69,7 +69,7 @@ void wip_with_failed_failed_scenarios() { @Test void wip_with_failed_passed_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); bus.send(testCaseFinishedWithStatus(Status.FAILED)); @@ -78,7 +78,7 @@ void wip_with_failed_passed_scenarios() { @Test void wip_with_failed_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.FAILED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); @@ -86,7 +86,7 @@ void wip_with_failed_scenarios() { @Test void wip_with_passed_failed_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); bus.send(testCaseFinishedWithStatus(Status.FAILED)); @@ -95,7 +95,7 @@ void wip_with_passed_failed_scenarios() { @Test void wip_with_passed_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x1))); @@ -103,7 +103,7 @@ void wip_with_passed_scenarios() { @Test void wip_with_pending_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.PENDING)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); @@ -111,26 +111,26 @@ void wip_with_pending_scenarios() { @Test void wip_with_skipped_scenarios() { - createNonStrictWipExitStatus(); + createNonWipExitStatus(); bus.send(testCaseFinishedWithStatus(Status.SKIPPED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); } - private void createNonStrictWipExitStatus() { + private void createNonWipExitStatus() { createExitStatus(new RuntimeOptionsBuilder().setWip(true).build()); } @Test void wip_with_undefined_scenarios() { - createStrictWipRuntime(); + createWipRuntime(); bus.send(testCaseFinishedWithStatus(Status.UNDEFINED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); } @Test void with_ambiguous_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.AMBIGUOUS)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x1))); @@ -138,7 +138,7 @@ void with_ambiguous_scenarios() { @Test void with_failed_failed_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.FAILED)); bus.send(testCaseFinishedWithStatus(Status.FAILED)); @@ -147,7 +147,7 @@ void with_failed_failed_scenarios() { @Test void with_failed_passed_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.FAILED)); bus.send(testCaseFinishedWithStatus(Status.PASSED)); @@ -156,7 +156,7 @@ void with_failed_passed_scenarios() { @Test void with_failed_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.FAILED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x1))); @@ -164,7 +164,7 @@ void with_failed_scenarios() { @Test void with_passed_failed_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); bus.send(testCaseFinishedWithStatus(Status.FAILED)); @@ -173,7 +173,7 @@ void with_passed_failed_scenarios() { @Test void with_passed_passed_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); bus.send(testCaseFinishedWithStatus(Status.PASSED)); @@ -182,7 +182,7 @@ void with_passed_passed_scenarios() { @Test void with_passed_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); @@ -190,7 +190,7 @@ void with_passed_scenarios() { @Test void with_pending_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.PENDING)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x1))); @@ -198,7 +198,7 @@ void with_pending_scenarios() { @Test void with_skipped_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.SKIPPED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x0))); @@ -206,7 +206,7 @@ void with_skipped_scenarios() { @Test void with_undefined_scenarios() { - createStrictRuntime(); + createRuntime(); bus.send(testCaseFinishedWithStatus(Status.UNDEFINED)); assertThat(exitStatus.exitStatus(), is(equalTo((byte) 0x1))); } diff --git a/core/src/test/java/io/cucumber/core/runtime/RuntimeTest.java b/core/src/test/java/io/cucumber/core/runtime/RuntimeTest.java index 9650d7710e..b0d28b86ba 100644 --- a/core/src/test/java/io/cucumber/core/runtime/RuntimeTest.java +++ b/core/src/test/java/io/cucumber/core/runtime/RuntimeTest.java @@ -4,17 +4,13 @@ import io.cucumber.core.backend.HookDefinition; import io.cucumber.core.backend.ParameterInfo; import io.cucumber.core.backend.ScenarioScoped; -import io.cucumber.core.backend.StubHookDefinition; -import io.cucumber.core.backend.StubPendingException; import io.cucumber.core.backend.StubStepDefinition; import io.cucumber.core.backend.TestCaseState; import io.cucumber.core.eventbus.EventBus; import io.cucumber.core.exception.CompositeCucumberException; import io.cucumber.core.feature.TestFeatureParser; import io.cucumber.core.gherkin.Feature; -import io.cucumber.core.options.RuntimeOptions; import io.cucumber.core.options.RuntimeOptionsBuilder; -import io.cucumber.core.plugin.JUnitFormatter; import io.cucumber.core.runner.StepDurationTimeService; import io.cucumber.core.runner.TestBackendSupplier; import io.cucumber.messages.Messages; @@ -36,21 +32,17 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.function.Executable; import org.mockito.ArgumentCaptor; -import org.opentest4j.TestAbortedException; -import java.io.ByteArrayOutputStream; import java.net.URI; import java.time.Clock; import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.concurrent.CountDownLatch; import static java.time.Clock.fixed; import static java.time.Duration.ZERO; -import static java.time.Duration.ofMillis; import static java.time.Instant.EPOCH; import static java.time.ZoneId.of; import static java.util.Arrays.asList; @@ -75,13 +67,13 @@ class RuntimeTest { @Test void with_passed_scenarios() { - Runtime runtime = createStrictRuntime(); + Runtime runtime = createRuntime(); bus.send(testCaseFinishedWithStatus(Status.PASSED)); assertThat(runtime.exitStatus(), is(equalTo((byte) 0x0))); } - private Runtime createStrictRuntime() { + private Runtime createRuntime() { return Runtime.builder() .withRuntimeOptions( new RuntimeOptionsBuilder() @@ -96,14 +88,14 @@ private TestCaseFinished testCaseFinishedWithStatus(Status resultStatus) { @Test void with_undefined_scenarios() { - Runtime runtime = createStrictRuntime(); + Runtime runtime = createRuntime(); bus.send(testCaseFinishedWithStatus(Status.UNDEFINED)); assertThat(runtime.exitStatus(), is(equalTo((byte) 0x1))); } @Test void with_pending_scenarios() { - Runtime runtime = createStrictRuntime(); + Runtime runtime = createRuntime(); bus.send(testCaseFinishedWithStatus(Status.PENDING)); assertThat(runtime.exitStatus(), is(equalTo((byte) 0x1))); @@ -111,21 +103,15 @@ void with_pending_scenarios() { @Test void with_skipped_scenarios() { - Runtime runtime = createNonStrictRuntime(); + Runtime runtime = createRuntime(); bus.send(testCaseFinishedWithStatus(Status.SKIPPED)); assertThat(runtime.exitStatus(), is(equalTo((byte) 0x0))); } - private Runtime createNonStrictRuntime() { - return Runtime.builder() - .withEventBus(bus) - .build(); - } - @Test void with_failed_scenarios() { - Runtime runtime = createStrictRuntime(); + Runtime runtime = createRuntime(); bus.send(testCaseFinishedWithStatus(Status.FAILED)); assertThat(runtime.exitStatus(), is(equalTo((byte) 0x1))); @@ -133,7 +119,7 @@ void with_failed_scenarios() { @Test void with_ambiguous_scenarios() { - Runtime runtime = createStrictRuntime(); + Runtime runtime = createRuntime(); bus.send(testCaseFinishedWithStatus(Status.AMBIGUOUS)); assertThat(runtime.exitStatus(), is(equalTo((byte) 0x1))); diff --git a/junit/src/main/java/io/cucumber/junit/CucumberOptions.java b/junit/src/main/java/io/cucumber/junit/CucumberOptions.java index 8155142b23..cdc8ba9acf 100644 --- a/junit/src/main/java/io/cucumber/junit/CucumberOptions.java +++ b/junit/src/main/java/io/cucumber/junit/CucumberOptions.java @@ -21,14 +21,6 @@ */ boolean dryRun() default false; - /** - * @return true if undefined and pending steps should be treated as - * errors. - * @deprecated will be removed and cucumber will default to strict - */ - @Deprecated - boolean strict() default true; - /** * Either a URI or path to a directory of features or a URI or path to a * single feature optionally followed by a colon and line numbers. diff --git a/junit/src/main/java/io/cucumber/junit/JUnitCucumberOptionsProvider.java b/junit/src/main/java/io/cucumber/junit/JUnitCucumberOptionsProvider.java index d79463be43..ce7206026c 100644 --- a/junit/src/main/java/io/cucumber/junit/JUnitCucumberOptionsProvider.java +++ b/junit/src/main/java/io/cucumber/junit/JUnitCucumberOptionsProvider.java @@ -45,11 +45,6 @@ public boolean dryRun() { return annotation.dryRun(); } - @Override - public boolean strict() { - return annotation.strict(); - } - @Override public String[] features() { return annotation.features(); diff --git a/junit/src/test/java/io/cucumber/junit/JUnitReporterWithStepNotificationsTest.java b/junit/src/test/java/io/cucumber/junit/JUnitReporterWithStepNotificationsTest.java index 5ad7f6357b..f2f3e76925 100644 --- a/junit/src/test/java/io/cucumber/junit/JUnitReporterWithStepNotificationsTest.java +++ b/junit/src/test/java/io/cucumber/junit/JUnitReporterWithStepNotificationsTest.java @@ -257,44 +257,6 @@ void test_step_undefined_fires_test_failure_and_test_finished_for_undefined_step "some snippet\n")); } - @Test - void test_step_undefined_fires_test_failure_and_test_finished_for_undefined_step_in_strict_mode() { - EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID); - JUnitReporter jUnitReporter = new JUnitReporter(bus, new JUnitOptionsBuilder() - .setStepNotifications(true) - .build()); - - jUnitReporter.startExecutionUnit(pickleRunner, runNotifier); - - Suggestion suggestion = new Suggestion("step name", singletonList("some snippet")); - bus.send(new SnippetsSuggestedEvent(now(), featureUri, scenarioLine, scenarioLine, suggestion)); - bus.send(new TestCaseStarted(now(), testCase)); - bus.send(new TestStepStarted(now(), testCase, mockTestStep(step))); - Throwable exception = new CucumberException("No step definitions found"); - Result result = new Result(Status.UNDEFINED, ZERO, exception); - bus.send(new TestStepFinished(now(), testCase, mockTestStep(step), result)); - - verify(runNotifier).fireTestFailure(failureArgumentCaptor.capture()); - verify(runNotifier).fireTestFinished(pickleRunner.describeChild(step)); - - Failure stepFailure = failureArgumentCaptor.getValue(); - assertThat(stepFailure.getDescription(), is(equalTo(pickleRunner.describeChild(step)))); - assertThat(stepFailure.getException(), is(equalTo(exception))); - - bus.send(new TestCaseFinished(now(), testCase, result)); - - verify(runNotifier, times(2)).fireTestFailure(failureArgumentCaptor.capture()); - verify(runNotifier).fireTestFinished(pickleRunner.describeChild(step)); - - Failure pickleFailure = failureArgumentCaptor.getValue(); - assertThat(pickleFailure.getDescription(), is(equalTo(pickleRunner.getDescription()))); - assertThat(pickleFailure.getException().getMessage(), is("" + - "The step 'step name' is undefined.\n" + - "You can implement this step using the snippet(s) below:\n" + - "\n" + - "some snippet\n")); - } - @Test void test_step_finished_fires_test_failure_and_test_finished_for_failed_step() { jUnitReporter.startExecutionUnit(pickleRunner, runNotifier); diff --git a/testng/src/main/java/io/cucumber/testng/CucumberOptions.java b/testng/src/main/java/io/cucumber/testng/CucumberOptions.java index bd50ccce9c..84d6abd366 100644 --- a/testng/src/main/java/io/cucumber/testng/CucumberOptions.java +++ b/testng/src/main/java/io/cucumber/testng/CucumberOptions.java @@ -21,14 +21,6 @@ */ boolean dryRun() default false; - /** - * @return true if undefined and pending steps should be treated as - * errors. - * @deprecated will be removed and cucumber will default to strict - */ - @Deprecated - boolean strict() default true; - /** * Either a URI or path to a directory of features or a URI or path to a * single feature optionally followed by a colon and line numbers. diff --git a/testng/src/main/java/io/cucumber/testng/TestNGCucumberOptionsProvider.java b/testng/src/main/java/io/cucumber/testng/TestNGCucumberOptionsProvider.java index 7a56a3da9f..ed8218f537 100644 --- a/testng/src/main/java/io/cucumber/testng/TestNGCucumberOptionsProvider.java +++ b/testng/src/main/java/io/cucumber/testng/TestNGCucumberOptionsProvider.java @@ -45,11 +45,6 @@ public boolean dryRun() { return annotation.dryRun(); } - @Override - public boolean strict() { - return annotation.strict(); - } - @Override public String[] features() { return annotation.features(); diff --git a/testng/src/test/java/io/cucumber/testng/TestNGCucumberRunnerTest.java b/testng/src/test/java/io/cucumber/testng/TestNGCucumberRunnerTest.java index 9e7ef1b23a..ec127aa431 100644 --- a/testng/src/test/java/io/cucumber/testng/TestNGCucumberRunnerTest.java +++ b/testng/src/test/java/io/cucumber/testng/TestNGCucumberRunnerTest.java @@ -31,8 +31,8 @@ public void runCucumberTest() { } @Test - public void runScenarioWithUndefinedStepsStrict() { - testNGCucumberRunner = new TestNGCucumberRunner(RunScenarioWithUndefinedStepsStrict.class); + public void runScenarioWithUndefinedSteps() { + testNGCucumberRunner = new TestNGCucumberRunner(RunScenarioWithUndefinedSteps.class); Object[][] scenarios = testNGCucumberRunner.provideScenarios(); // the feature file only contains one scenario @@ -75,7 +75,7 @@ public void provideScenariosIsIdempotent() { @CucumberOptions( features = "classpath:io/cucumber/undefined/undefined_steps.feature") - static class RunScenarioWithUndefinedStepsStrict extends AbstractTestNGCucumberTests { + static class RunScenarioWithUndefinedSteps extends AbstractTestNGCucumberTests { }