Skip to content

Commit 5e6da5d

Browse files
authored
Fix missing execution steps statuses (#24)
The xml report formatter now returns the same number of step results as the number of steps in a cucumber test, even if some steps have the same name.
1 parent f559f44 commit 5e6da5d

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Fixed
11+
- Missing execution steps statuses if same step is called multiple times in a test ([#24](https://github.com/cucumber/cucumber-junit-xml-formatter/pull/24) F. Ahadi)
12+
1013
## [0.2.0] - 2023-04-07
1114

1215
## [0.1.0] - 2022-12-27

java/src/main/java/io/cucumber/junitxmlformatter/XmlReportData.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
import java.time.Duration;
2222
import java.time.Instant;
23+
import java.util.AbstractMap;
2324
import java.util.Comparator;
2425
import java.util.Deque;
25-
import java.util.LinkedHashMap;
2626
import java.util.List;
2727
import java.util.Locale;
2828
import java.util.Map;
@@ -207,19 +207,19 @@ public String getFeatureName(String testCaseStartedId) {
207207
return scenarioAstNodeIdToFeatureName.get(astNodeId);
208208
}
209209

210-
LinkedHashMap<String, String> getStepsAndResult(String testCaseStartedId) {
210+
List<Map.Entry<String, String>> getStepsAndResult(String testCaseStartedId) {
211211
String testCaseId = testCaseStartedIdToTestCaseId.get(testCaseStartedId);
212212
TestCase testCase = testCaseIdToTestCase.get(testCaseId);
213213
Pickle pickle = pickleIdToPickle.get(testCase.getPickleId());
214214

215215
return testCase.getTestSteps().stream()
216216
.filter(testStep -> testStep.getPickleStepId().isPresent())
217-
.collect(Collectors.toMap(
218-
renderTestStepText(pickle),
219-
this::renderTestStepResult,
220-
(existing, replacement) -> replacement,
221-
LinkedHashMap::new
222-
));
217+
.map(testStep -> {
218+
String key = renderTestStepText(pickle).apply(testStep);
219+
String value = renderTestStepResult(testStep);
220+
return new AbstractMap.SimpleEntry<>(key, value);
221+
})
222+
.collect(Collectors.toList());
223223
}
224224

225225
private String renderTestStepResult(TestStep testStep) {

java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@
44
import io.cucumber.messages.types.TestStepResult;
55
import io.cucumber.messages.types.TestStepResultStatus;
66

7+
import java.util.List;
78
import javax.xml.stream.XMLOutputFactory;
89
import javax.xml.stream.XMLStreamException;
910
import java.io.Writer;
1011
import java.text.NumberFormat;
1112
import java.util.EnumSet;
12-
import java.util.LinkedHashMap;
1313
import java.util.Locale;
1414
import java.util.Map;
1515
import java.util.Optional;
1616

17-
import static io.cucumber.messages.types.TestStepResultStatus.FAILED;
1817
import static io.cucumber.messages.types.TestStepResultStatus.PASSED;
1918
import static io.cucumber.messages.types.TestStepResultStatus.SKIPPED;
2019

@@ -126,7 +125,7 @@ private void writeNonPassedElement(EscapingXmlStreamWriter writer, String id) th
126125
}
127126

128127
private void writeStepAndResultList(EscapingXmlStreamWriter writer, String id) throws XMLStreamException {
129-
LinkedHashMap<String, String> results = data.getStepsAndResult(id);
128+
List<Map.Entry<String, String>> results = data.getStepsAndResult(id);
130129
if (results.isEmpty()) {
131130
return;
132131
}
@@ -136,10 +135,10 @@ private void writeStepAndResultList(EscapingXmlStreamWriter writer, String id) t
136135
writer.newLine();
137136
}
138137

139-
private static String createStepResultList(LinkedHashMap<String, String> results) {
138+
private static String createStepResultList(List<Map.Entry<String, String>> results) {
140139
StringBuilder sb = new StringBuilder();
141140
sb.append("\n");
142-
results.entrySet().forEach(r -> {
141+
results.forEach(r -> {
143142
String stepText = r.getKey();
144143
String status = r.getValue();
145144
sb.append(stepText);

0 commit comments

Comments
 (0)