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