11package io .cucumber .testngxmlformatter ;
22
3+ import io .cucumber .compatibilitykit .MessageOrderer ;
34import io .cucumber .messages .NdjsonToMessageIterable ;
45import io .cucumber .messages .types .Envelope ;
56import org .junit .jupiter .api .Disabled ;
1516import java .nio .file .Files ;
1617import java .nio .file .Path ;
1718import java .nio .file .Paths ;
19+ import java .util .ArrayList ;
1820import java .util .Comparator ;
1921import java .util .List ;
20- import java .util .Objects ;
22+ import java .util .Random ;
23+ import java .util .function .Consumer ;
2124import java .util .stream .Collectors ;
2225import java .util .stream .Stream ;
2326
2629
2730class 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