diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java index 7fb661eb54..f5f2916c5e 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java @@ -47,6 +47,7 @@ import static org.apache.maven.plugin.surefire.report.ReportEntryType.SKIPPED; import static org.apache.maven.plugin.surefire.report.ReportEntryType.SUCCESS; import static org.apache.maven.surefire.shared.utils.StringUtils.isBlank; +import static org.apache.maven.surefire.shared.utils.StringUtils.isNotBlank; // CHECKSTYLE_OFF: LineLength /** @@ -451,7 +452,9 @@ private static void getTestProblems( String type = delimiter == -1 ? stackTrace : stackTrace.substring(0, delimiter); ppw.addAttribute("type", type); } else { - ppw.addAttribute("type", new StringTokenizer(stackTrace).nextToken()); + if (isNotBlank(stackTrace)) { + ppw.addAttribute("type", new StringTokenizer(stackTrace).nextToken()); + } } } } diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java index ea2cfbc0b3..f46bb20016 100644 --- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java +++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java @@ -522,6 +522,23 @@ public void testSyncOnDeferredFile() throws Exception { assertThat((boolean) getInternalState(out, "closed")).isTrue(); } + public void testReporterHandlesATestWithoutMessageAndWithEmptyStackTrace() { + StackTraceWriter stackTraceWriterOne = new DeserializedStacktraceWriter(null, null, ""); + + WrappedReportEntry testReport = new WrappedReportEntry( + new SimpleReportEntry( + NORMAL_RUN, 1L, getClass().getName(), null, "a test name", null, stackTraceWriterOne, 5), + ERROR, + 5, + null, + null); + + StatelessXmlReporter reporter = new StatelessXmlReporter( + reportDir, null, false, 1, new HashMap<>(), XSD, "3.0.1", false, false, false, false); + + reporter.testSetCompleted(testReport, stats); + } + private boolean defaultCharsetSupportsSpecialChar() { // some charsets are not able to deal with \u0115 on both ways of the conversion return "\u0115\u00DC".equals(new String("\u0115\u00DC".getBytes()));