Skip to content

Commit 9b84899

Browse files
committed
Break some dependencies between backend and plugin
1 parent dad1c27 commit 9b84899

File tree

10 files changed

+62
-51
lines changed

10 files changed

+62
-51
lines changed

core/src/main/java/io/cucumber/core/runner/Scenario.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package io.cucumber.core.runner;
22

33
import io.cucumber.core.backend.Status;
4+
import io.cucumber.core.eventbus.EventBus;
45
import io.cucumber.plugin.event.EmbedEvent;
56
import io.cucumber.plugin.event.Result;
67
import io.cucumber.plugin.event.TestCase;
7-
import io.cucumber.core.eventbus.EventBus;
88
import io.cucumber.plugin.event.WriteEvent;
99

1010
import java.util.ArrayList;
@@ -36,12 +36,13 @@ public Collection<String> getSourceTagNames() {
3636
}
3737

3838
@Override
39-
public io.cucumber.core.backend.Status getStatus() {
39+
public Status getStatus() {
4040
if (stepResults.isEmpty()) {
41-
return io.cucumber.core.backend.Status.UNDEFINED;
41+
return Status.UNDEFINED;
4242
}
4343

44-
return max(stepResults, comparing(Result::getStatus)).getStatus();
44+
Result mostSevereResult = max(stepResults, comparing(Result::getStatus));
45+
return Status.valueOf(mostSevereResult.getStatus().name());
4546
}
4647

4748
@Override

core/src/main/java/io/cucumber/core/runner/TestCase.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package io.cucumber.core.runner;
22

3+
import io.cucumber.core.eventbus.EventBus;
4+
import io.cucumber.core.feature.CucumberPickle;
35
import io.cucumber.plugin.event.Result;
6+
import io.cucumber.plugin.event.Status;
47
import io.cucumber.plugin.event.TestCaseFinished;
58
import io.cucumber.plugin.event.TestCaseStarted;
69
import io.cucumber.plugin.event.TestStep;
7-
import io.cucumber.core.eventbus.EventBus;
8-
import io.cucumber.core.feature.CucumberPickle;
910

1011
import java.net.URI;
1112
import java.time.Duration;
@@ -21,10 +22,10 @@ final class TestCase implements io.cucumber.plugin.event.TestCase {
2122
private final List<HookTestStep> afterHooks;
2223

2324
TestCase(List<PickleStepTestStep> testSteps,
24-
List<HookTestStep> beforeHooks,
25-
List<HookTestStep> afterHooks,
25+
List<HookTestStep> beforeHooks,
26+
List<HookTestStep> afterHooks,
2627
CucumberPickle pickle,
27-
boolean dryRun) {
28+
boolean dryRun) {
2829
this.testSteps = testSteps;
2930
this.beforeHooks = beforeHooks;
3031
this.afterHooks = afterHooks;
@@ -34,8 +35,8 @@ final class TestCase implements io.cucumber.plugin.event.TestCase {
3435

3536
void run(EventBus bus) {
3637
boolean skipNextStep = this.dryRun;
37-
Instant startTimeInstant = bus.getInstant();
38-
bus.send(new TestCaseStarted(startTimeInstant, this));
38+
Instant start = bus.getInstant();
39+
bus.send(new TestCaseStarted(start, this));
3940
Scenario scenario = new Scenario(bus, this);
4041

4142
for (HookTestStep before : beforeHooks) {
@@ -50,8 +51,11 @@ void run(EventBus bus) {
5051
after.run(this, bus, scenario, dryRun);
5152
}
5253

53-
Instant stopTimeInstant = bus.getInstant();
54-
bus.send(new TestCaseFinished(stopTimeInstant, this, new Result(scenario.getStatus(), Duration.between(startTimeInstant, stopTimeInstant), scenario.getError())));
54+
Instant stop = bus.getInstant();
55+
Duration duration = Duration.between(start, stop);
56+
Status status = Status.valueOf(scenario.getStatus().name());
57+
Result result = new Result(status, duration, scenario.getError());
58+
bus.send(new TestCaseFinished(stop, this, result));
5559
}
5660

5761
@Override
@@ -81,6 +85,7 @@ public String getUri() {
8185
return pickle.getUri();
8286
}
8387

88+
@Override
8489
public Integer getLine() {
8590
return pickle.getLine();
8691
}

core/src/test/java/io/cucumber/core/plugin/UnusedStepsSummaryPrinterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import java.time.Clock;
44
import java.time.Duration;
55

6-
import io.cucumber.core.backend.StepDefinition;
76
import io.cucumber.core.runtime.TimeServiceEventBus;
87
import io.cucumber.plugin.event.Result;
98
import io.cucumber.plugin.event.Status;
109
import io.cucumber.plugin.event.StepDefinedEvent;
10+
import io.cucumber.plugin.event.StepDefinition;
1111
import io.cucumber.plugin.event.TestCase;
1212
import io.cucumber.plugin.event.TestRunFinished;
1313
import io.cucumber.plugin.event.TestStep;

core/src/test/java/io/cucumber/core/reflection/MethodFormatTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static org.hamcrest.core.IsEqual.equalTo;
1313
import static org.junit.jupiter.api.Assertions.assertTrue;
1414

15+
@SuppressWarnings("deprecation")
1516
class MethodFormatTest {
1617

1718
private Method methodWithArgsAndException;

core/src/test/java/io/cucumber/core/runner/HookTestStepTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package io.cucumber.core.runner;
22

3-
import io.cucumber.plugin.event.HookType;
4-
import io.cucumber.plugin.event.Status;
5-
import io.cucumber.plugin.event.TestStepFinished;
6-
import io.cucumber.plugin.event.TestStepStarted;
73
import io.cucumber.core.eventbus.EventBus;
84
import io.cucumber.core.feature.CucumberFeature;
95
import io.cucumber.core.feature.TestFeatureParser;
6+
import io.cucumber.plugin.event.HookType;
7+
import io.cucumber.plugin.event.TestStepFinished;
8+
import io.cucumber.plugin.event.TestStepStarted;
109
import org.junit.jupiter.api.BeforeEach;
1110
import org.junit.jupiter.api.Test;
1211
import org.mockito.InOrder;
@@ -15,6 +14,8 @@
1514
import java.time.Instant;
1615
import java.util.Collections;
1716

17+
import static io.cucumber.core.backend.Status.PASSED;
18+
import static io.cucumber.core.backend.Status.SKIPPED;
1819
import static org.hamcrest.MatcherAssert.assertThat;
1920
import static org.hamcrest.core.Is.is;
2021
import static org.hamcrest.core.IsEqual.equalTo;
@@ -74,14 +75,14 @@ void run_does_dry_run() throws Throwable {
7475
void result_is_passed_when_step_definition_does_not_throw_exception() {
7576
boolean skipNextStep = step.run(testCase, bus, scenario, false);
7677
assertFalse(skipNextStep);
77-
assertThat(scenario.getStatus(), is(equalTo(Status.PASSED)));
78+
assertThat(scenario.getStatus(), is(equalTo(PASSED)));
7879
}
7980

8081
@Test
8182
void result_is_skipped_when_skip_step_is_skip_all_skipable() {
8283
boolean skipNextStep = step.run(testCase, bus, scenario, true);
8384
assertTrue(skipNextStep);
84-
assertThat(scenario.getStatus(), is(equalTo(Status.SKIPPED)));
85+
assertThat(scenario.getStatus(), is(equalTo(SKIPPED)));
8586
}
8687

8788
}

core/src/test/java/io/cucumber/core/runner/PickleStepTestStepTest.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package io.cucumber.core.runner;
22

3+
import io.cucumber.core.eventbus.EventBus;
4+
import io.cucumber.core.feature.CucumberFeature;
5+
import io.cucumber.core.feature.CucumberPickle;
6+
import io.cucumber.core.feature.TestFeatureParser;
37
import io.cucumber.plugin.event.Result;
48
import io.cucumber.plugin.event.Status;
59
import io.cucumber.plugin.event.TestCaseEvent;
610
import io.cucumber.plugin.event.TestStepFinished;
711
import io.cucumber.plugin.event.TestStepStarted;
8-
import io.cucumber.core.eventbus.EventBus;
9-
import io.cucumber.core.feature.CucumberFeature;
10-
import io.cucumber.core.feature.CucumberPickle;
11-
import io.cucumber.core.feature.TestFeatureParser;
1212
import org.junit.jupiter.api.BeforeEach;
1313
import org.junit.jupiter.api.Test;
1414
import org.mockito.ArgumentCaptor;
@@ -21,11 +21,12 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323

24+
import static io.cucumber.core.backend.Status.FAILED;
25+
import static io.cucumber.core.backend.Status.PASSED;
26+
import static io.cucumber.core.backend.Status.PENDING;
27+
import static io.cucumber.core.backend.Status.SKIPPED;
2428
import static io.cucumber.plugin.event.HookType.AFTER_STEP;
2529
import static io.cucumber.plugin.event.HookType.BEFORE_STEP;
26-
import static io.cucumber.plugin.event.Status.FAILED;
27-
import static io.cucumber.plugin.event.Status.PASSED;
28-
import static io.cucumber.plugin.event.Status.SKIPPED;
2930
import static java.time.Duration.ZERO;
3031
import static java.time.Duration.ofMillis;
3132
import static java.time.Instant.ofEpochMilli;
@@ -60,16 +61,19 @@ class PickleStepTestStepTest {
6061
private final Scenario scenario = new Scenario(bus, testCase);
6162
private final PickleStepDefinitionMatch definitionMatch = mock(PickleStepDefinitionMatch.class);
6263
private CoreHookDefinition afterHookDefinition = mock(CoreHookDefinition.class);
64+
private final HookTestStep afterHook = new HookTestStep(AFTER_STEP, new HookDefinitionMatch(afterHookDefinition));
6365
private CoreHookDefinition beforeHookDefinition = mock(CoreHookDefinition.class);
6466
private final HookTestStep beforeHook = new HookTestStep(BEFORE_STEP, new HookDefinitionMatch(beforeHookDefinition));
65-
private final HookTestStep afterHook = new HookTestStep(AFTER_STEP, new HookDefinitionMatch(afterHookDefinition));
6667
private final PickleStepTestStep step = new PickleStepTestStep(
6768
"uri",
6869
pickle.getSteps().get(0),
6970
singletonList(beforeHook),
7071
singletonList(afterHook),
7172
definitionMatch
7273
);
74+
private static ArgumentMatcher<Scenario> scenarioDoesNotHave(final Throwable type) {
75+
return argument -> !type.equals(argument.getError());
76+
}
7377

7478
@BeforeEach
7579
void init() {
@@ -203,10 +207,6 @@ void after_step_hook_scenario_contains_before_step_hook_failure_when_before_step
203207
assertThat(scenario.getError(), is(expectedError));
204208
}
205209

206-
private static ArgumentMatcher<Scenario> scenarioDoesNotHave(final Throwable type) {
207-
return argument -> !type.equals(argument.getError());
208-
}
209-
210210
@Test
211211
void result_is_skipped_when_step_definition_throws_assumption_violated_exception() throws Throwable {
212212
doThrow(TestAbortedException.class).when(definitionMatch).runStep(any());
@@ -224,7 +224,7 @@ void result_is_failed_when_step_definition_throws_exception() throws Throwable {
224224
boolean skipNextStep = step.run(testCase, bus, scenario, false);
225225
assertTrue(skipNextStep);
226226

227-
assertThat(scenario.getStatus(), is(equalTo(Status.FAILED)));
227+
assertThat(scenario.getStatus(), is(equalTo(FAILED)));
228228
}
229229

230230
@Test
@@ -234,7 +234,7 @@ void result_is_pending_when_step_definition_throws_pending_exception() throws Th
234234
boolean skipNextStep = step.run(testCase, bus, scenario, false);
235235
assertTrue(skipNextStep);
236236

237-
assertThat(scenario.getStatus(), is(equalTo(Status.PENDING)));
237+
assertThat(scenario.getStatus(), is(equalTo(PENDING)));
238238
}
239239

240240
@Test

core/src/test/java/io/cucumber/core/runner/ScenarioResultTest.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
import java.util.Arrays;
1616
import java.util.Collections;
1717

18+
import static io.cucumber.core.backend.Status.FAILED;
19+
import static io.cucumber.core.backend.Status.PASSED;
20+
import static io.cucumber.core.backend.Status.SKIPPED;
21+
import static io.cucumber.core.backend.Status.UNDEFINED;
1822
import static java.time.Duration.ZERO;
1923
import static org.hamcrest.CoreMatchers.sameInstance;
2024
import static org.hamcrest.MatcherAssert.assertThat;
@@ -54,13 +58,13 @@ void setup() {
5458

5559
@Test
5660
void no_steps_is_undefined() {
57-
assertThat(s.getStatus(), is(equalTo(Status.UNDEFINED)));
61+
assertThat(s.getStatus(), is(equalTo(UNDEFINED)));
5862
}
5963

6064
@Test
6165
void one_passed_step_is_passed() {
6266
s.add(new Result(Status.PASSED, ZERO, null));
63-
assertThat(s.getStatus(), is(equalTo(Status.PASSED)));
67+
assertThat(s.getStatus(), is(equalTo(PASSED)));
6468
}
6569

6670
@Test
@@ -72,7 +76,7 @@ void passed_failed_pending_undefined_skipped_is_failed() {
7276
s.add(new Result(Status.SKIPPED, ZERO, null));
7377

7478
assertAll("Checking Scenario",
75-
() -> assertThat(s.getStatus(), is(equalTo(Status.FAILED))),
79+
() -> assertThat(s.getStatus(), is(equalTo(FAILED))),
7680
() -> assertTrue(s.isFailed())
7781
);
7882
}
@@ -83,7 +87,7 @@ void passed_and_skipped_is_skipped_although_we_cant_have_skipped_without_undefin
8387
s.add(new Result(Status.SKIPPED, ZERO, null));
8488

8589
assertAll("Checking Scenario",
86-
() -> assertThat(s.getStatus(), is(equalTo(Status.SKIPPED))),
90+
() -> assertThat(s.getStatus(), is(equalTo(SKIPPED))),
8791
() -> assertFalse(s.isFailed())
8892
);
8993
}
@@ -96,7 +100,7 @@ void passed_pending_undefined_skipped_is_pending() {
96100
s.add(new Result(Status.SKIPPED, ZERO, null));
97101

98102
assertAll("Checking Scenario",
99-
() -> assertThat(s.getStatus(), is(equalTo(Status.UNDEFINED))),
103+
() -> assertThat(s.getStatus(), is(equalTo(UNDEFINED))),
100104
() -> assertFalse(s.isFailed())
101105
);
102106
}
@@ -108,7 +112,7 @@ void passed_undefined_skipped_is_undefined() {
108112
s.add(new Result(Status.SKIPPED, ZERO, null));
109113

110114
assertAll("Checking Scenario",
111-
() -> assertThat(s.getStatus(), is(equalTo(Status.UNDEFINED))),
115+
() -> assertThat(s.getStatus(), is(equalTo(UNDEFINED))),
112116
() -> assertFalse(s.isFailed())
113117
);
114118
}

core/src/test/java/io/cucumber/core/runtime/InvokerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static org.hamcrest.core.IsEqual.equalTo;
1313
import static org.junit.jupiter.api.Assertions.assertThrows;
1414

15+
@SuppressWarnings("deprecation")
1516
class InvokerTest {
1617

1718
@Test

core/src/test/java/io/cucumber/core/runtime/RuntimeTest.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -568,14 +568,12 @@ public void buildWorld() {
568568
.build()
569569
.run();
570570

571-
572-
assertThat(stepDefinedEvents, contains(
573-
mockedStepDefinition,
574-
mockedScenarioScopedStepDefinition,
575-
// Twice, once for each scenario
576-
mockedStepDefinition,
577-
mockedScenarioScopedStepDefinition
578-
));
571+
assertThat(stepDefinedEvents.get(0).getPattern(), is(mockedStepDefinition.getPattern()));
572+
assertThat(stepDefinedEvents.get(1).getPattern(), is(mockedScenarioScopedStepDefinition.getPattern()));
573+
// Twice, once for each scenario
574+
assertThat(stepDefinedEvents.get(2).getPattern(), is(mockedStepDefinition.getPattern()));
575+
assertThat(stepDefinedEvents.get(3).getPattern(), is(mockedScenarioScopedStepDefinition.getPattern()));
576+
assertThat(stepDefinedEvents.size(), is(4));
579577

580578
for (StepDefinition stepDefinedEvent : stepDefinedEvents) {
581579
if (stepDefinedEvent instanceof MockedScenarioScopedStepDefinition) {
@@ -673,7 +671,7 @@ private TestCaseFinished testCaseFinishedWithStatus(Status resultStatus) {
673671
return new TestCaseFinished(ANY_INSTANT, mock(TestCase.class), new Result(resultStatus, ZERO, null));
674672
}
675673

676-
private static final class MockedStepDefinition implements io.cucumber.core.backend.StepDefinition {
674+
private static final class MockedStepDefinition implements io.cucumber.core.backend.StepDefinition, StepDefinition {
677675

678676
@Override
679677
public String getLocation() {
@@ -702,7 +700,7 @@ public String getPattern() {
702700

703701
}
704702

705-
private static final class MockedScenarioScopedStepDefinition implements io.cucumber.core.backend.StepDefinition, ScenarioScoped {
703+
private static final class MockedScenarioScopedStepDefinition implements StepDefinition, ScenarioScoped, io.cucumber.core.backend.StepDefinition {
706704

707705
boolean disposed;
708706

plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<modelVersion>4.0.0</modelVersion>
1111

1212
<artifactId>cucumber-plugin</artifactId>
13-
<name>Cucumber Plugin</name>
13+
<name>Cucumber-JVM Plugin</name>
1414
<description>Plugin interface for Cucumber-JVM</description>
1515

1616
<properties>

0 commit comments

Comments
 (0)