Skip to content

Commit edd03fe

Browse files
committed
[Core] Include hook type in cucumber message
Utilizes cucumber/messages#102
1 parent 5c990e6 commit edd03fe

File tree

5 files changed

+33
-6
lines changed

5 files changed

+33
-6
lines changed

cucumber-core/src/main/java/io/cucumber/core/backend/HookDefinition.java

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

3+
import io.cucumber.messages.types.HookType;
34
import org.apiguardian.api.API;
45

6+
import java.util.Optional;
7+
58
@API(status = API.Status.STABLE)
69
public interface HookDefinition extends Located {
710

@@ -11,4 +14,7 @@ public interface HookDefinition extends Located {
1114

1215
int getOrder();
1316

17+
default Optional<HookType> getHookType() {
18+
return Optional.empty();
19+
}
1420
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ private void emitHook(CoreHookDefinition coreHook) {
306306
coreHook.getDefinitionLocation()
307307
.map(this::createSourceReference)
308308
.orElseGet(this::emptySourceReference),
309-
coreHook.getTagExpression(), null);
309+
coreHook.getTagExpression(),
310+
coreHook.getHookType().orElse(null));
310311
bus.send(Envelope.of(messagesHook));
311312
}
312313

cucumber-core/src/main/java/io/cucumber/core/runner/CoreHookDefinition.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.cucumber.core.backend.ScenarioScoped;
55
import io.cucumber.core.backend.SourceReference;
66
import io.cucumber.core.backend.TestCaseState;
7+
import io.cucumber.messages.types.HookType;
78
import io.cucumber.tagexpressions.Expression;
89
import io.cucumber.tagexpressions.TagExpressionException;
910
import io.cucumber.tagexpressions.TagExpressionParser;
@@ -71,6 +72,10 @@ String getTagExpression() {
7172
return delegate.getTagExpression();
7273
}
7374

75+
Optional<HookType> getHookType() {
76+
return delegate.getHookType();
77+
}
78+
7479
static class ScenarioScopedCoreHookDefinition extends CoreHookDefinition implements ScenarioScoped {
7580

7681
private ScenarioScopedCoreHookDefinition(UUID id, HookDefinition delegate) {

cucumber-java/src/main/java/io/cucumber/java/GlueAdaptor.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
import java.lang.annotation.Annotation;
77
import java.lang.reflect.Method;
88

9+
import static io.cucumber.messages.types.HookType.AFTER_TEST_CASE;
10+
import static io.cucumber.messages.types.HookType.AFTER_TEST_STEP;
11+
import static io.cucumber.messages.types.HookType.BEFORE_TEST_CASE;
12+
import static io.cucumber.messages.types.HookType.BEFORE_TEST_STEP;
13+
914
final class GlueAdaptor {
1015

1116
private final Lookup lookup;
@@ -24,25 +29,27 @@ void addDefinition(Method method, Annotation annotation) {
2429
} else if (annotationType.equals(Before.class)) {
2530
Before before = (Before) annotation;
2631
String tagExpression = before.value();
27-
glue.addBeforeHook(new JavaHookDefinition(method, tagExpression, before.order(), lookup));
32+
glue.addBeforeHook(new JavaHookDefinition(BEFORE_TEST_CASE, method, tagExpression, before.order(), lookup));
2833
} else if (annotationType.equals(BeforeAll.class)) {
2934
BeforeAll beforeAll = (BeforeAll) annotation;
3035
glue.addBeforeAllHook(new JavaStaticHookDefinition(method, beforeAll.order(), lookup));
3136
} else if (annotationType.equals(After.class)) {
3237
After after = (After) annotation;
3338
String tagExpression = after.value();
34-
glue.addAfterHook(new JavaHookDefinition(method, tagExpression, after.order(), lookup));
39+
glue.addAfterHook(new JavaHookDefinition(AFTER_TEST_CASE, method, tagExpression, after.order(), lookup));
3540
} else if (annotationType.equals(AfterAll.class)) {
3641
AfterAll afterAll = (AfterAll) annotation;
3742
glue.addAfterAllHook(new JavaStaticHookDefinition(method, afterAll.order(), lookup));
3843
} else if (annotationType.equals(BeforeStep.class)) {
3944
BeforeStep beforeStep = (BeforeStep) annotation;
4045
String tagExpression = beforeStep.value();
41-
glue.addBeforeStepHook(new JavaHookDefinition(method, tagExpression, beforeStep.order(), lookup));
46+
glue.addBeforeStepHook(
47+
new JavaHookDefinition(BEFORE_TEST_STEP, method, tagExpression, beforeStep.order(), lookup));
4248
} else if (annotationType.equals(AfterStep.class)) {
4349
AfterStep afterStep = (AfterStep) annotation;
4450
String tagExpression = afterStep.value();
45-
glue.addAfterStepHook(new JavaHookDefinition(method, tagExpression, afterStep.order(), lookup));
51+
glue.addAfterStepHook(
52+
new JavaHookDefinition(AFTER_TEST_STEP, method, tagExpression, afterStep.order(), lookup));
4653
} else if (annotationType.equals(ParameterType.class)) {
4754
ParameterType parameterType = (ParameterType) annotation;
4855
String pattern = parameterType.value();

cucumber-java/src/main/java/io/cucumber/java/JavaHookDefinition.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import io.cucumber.core.backend.HookDefinition;
44
import io.cucumber.core.backend.Lookup;
55
import io.cucumber.core.backend.TestCaseState;
6+
import io.cucumber.messages.types.HookType;
67

78
import java.lang.reflect.Method;
89
import java.lang.reflect.Type;
10+
import java.util.Optional;
911

1012
import static io.cucumber.java.InvalidMethodSignatureException.builder;
1113
import static java.util.Objects.requireNonNull;
@@ -14,9 +16,11 @@ final class JavaHookDefinition extends AbstractGlueDefinition implements HookDef
1416

1517
private final String tagExpression;
1618
private final int order;
19+
private final HookType hookType;
1720

18-
JavaHookDefinition(Method method, String tagExpression, int order, Lookup lookup) {
21+
JavaHookDefinition(HookType hookType, Method method, String tagExpression, int order, Lookup lookup) {
1922
super(requireValidMethod(method), lookup);
23+
this.hookType = requireNonNull(hookType);
2024
this.tagExpression = requireNonNull(tagExpression, "tag-expression may not be null");
2125
this.order = order;
2226
}
@@ -74,4 +78,8 @@ public int getOrder() {
7478
return order;
7579
}
7680

81+
@Override
82+
public Optional<HookType> getHookType() {
83+
return Optional.of(hookType);
84+
}
7785
}

0 commit comments

Comments
 (0)