Skip to content

Commit e6a9b58

Browse files
[Core] Emit step hook messages (#2093)
The beforestep and afterstep hook details were not displayed in ndjson report. Co-authored-by: grasshopper7 <[email protected]>
1 parent 2421c92 commit e6a9b58

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ void prepareGlue(StepTypeRegistry stepTypeRegistry) throws DuplicateStepDefiniti
238238
// TODO: Redefine hooks for each scenario, similar to how we're doing
239239
// for CoreStepDefinition
240240
beforeHooks.forEach(this::emitHook);
241+
beforeStepHooks.forEach(this::emitHook);
241242

242243
stepDefinitions.forEach(stepDefinition -> {
243244
StepExpression expression = stepExpressionFactory.createExpression(stepDefinition);
@@ -251,6 +252,7 @@ void prepareGlue(StepTypeRegistry stepTypeRegistry) throws DuplicateStepDefiniti
251252
emitStepDefined(coreStepDefinition);
252253
});
253254

255+
afterStepHooks.forEach(this::emitHook);
254256
afterHooks.forEach(this::emitHook);
255257
}
256258

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.cucumber.core.backend.SourceReference;
1212
import io.cucumber.core.backend.StepDefinition;
1313
import io.cucumber.core.backend.TestCaseState;
14+
import io.cucumber.core.eventbus.EventBus;
1415
import io.cucumber.core.feature.TestFeatureParser;
1516
import io.cucumber.core.gherkin.Feature;
1617
import io.cucumber.core.gherkin.Step;
@@ -24,10 +25,13 @@
2425
import io.cucumber.datatable.TableEntryByTypeTransformer;
2526
import io.cucumber.docstring.DocStringType;
2627
import org.junit.jupiter.api.Test;
28+
import io.cucumber.messages.Messages;
29+
import io.cucumber.plugin.event.EventHandler;
2730

2831
import java.lang.reflect.Type;
2932
import java.net.URI;
3033
import java.time.Clock;
34+
import java.util.ArrayList;
3135
import java.util.List;
3236
import java.util.Optional;
3337
import java.util.UUID;
@@ -458,6 +462,25 @@ void scenario_scoped_hooks_have_higher_order() {
458462

459463
assertThat(hooks, contains(hookDefinition2, hookDefinition1, hookDefinition3));
460464
}
465+
466+
@Test
467+
public void emits_hook_messages_to_bus() {
468+
469+
List<Messages.Envelope> events = new ArrayList<>();
470+
EventHandler<Messages.Envelope> messageEventHandler = e -> events.add(e);
471+
472+
EventBus bus = new TimeServiceEventBus(Clock.systemUTC(), UUID::randomUUID);
473+
bus.registerHandlerFor(Messages.Envelope.class, messageEventHandler);
474+
CachingGlue glue = new CachingGlue(bus);
475+
476+
glue.addBeforeHook(new MockedScenarioScopedHookDefinition());
477+
glue.addAfterHook(new MockedScenarioScopedHookDefinition());
478+
glue.addBeforeStepHook(new MockedScenarioScopedHookDefinition());
479+
glue.addAfterStepHook(new MockedScenarioScopedHookDefinition());
480+
481+
glue.prepareGlue(stepTypeRegistry);
482+
assertThat(events.size(), is(4));
483+
}
461484

462485
private static class MockedScenarioScopedStepDefinition extends StubStepDefinition implements ScenarioScoped {
463486

@@ -773,5 +796,4 @@ public boolean isDisposed() {
773796
}
774797

775798
}
776-
777799
}

0 commit comments

Comments
 (0)