private void serializeTestClassWithRerun()

in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java [235:324]


    private void serializeTestClassWithRerun(
            OutputStream outputStream, OutputStreamWriter fw, XMLWriter ppw, List<WrappedReportEntry> methodEntries)
            throws IOException {
        WrappedReportEntry firstMethodEntry = methodEntries.get(0);
        switch (getTestResultType(methodEntries)) {
            case success:
                for (WrappedReportEntry methodEntry : methodEntries) {
                    if (methodEntry.getReportEntryType() == SUCCESS) {
                        startTestElement(ppw, methodEntry);
                        ppw.endElement();
                    }
                }
                break;
            case error:
            case failure:
                // When rerunFailingTestsCount is set to larger than 0
                startTestElement(ppw, firstMethodEntry);
                boolean firstRun = true;
                for (WrappedReportEntry singleRunEntry : methodEntries) {
                    if (firstRun) {
                        firstRun = false;
                        getTestProblems(
                                fw,
                                ppw,
                                singleRunEntry,
                                trimStackTrace,
                                outputStream,
                                singleRunEntry.getReportEntryType().getXmlTag(),
                                false);
                        createOutErrElements(fw, ppw, singleRunEntry, outputStream);
                    } else if (singleRunEntry.getReportEntryType() == SKIPPED) {
                        // The version 3.1.0 should produce a new XSD schema with version 3.1.0, see SUREFIRE-1986,
                        // and the XSD schema should add a new element "rerunSkipped"
                        // then ReportEntryType should update the enum to SKIPPED( "skipped", "", "rerunSkipped" ).
                        // The teams should be notified - Jenkins reports.
                        addCommentElementTestCase("a skipped test execution in re-run phase", fw, ppw, outputStream);
                    } else {
                        getTestProblems(
                                fw,
                                ppw,
                                singleRunEntry,
                                trimStackTrace,
                                outputStream,
                                singleRunEntry.getReportEntryType().getRerunXmlTag(),
                                true);
                    }
                }
                ppw.endElement();
                break;
            case flake:
                WrappedReportEntry successful = null;
                // Get the run time of the first successful run
                for (WrappedReportEntry singleRunEntry : methodEntries) {
                    if (singleRunEntry.getReportEntryType() == SUCCESS) {
                        successful = singleRunEntry;
                        break;
                    }
                }
                WrappedReportEntry firstOrSuccessful = successful == null ? methodEntries.get(0) : successful;
                startTestElement(ppw, firstOrSuccessful);
                for (WrappedReportEntry singleRunEntry : methodEntries) {
                    if (singleRunEntry.getReportEntryType() != SUCCESS) {
                        getTestProblems(
                                fw,
                                ppw,
                                singleRunEntry,
                                trimStackTrace,
                                outputStream,
                                singleRunEntry.getReportEntryType().getFlakyXmlTag(),
                                true);
                    }
                }
                ppw.endElement();
                break;
            case skipped:
                startTestElement(ppw, firstMethodEntry);
                getTestProblems(
                        fw,
                        ppw,
                        firstMethodEntry,
                        trimStackTrace,
                        outputStream,
                        firstMethodEntry.getReportEntryType().getXmlTag(),
                        false);
                ppw.endElement();
                break;
            default:
                throw new IllegalStateException("Get unknown test result type");
        }
    }