diff --git a/java/pom.xml b/java/pom.xml
index f940686..ef7684e 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -67,6 +67,13 @@
[14.0.1,15.0.0)
+
+ io.cucumber
+ compatibility-kit
+ 23.2.0
+ test
+
+
com.fasterxml.jackson.core
jackson-databind
diff --git a/java/src/test/java/io/cucumber/testngxmlformatter/MessagesToTestngXmlWriterAcceptanceTest.java b/java/src/test/java/io/cucumber/testngxmlformatter/MessagesToTestngXmlWriterAcceptanceTest.java
index 347f0bf..e98cd61 100644
--- a/java/src/test/java/io/cucumber/testngxmlformatter/MessagesToTestngXmlWriterAcceptanceTest.java
+++ b/java/src/test/java/io/cucumber/testngxmlformatter/MessagesToTestngXmlWriterAcceptanceTest.java
@@ -1,5 +1,6 @@
package io.cucumber.testngxmlformatter;
+import io.cucumber.compatibilitykit.MessageOrderer;
import io.cucumber.messages.NdjsonToMessageIterable;
import io.cucumber.messages.types.Envelope;
import org.junit.jupiter.api.Disabled;
@@ -15,9 +16,11 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
-import java.util.Objects;
+import java.util.Random;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -26,6 +29,8 @@
class MessagesToTestngXmlWriterAcceptanceTest {
private static final NdjsonToMessageIterable.Deserializer deserializer = (json) -> OBJECT_MAPPER.readValue(json, Envelope.class);
+ private static final Random random = new Random(202509282040L);
+ private static final MessageOrderer messageOrderer = new MessageOrderer(random);
static List acceptance() throws IOException {
try (Stream paths = Files.list(Paths.get("../testdata/src"))) {
@@ -40,31 +45,49 @@ static List acceptance() throws IOException {
@ParameterizedTest
@MethodSource("acceptance")
void test(TestCase testCase) throws IOException {
- ByteArrayOutputStream bytes = writeTestngXmlReport(testCase, new ByteArrayOutputStream());
+ ByteArrayOutputStream bytes = writeTestngXmlReport(testCase, messageOrderer.originalOrder());
Source expected = Input.fromPath(testCase.expected).build();
Source actual = Input.fromByteArray(bytes.toByteArray()).build();
assertThat(actual).and(expected).ignoreWhitespace().areIdentical();
}
+ @ParameterizedTest
+ @MethodSource("acceptance")
+ void testWithSimulatedParallelExecution(TestCase testCase) throws IOException {
+ ByteArrayOutputStream actual = writeTestngXmlReport(testCase, messageOrderer.simulateParallelExecution());
+ byte[] expected = Files.readAllBytes(testCase.expected);
+ assertThat(actual).and(expected).ignoreWhitespace().areIdentical();
+ }
+
@ParameterizedTest
@MethodSource("acceptance")
@Disabled
void updateExpectedFiles(TestCase testCase) throws IOException {
try (OutputStream out = Files.newOutputStream(testCase.expected)) {
- writeTestngXmlReport(testCase, out);
+ writeTestngXmlReport(testCase, out, messageOrderer.originalOrder());
}
}
- private static T writeTestngXmlReport(TestCase testCase, T out) throws IOException {
+ private static ByteArrayOutputStream writeTestngXmlReport(TestCase testCase, Consumer> orderer) throws IOException {
+ return writeTestngXmlReport(testCase, new ByteArrayOutputStream(), orderer);
+ }
+
+ private static T writeTestngXmlReport(TestCase testCase, T out, Consumer> orderer) throws IOException {
+ List messages = new ArrayList<>();
try (InputStream in = Files.newInputStream(testCase.source)) {
try (NdjsonToMessageIterable envelopes = new NdjsonToMessageIterable(in, deserializer)) {
- try (MessagesToTestngXmlWriter writer = new MessagesToTestngXmlWriter(out)) {
- for (Envelope envelope : envelopes) {
- writer.write(envelope);
- }
+ for (Envelope envelope : envelopes) {
+ messages.add(envelope);
}
}
}
+ orderer.accept(messages);
+
+ try (MessagesToTestngXmlWriter writer = new MessagesToTestngXmlWriter(out)) {
+ for (Envelope envelope : messages) {
+ writer.write(envelope);
+ }
+ }
return out;
}
@@ -86,18 +109,6 @@ public String toString() {
return name;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- TestCase testCase = (TestCase) o;
- return source.equals(testCase.source);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(source);
- }
}
}