66import javax .xml .transform .stream .StreamResult ;
77import java .io .File ;
88import java .util .ArrayList ;
9+ import java .util .LinkedHashMap ;
910import java .util .List ;
11+ import java .util .Map ;
1012
1113/**
1214 * Tags intermediate initializationError retries with dd_tags[test.final_status]=skip.
@@ -30,23 +32,31 @@ public static void main(String[] args) throws Exception {
3032 }
3133 var doc = DocumentBuilderFactory .newInstance ().newDocumentBuilder ().parse (xmlFile );
3234 var testcases = doc .getElementsByTagName ("testcase" );
33- List <Element > initErrorCases = new ArrayList <>();
35+ Map < String , List <Element >> byClassname = new LinkedHashMap <>();
3436 for (int i = 0 ; i < testcases .getLength (); i ++) {
3537 var e = (Element ) testcases .item (i );
3638 if ("initializationError" .equals (e .getAttribute ("name" ))) {
37- initErrorCases .add (e );
39+ byClassname . computeIfAbsent ( e . getAttribute ( "classname" ), k -> new ArrayList <>()) .add (e );
3840 }
3941 }
40- if (initErrorCases .size () <= 1 ) return ;
41- for (int i = 0 ; i < initErrorCases .size () - 1 ; i ++) {
42- var testcase = initErrorCases .get (i );
43- var properties = doc .createElement ("properties" );
44- var property = doc .createElement ("property" );
45- property .setAttribute ("name" , "dd_tags[test.final_status]" );
46- property .setAttribute ("value" , "skip" );
47- properties .appendChild (property );
48- testcase .appendChild (properties );
42+ boolean modified = false ;
43+ for (var group : byClassname .values ()) {
44+ if (group .size () <= 1 ) continue ;
45+ for (int i = 0 ; i < group .size () - 1 ; i ++) {
46+ var testcase = group .get (i );
47+ var existingProperties = testcase .getElementsByTagName ("properties" );
48+ var properties = existingProperties .getLength () > 0
49+ ? (Element ) existingProperties .item (0 )
50+ : doc .createElement ("properties" );
51+ var property = doc .createElement ("property" );
52+ property .setAttribute ("name" , "dd_tags[test.final_status]" );
53+ property .setAttribute ("value" , "skip" );
54+ properties .appendChild (property );
55+ if (existingProperties .getLength () == 0 ) testcase .appendChild (properties );
56+ modified = true ;
57+ }
4958 }
59+ if (!modified ) return ;
5060 var transformer = TransformerFactory .newInstance ().newTransformer ();
5161 transformer .setOutputProperty (OutputKeys .ENCODING , "UTF-8" );
5262 transformer .transform (new DOMSource (doc ), new StreamResult (xmlFile ));
0 commit comments