Skip to content

Commit

Permalink
Show failed containers in JUnit XML report #1689
Browse files Browse the repository at this point in the history
Change the LegacyXmlResultFormatter so it shows failed containers.

Fixes #1689
  • Loading branch information
fedejeanne authored and trancexpress committed Dec 26, 2023
1 parent d21d93e commit 2feeb17
Showing 1 changed file with 33 additions and 38 deletions.
Expand Up @@ -247,19 +247,25 @@ void writeProperties(final XMLStreamWriter writer) throws XMLStreamException {
void writeTestCase(final XMLStreamWriter writer) throws XMLStreamException {
for (final Map.Entry<TestIdentifier, Stats> entry : testIds.entrySet()) {
final TestIdentifier testId = entry.getKey();
if (!testId.isTest()) {
// only interested in test methods
if (!testId.isTest() && isSuccessful(testId)) {
// only interested in test methods and in failing containers
continue;
}
// find the parent class of this test method
final Optional<TestIdentifier> parent = testPlan.getParent(testId);
if (!parent.isPresent()) {
continue;
}
final String classname = parent.get().getLegacyReportingName();

writer.writeStartElement(ELEM_TESTCASE);
writer.writeAttribute(ATTR_CLASSNAME, classname);
writer.writeAttribute(ATTR_NAME, testId.getDisplayName());
if (testId.isTest()) {
final String classname = parent.get().getLegacyReportingName();
writer.writeAttribute(ATTR_CLASSNAME, classname);
writer.writeAttribute(ATTR_NAME, testId.getDisplayName());
} else { // is a container
writer.writeAttribute(ATTR_CLASSNAME, testId.getDisplayName());
writer.writeAttribute(ATTR_NAME, "");
}
final Stats stats = entry.getValue();
writer.writeAttribute(ATTR_TIME, String.valueOf((stats.endedAt - stats.startedAt) / ONE_SECOND));
// skipped element if the test was skipped
Expand All @@ -275,6 +281,13 @@ void writeTestCase(final XMLStreamWriter writer) throws XMLStreamException {
}
}

private boolean isSuccessful(final TestIdentifier testId) {
return !aborted.containsKey(testId)//
&& !failed.containsKey(testId) //
&& !errored.containsKey(testId)//
&& !skipped.containsKey(testId);
}

private void writeSkipped(final XMLStreamWriter writer, final TestIdentifier testIdentifier)
throws XMLStreamException {
if (!skipped.containsKey(testIdentifier)) {
Expand All @@ -290,56 +303,38 @@ private void writeSkipped(final XMLStreamWriter writer, final TestIdentifier tes

private void writeFailed(final XMLStreamWriter writer, final TestIdentifier testIdentifier)
throws XMLStreamException {
if (!failed.containsKey(testIdentifier)) {
return;
}
writer.writeStartElement(ELEM_FAILURE);
final Optional<Throwable> cause = failed.get(testIdentifier);
if (cause.isPresent()) {
final Throwable t = cause.get();
final String message = t.getMessage();
if (message != null && !message.trim().isEmpty()) {
writer.writeAttribute(ATTR_MESSAGE, message);
}
writer.writeAttribute(ATTR_TYPE, t.getClass().getName());
writer.writeCharacters(ExceptionUtils.readStackTrace(t));
}
writer.writeEndElement();
writeIfPresentInMap(writer, testIdentifier, ELEM_FAILURE, failed, true);
}

private void writeErrored(final XMLStreamWriter writer, final TestIdentifier testIdentifier)
throws XMLStreamException {
if (!errored.containsKey(testIdentifier)) {
return;
}
writer.writeStartElement(ELEM_ERROR);
final Optional<Throwable> cause = errored.get(testIdentifier);
if (cause.isPresent()) {
final Throwable t = cause.get();
final String message = t.getMessage();
if (message != null && !message.trim().isEmpty()) {
writer.writeAttribute(ATTR_MESSAGE, message);
}
writer.writeAttribute(ATTR_TYPE, t.getClass().getName());
writer.writeCharacters(ExceptionUtils.readStackTrace(t));
}
writer.writeEndElement();
writeIfPresentInMap(writer, testIdentifier, ELEM_ERROR, errored, true);
}

private void writeAborted(final XMLStreamWriter writer, final TestIdentifier testIdentifier)
throws XMLStreamException {
if (!aborted.containsKey(testIdentifier)) {
writeIfPresentInMap(writer, testIdentifier, ELEM_ABORTED, aborted, false);
}

private static void writeIfPresentInMap(XMLStreamWriter writer, TestIdentifier testIdentifier,
String elemFailure, Map<TestIdentifier, Optional<Throwable>> map, boolean writeExceptionStackTrace)
throws XMLStreamException {
if (!map.containsKey(testIdentifier)) {
return;
}
writer.writeStartElement(ELEM_ABORTED);
final Optional<Throwable> cause = aborted.get(testIdentifier);
writer.writeStartElement(elemFailure);
final Optional<Throwable> cause = map.get(testIdentifier);
if (cause.isPresent()) {
final Throwable t = cause.get();
final String message = t.getMessage();
if (message != null && !message.trim().isEmpty()) {
writer.writeAttribute(ATTR_MESSAGE, message);
}
writer.writeAttribute(ATTR_TYPE, t.getClass().getName());

if (writeExceptionStackTrace) {
writer.writeCharacters(ExceptionUtils.readStackTrace(t));
}
}
writer.writeEndElement();
}
Expand Down

0 comments on commit 2feeb17

Please sign in to comment.