Skip to content

Commit 86e35ae

Browse files
committed
java: Write test cases in canonical order
1 parent e6f603b commit 86e35ae

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

java/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@
6767
<version>[14.0.1,15.0.0)</version>
6868
</dependency>
6969

70+
<dependency>
71+
<groupId>io.cucumber</groupId>
72+
<artifactId>compatibility-kit</artifactId>
73+
<version>23.2.0</version>
74+
<scope>test</scope>
75+
</dependency>
76+
7077
<dependency>
7178
<groupId>com.fasterxml.jackson.core</groupId>
7279
<artifactId>jackson-databind</artifactId>

java/src/test/java/io/cucumber/testngxmlformatter/MessagesToTestngXmlWriterAcceptanceTest.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.cucumber.testngxmlformatter;
22

3+
import io.cucumber.compatibilitykit.MessageOrderer;
34
import io.cucumber.messages.NdjsonToMessageIterable;
45
import io.cucumber.messages.types.Envelope;
56
import org.junit.jupiter.api.Disabled;
@@ -15,9 +16,11 @@
1516
import java.nio.file.Files;
1617
import java.nio.file.Path;
1718
import java.nio.file.Paths;
19+
import java.util.ArrayList;
1820
import java.util.Comparator;
1921
import java.util.List;
20-
import java.util.Objects;
22+
import java.util.Random;
23+
import java.util.function.Consumer;
2124
import java.util.stream.Collectors;
2225
import java.util.stream.Stream;
2326

@@ -26,6 +29,8 @@
2629

2730
class MessagesToTestngXmlWriterAcceptanceTest {
2831
private static final NdjsonToMessageIterable.Deserializer deserializer = (json) -> OBJECT_MAPPER.readValue(json, Envelope.class);
32+
private static final Random random = new Random(202509282040L);
33+
private static final MessageOrderer messageOrderer = new MessageOrderer(random);
2934

3035
static List<TestCase> acceptance() throws IOException {
3136
try (Stream<Path> paths = Files.list(Paths.get("../testdata/src"))) {
@@ -40,31 +45,49 @@ static List<TestCase> acceptance() throws IOException {
4045
@ParameterizedTest
4146
@MethodSource("acceptance")
4247
void test(TestCase testCase) throws IOException {
43-
ByteArrayOutputStream bytes = writeTestngXmlReport(testCase, new ByteArrayOutputStream());
48+
ByteArrayOutputStream bytes = writeTestngXmlReport(testCase, messageOrderer.originalOrder());
4449
Source expected = Input.fromPath(testCase.expected).build();
4550
Source actual = Input.fromByteArray(bytes.toByteArray()).build();
4651
assertThat(actual).and(expected).ignoreWhitespace().areIdentical();
4752
}
4853

54+
@ParameterizedTest
55+
@MethodSource("acceptance")
56+
void testWithSimulatedParallelExecution(TestCase testCase) throws IOException {
57+
ByteArrayOutputStream actual = writeTestngXmlReport(testCase, messageOrderer.simulateParallelExecution());
58+
byte[] expected = Files.readAllBytes(testCase.expected);
59+
assertThat(actual).and(expected).ignoreWhitespace().areIdentical();
60+
}
61+
4962
@ParameterizedTest
5063
@MethodSource("acceptance")
5164
@Disabled
5265
void updateExpectedFiles(TestCase testCase) throws IOException {
5366
try (OutputStream out = Files.newOutputStream(testCase.expected)) {
54-
writeTestngXmlReport(testCase, out);
67+
writeTestngXmlReport(testCase, out, messageOrderer.originalOrder());
5568
}
5669
}
5770

58-
private static <T extends OutputStream> T writeTestngXmlReport(TestCase testCase, T out) throws IOException {
71+
private static ByteArrayOutputStream writeTestngXmlReport(TestCase testCase, Consumer<List<Envelope>> orderer) throws IOException {
72+
return writeTestngXmlReport(testCase, new ByteArrayOutputStream(), orderer);
73+
}
74+
75+
private static <T extends OutputStream> T writeTestngXmlReport(TestCase testCase, T out, Consumer<List<Envelope>> orderer) throws IOException {
76+
List<Envelope> messages = new ArrayList<>();
5977
try (InputStream in = Files.newInputStream(testCase.source)) {
6078
try (NdjsonToMessageIterable envelopes = new NdjsonToMessageIterable(in, deserializer)) {
61-
try (MessagesToTestngXmlWriter writer = new MessagesToTestngXmlWriter(out)) {
62-
for (Envelope envelope : envelopes) {
63-
writer.write(envelope);
64-
}
79+
for (Envelope envelope : envelopes) {
80+
messages.add(envelope);
6581
}
6682
}
6783
}
84+
orderer.accept(messages);
85+
86+
try (MessagesToTestngXmlWriter writer = new MessagesToTestngXmlWriter(out)) {
87+
for (Envelope envelope : messages) {
88+
writer.write(envelope);
89+
}
90+
}
6891
return out;
6992
}
7093

@@ -86,18 +109,6 @@ public String toString() {
86109
return name;
87110
}
88111

89-
@Override
90-
public boolean equals(Object o) {
91-
if (this == o) return true;
92-
if (o == null || getClass() != o.getClass()) return false;
93-
TestCase testCase = (TestCase) o;
94-
return source.equals(testCase.source);
95-
}
96-
97-
@Override
98-
public int hashCode() {
99-
return Objects.hash(source);
100-
}
101112
}
102113

103114
}

0 commit comments

Comments
 (0)