Skip to content

Commit 7dba66d

Browse files
committed
java: Write test cases in canonical order
1 parent e6f603b commit 7dba66d

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
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: 32 additions & 19 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,17 +16,23 @@
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;
2022
import java.util.Objects;
23+
import java.util.Random;
24+
import java.util.function.Consumer;
2125
import java.util.stream.Collectors;
2226
import java.util.stream.Stream;
2327

2428
import static io.cucumber.testngxmlformatter.Jackson.OBJECT_MAPPER;
29+
import static java.nio.charset.StandardCharsets.UTF_8;
2530
import static org.xmlunit.assertj.XmlAssert.assertThat;
2631

2732
class MessagesToTestngXmlWriterAcceptanceTest {
2833
private static final NdjsonToMessageIterable.Deserializer deserializer = (json) -> OBJECT_MAPPER.readValue(json, Envelope.class);
34+
private static final Random random = new Random(202509282040L);
35+
private static final MessageOrderer messageOrderer = new MessageOrderer(random);
2936

3037
static List<TestCase> acceptance() throws IOException {
3138
try (Stream<Path> paths = Files.list(Paths.get("../testdata/src"))) {
@@ -40,31 +47,49 @@ static List<TestCase> acceptance() throws IOException {
4047
@ParameterizedTest
4148
@MethodSource("acceptance")
4249
void test(TestCase testCase) throws IOException {
43-
ByteArrayOutputStream bytes = writeTestngXmlReport(testCase, new ByteArrayOutputStream());
50+
ByteArrayOutputStream bytes = writeTestngXmlReport(testCase, messageOrderer.originalOrder());
4451
Source expected = Input.fromPath(testCase.expected).build();
4552
Source actual = Input.fromByteArray(bytes.toByteArray()).build();
4653
assertThat(actual).and(expected).ignoreWhitespace().areIdentical();
4754
}
4855

56+
@ParameterizedTest
57+
@MethodSource("acceptance")
58+
void testWithSimulatedParallelExecution(TestCase testCase) throws IOException {
59+
ByteArrayOutputStream actual = writeTestngXmlReport(testCase, messageOrderer.simulateParallelExecution());
60+
byte[] expected = Files.readAllBytes(testCase.expected);
61+
assertThat(actual).and(expected).ignoreWhitespace().areIdentical();
62+
}
63+
4964
@ParameterizedTest
5065
@MethodSource("acceptance")
5166
@Disabled
5267
void updateExpectedFiles(TestCase testCase) throws IOException {
5368
try (OutputStream out = Files.newOutputStream(testCase.expected)) {
54-
writeTestngXmlReport(testCase, out);
69+
writeTestngXmlReport(testCase, out, messageOrderer.originalOrder());
5570
}
5671
}
5772

58-
private static <T extends OutputStream> T writeTestngXmlReport(TestCase testCase, T out) throws IOException {
73+
private static ByteArrayOutputStream writeTestngXmlReport(TestCase testCase, Consumer<List<Envelope>> orderer) throws IOException {
74+
return writeTestngXmlReport(testCase, new ByteArrayOutputStream(), orderer);
75+
}
76+
77+
private static <T extends OutputStream> T writeTestngXmlReport(TestCase testCase, T out, Consumer<List<Envelope>> orderer) throws IOException {
78+
List<Envelope> messages = new ArrayList<>();
5979
try (InputStream in = Files.newInputStream(testCase.source)) {
6080
try (NdjsonToMessageIterable envelopes = new NdjsonToMessageIterable(in, deserializer)) {
61-
try (MessagesToTestngXmlWriter writer = new MessagesToTestngXmlWriter(out)) {
62-
for (Envelope envelope : envelopes) {
63-
writer.write(envelope);
64-
}
81+
for (Envelope envelope : envelopes) {
82+
messages.add(envelope);
6583
}
6684
}
6785
}
86+
orderer.accept(messages);
87+
88+
try (MessagesToTestngXmlWriter writer = new MessagesToTestngXmlWriter(out)) {
89+
for (Envelope envelope : messages) {
90+
writer.write(envelope);
91+
}
92+
}
6893
return out;
6994
}
7095

@@ -86,18 +111,6 @@ public String toString() {
86111
return name;
87112
}
88113

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-
}
101114
}
102115

103116
}

0 commit comments

Comments
 (0)