Skip to content

Commit bb5acaa

Browse files
authored
Emit StepMatchArgumentsList for ambiguous steps (#3066)
1 parent 4075184 commit bb5acaa

File tree

5 files changed

+45
-11
lines changed

5 files changed

+45
-11
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
1010
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1111

1212
## [Unreleased]
13+
### Fixed
14+
- [Core] Emit StepMatchArgumentsList for ambiguous steps ([#3066](https://github.com/cucumber/cucumber-jvm/pull/3066) M.P. Korstanje)
15+
16+
### Changed
17+
- [Core] Update dependency io.cucumber:cucumber-json-formatter to v0.2.0
18+
- [Core] Update dependency io.cucumber:gherkin to v35.0.0
19+
- [Core] Update dependency io.cucumber:html-formatter to v21.15.0
20+
- [Core] Update dependency io.cucumber:junit-xml-formatter to v0.9.0
21+
- [Core] Update dependency io.cucumber:messages to v29.0.1
22+
- [Core] Update dependency io.cucumber:pretty-formatter to v2.2.0
23+
- [Core] Update dependency io.cucumber:query to v14.0.1
24+
- [Core] Update dependency io.cucumber:testng-xml-formatter to v0.6.0
1325

1426
## [7.28.2] - 2025-09-09
1527
### Fixed

cucumber-bom/pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
<properties>
1616
<ci-environment.version>10.0.1</ci-environment.version>
1717
<cucumber-expressions.version>18.0.1</cucumber-expressions.version>
18-
<cucumber-json-formatter.version>0.1.3</cucumber-json-formatter.version>
19-
<gherkin.version>34.0.0</gherkin.version>
20-
<html-formatter.version>21.13.0</html-formatter.version>
21-
<junit-xml-formatter.version>0.8.1</junit-xml-formatter.version>
18+
<cucumber-json-formatter.version>0.2.0</cucumber-json-formatter.version>
19+
<gherkin.version>35.0.0</gherkin.version>
20+
<html-formatter.version>21.15.1</html-formatter.version>
21+
<junit-xml-formatter.version>0.9.0</junit-xml-formatter.version>
2222
<messages.version>29.0.1</messages.version>
23-
<pretty-formatter.version>2.1.0</pretty-formatter.version>
24-
<query.version>13.6.0</query.version>
23+
<pretty-formatter.version>2.2.0</pretty-formatter.version>
24+
<query.version>14.0.1</query.version>
2525
<tag-expressions.version>6.1.2</tag-expressions.version>
26-
<testng-xml-formatter.version>0.5.0</testng-xml-formatter.version>
26+
<testng-xml-formatter.version>0.6.0</testng-xml-formatter.version>
2727
</properties>
2828

2929
<dependencyManagement>

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import io.cucumber.core.backend.TestCaseState;
44
import io.cucumber.core.gherkin.Step;
5+
import io.cucumber.plugin.event.Argument;
56

67
import java.net.URI;
78
import java.util.Collections;
9+
import java.util.List;
10+
import java.util.stream.Collectors;
811

912
final class AmbiguousPickleStepDefinitionsMatch extends PickleStepDefinitionMatch {
1013

@@ -25,4 +28,10 @@ public void dryRunStep(TestCaseState state) throws AmbiguousStepDefinitionsExcep
2528
throw exception;
2629
}
2730

31+
List<List<Argument>> getDefinitionArguments() {
32+
return exception.getMatches().stream()
33+
.map(Match::getArguments)
34+
.map(DefinitionArgument::createArguments)
35+
.collect(Collectors.toList());
36+
}
2837
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ private PickleStepDefinitionMatch findStepDefinitionMatch(URI uri, Step step)
454454
return null;
455455
}
456456
if (matches.size() > 1) {
457+
// TODO: Don't use exceptions for control flow
457458
throw new AmbiguousStepDefinitionsException(step, matches);
458459
}
459460

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.cucumber.messages.types.Envelope;
77
import io.cucumber.messages.types.StepMatchArgument;
88
import io.cucumber.messages.types.StepMatchArgumentsList;
9+
import io.cucumber.plugin.event.Argument;
910
import io.cucumber.plugin.event.Group;
1011
import io.cucumber.plugin.event.Location;
1112
import io.cucumber.plugin.event.Result;
@@ -199,14 +200,25 @@ private io.cucumber.messages.types.TestStep createTestStep(TestStep pluginTestSt
199200
}
200201

201202
public List<StepMatchArgumentsList> getStepMatchArguments(PickleStepTestStep pickleStep) {
202-
if (pickleStep.getDefinitionMatch() instanceof UndefinedPickleStepDefinitionMatch) {
203+
PickleStepDefinitionMatch definitionMatch = pickleStep.getDefinitionMatch();
204+
if (definitionMatch instanceof UndefinedPickleStepDefinitionMatch) {
203205
return emptyList();
204206
}
205207

206-
return singletonList(pickleStep.getDefinitionArgument()
207-
.stream()
208+
if (definitionMatch instanceof AmbiguousPickleStepDefinitionsMatch) {
209+
AmbiguousPickleStepDefinitionsMatch ambiguousPickleStepDefinitionsMatch = (AmbiguousPickleStepDefinitionsMatch) definitionMatch;
210+
return ambiguousPickleStepDefinitionsMatch.getDefinitionArguments().stream()
211+
.map(TestCase::createStepMatchArgumentList)
212+
.collect(toList());
213+
}
214+
215+
return singletonList(createStepMatchArgumentList(pickleStep.getDefinitionArgument()));
216+
}
217+
218+
private static StepMatchArgumentsList createStepMatchArgumentList(List<Argument> arguments) {
219+
return arguments.stream()
208220
.map(arg -> new StepMatchArgument(makeMessageGroup(arg.getGroup()), arg.getParameterTypeName()))
209-
.collect(Collectors.collectingAndThen(toList(), StepMatchArgumentsList::new)));
221+
.collect(Collectors.collectingAndThen(toList(), StepMatchArgumentsList::new));
210222
}
211223

212224
private void emitTestCaseStarted(EventBus bus, Instant start, UUID executionId) {

0 commit comments

Comments
 (0)