in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java [266:355]
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");
}
}