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); - } } }