You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2023/04/30 23:05:02 UTC
[maven-surefire] branch use-renderer updated (8c3baaf3e -> da5defa71)
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a change to branch use-renderer
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
discard 8c3baaf3e Rewrite
new da5defa71 [SUREFIRE-2153] Replace SurefireReportGenerator with SurefireReportRenderer
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (8c3baaf3e)
\
N -- N -- N refs/heads/use-renderer (da5defa71)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
[maven-surefire] 01/01: [SUREFIRE-2153] Replace SurefireReportGenerator with SurefireReportRenderer
Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch use-renderer
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit da5defa71e34c6248ecc64ce4b7b13de60bdce64
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Mon May 1 01:04:33 2023 +0200
[SUREFIRE-2153] Replace SurefireReportGenerator with SurefireReportRenderer
This closes #625
---
.../report/AbstractSurefireReportMojo.java | 12 +-
...tGenerator.java => SurefireReportRenderer.java} | 220 ++++++++----------
.../plugins/surefire/report/Surefire597Test.java | 57 ++---
.../surefire/report/SurefireReportMojoTest.java | 247 +++++++++------------
.../resources/unit/surefire-1183/plugin-config.xml | 3 +-
.../jiras/Surefire260TestWithIdenticalNamesIT.java | 5 +-
.../surefire/report/SurefireReportParser.java | 47 ++--
.../surefire/report/SurefireReportParserTest.java | 41 ++--
8 files changed, 282 insertions(+), 350 deletions(-)
diff --git a/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/AbstractSurefireReportMojo.java b/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/AbstractSurefireReportMojo.java
index eaaf294f1..44f107b01 100644
--- a/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/AbstractSurefireReportMojo.java
+++ b/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/AbstractSurefireReportMojo.java
@@ -126,9 +126,15 @@ public abstract class AbstractSurefireReportMojo extends AbstractMavenReport {
return;
}
- new SurefireReportGenerator(
- getReportsDirectories(), locale, showSuccess, determineXrefLocation(), getConsoleLogger())
- .doGenerateReport(getBundle(locale), getSink());
+ SurefireReportRenderer r = new SurefireReportRenderer(
+ getSink(),
+ locale,
+ getBundle(locale),
+ getConsoleLogger(),
+ showSuccess,
+ getReportsDirectories(),
+ determineXrefLocation());
+ r.render();
}
@Override
diff --git a/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportGenerator.java b/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java
similarity index 77%
rename from maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportGenerator.java
rename to maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java
index 09667a06a..9f09e6135 100644
--- a/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportGenerator.java
+++ b/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java
@@ -29,68 +29,64 @@ import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet;
import org.apache.maven.doxia.util.DoxiaUtils;
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.reporting.AbstractMavenReportRenderer;
import static org.apache.maven.doxia.markup.HtmlMarkup.A;
-import static org.apache.maven.doxia.sink.Sink.JUSTIFY_LEFT;
import static org.apache.maven.doxia.sink.SinkEventAttributes.CLASS;
import static org.apache.maven.doxia.sink.SinkEventAttributes.HREF;
import static org.apache.maven.doxia.sink.SinkEventAttributes.ID;
import static org.apache.maven.doxia.sink.SinkEventAttributes.STYLE;
-import static org.apache.maven.doxia.sink.SinkEventAttributes.TYPE;
/**
* This generator creates HTML Report from Surefire and Failsafe XML Report.
*/
-public final class SurefireReportGenerator {
- private static final int LEFT = JUSTIFY_LEFT;
+public class SurefireReportRenderer extends AbstractMavenReportRenderer {
private static final Object[] TAG_TYPE_START = {HtmlMarkup.TAG_TYPE_START};
private static final Object[] TAG_TYPE_END = {HtmlMarkup.TAG_TYPE_END};
- private final SurefireReportParser report;
+ // Not used at the moment
+ private final Locale locale;
+ private final LocalizedProperties bundle;
+
+ private final SurefireReportParser parser;
private final boolean showSuccess;
private final String xrefLocation;
- private List<ReportTestSuite> testSuites;
+ private final List<ReportTestSuite> testSuites;
- public SurefireReportGenerator(
- List<File> reportsDirectories,
+ public SurefireReportRenderer(
+ Sink sink,
Locale locale,
+ LocalizedProperties bundle,
+ ConsoleLogger consoleLogger,
boolean showSuccess,
- String xrefLocation,
- ConsoleLogger consoleLogger) {
- report = new SurefireReportParser(reportsDirectories, locale, consoleLogger);
+ List<File> reportsDirectories,
+ String xrefLocation) {
+ super(sink);
+ this.locale = locale;
+ this.bundle = bundle;
+ parser = new SurefireReportParser(reportsDirectories, consoleLogger);
+ testSuites = parser.parseXMLReportFiles();
this.showSuccess = showSuccess;
this.xrefLocation = xrefLocation;
}
- public void doGenerateReport(LocalizedProperties bundle, Sink sink) throws MavenReportException {
- testSuites = report.parseXMLReportFiles();
-
- sink.head();
-
- sink.title();
- sink.text(bundle.getReportHeader());
- sink.title_();
-
- sink.head_();
-
- sink.body();
-
- SinkEventAttributeSet atts = new SinkEventAttributeSet();
- atts.addAttribute(TYPE, "application/javascript");
- sink.unknown("script", new Object[] {HtmlMarkup.TAG_TYPE_START}, atts);
- sink.unknown("cdata", new Object[] {HtmlMarkup.CDATA_TYPE, javascriptToggleDisplayCode()}, null);
- sink.unknown("script", new Object[] {HtmlMarkup.TAG_TYPE_END}, null);
+ @Override
+ public String getTitle() {
+ return bundle.getReportHeader();
+ }
+ public void renderBody() {
+ sink.rawText(HtmlMarkup.EOL + "<script>" + HtmlMarkup.EOL + javascriptToggleDisplayCode() + HtmlMarkup.EOL
+ + "</script>" + HtmlMarkup.EOL);
sink.section1();
sink.sectionTitle1();
- sink.text(bundle.getReportHeader());
+ sink.text(getTitle());
sink.sectionTitle1_();
sink.section1_();
constructSummarySection(bundle, sink);
- Map<String, List<ReportTestSuite>> suitePackages = report.getSuitesGroupByPackage(testSuites);
+ Map<String, List<ReportTestSuite>> suitePackages = parser.getSuitesGroupByPackage(testSuites);
if (!suitePackages.isEmpty()) {
constructPackagesSection(bundle, sink, suitePackages);
}
@@ -99,20 +95,17 @@ public final class SurefireReportGenerator {
constructTestCasesSection(bundle, sink);
}
- List<ReportTestCase> failureList = report.getFailureDetails(testSuites);
+ List<ReportTestCase> failureList = parser.getFailureDetails(testSuites);
if (!failureList.isEmpty()) {
constructFailureDetails(sink, bundle, failureList);
}
-
- sink.body_();
-
- sink.flush();
-
- sink.close();
}
private void constructSummarySection(LocalizedProperties bundle, Sink sink) {
- Map<String, String> summary = report.getSummary(testSuites);
+ Map<String, Object> summary = parser.getSummary(testSuites);
+ NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
+ NumberFormat percentFormat = NumberFormat.getPercentInstance(locale);
+ percentFormat.setMinimumFractionDigits(1);
sink.section1();
sinkAnchor(sink, "Summary");
@@ -124,9 +117,7 @@ public final class SurefireReportGenerator {
sinkLineBreak(sink);
- sink.table();
-
- sink.tableRows(new int[] {LEFT, LEFT, LEFT, LEFT, LEFT, LEFT}, false);
+ startTable();
sink.tableRow();
@@ -146,23 +137,21 @@ public final class SurefireReportGenerator {
sink.tableRow();
- sinkCell(sink, summary.get("totalTests"));
+ sinkCell(sink, String.valueOf(summary.get("totalTests")));
- sinkCell(sink, summary.get("totalErrors"));
+ sinkCell(sink, String.valueOf(summary.get("totalErrors")));
- sinkCell(sink, summary.get("totalFailures"));
+ sinkCell(sink, String.valueOf(summary.get("totalFailures")));
- sinkCell(sink, summary.get("totalSkipped"));
+ sinkCell(sink, String.valueOf(summary.get("totalSkipped")));
- sinkCell(sink, summary.get("totalPercentage") + "%");
+ sinkCell(sink, percentFormat.format(summary.get("totalPercentage")));
- sinkCell(sink, summary.get("totalElapsedTime"));
+ sinkCell(sink, numberFormat.format(summary.get("totalElapsedTime")) + " s");
sink.tableRow_();
- sink.tableRows_();
-
- sink.table_();
+ endTable();
sink.lineBreak();
@@ -177,7 +166,9 @@ public final class SurefireReportGenerator {
private void constructPackagesSection(
LocalizedProperties bundle, Sink sink, Map<String, List<ReportTestSuite>> suitePackages) {
- NumberFormat numberFormat = report.getNumberFormat();
+ NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
+ NumberFormat percentFormat = NumberFormat.getPercentInstance(locale);
+ percentFormat.setMinimumFractionDigits(1);
sink.section1();
sinkAnchor(sink, "Package_List");
@@ -189,9 +180,7 @@ public final class SurefireReportGenerator {
sinkLineBreak(sink);
- sink.table();
-
- sink.tableRows(new int[] {LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT}, false);
+ startTable();
sink.tableRow();
@@ -218,29 +207,26 @@ public final class SurefireReportGenerator {
List<ReportTestSuite> testSuiteList = entry.getValue();
- Map<String, String> packageSummary = report.getSummary(testSuiteList);
+ Map<String, Object> packageSummary = parser.getSummary(testSuiteList);
sinkCellLink(sink, packageName, "#" + packageName);
- sinkCell(sink, packageSummary.get("totalTests"));
+ sinkCell(sink, String.valueOf(packageSummary.get("totalTests")));
- sinkCell(sink, packageSummary.get("totalErrors"));
+ sinkCell(sink, String.valueOf(packageSummary.get("totalErrors")));
- sinkCell(sink, packageSummary.get("totalFailures"));
+ sinkCell(sink, String.valueOf(packageSummary.get("totalFailures")));
- sinkCell(sink, packageSummary.get("totalSkipped"));
+ sinkCell(sink, String.valueOf(packageSummary.get("totalSkipped")));
- sinkCell(sink, packageSummary.get("totalPercentage") + "%");
+ sinkCell(sink, percentFormat.format(packageSummary.get("totalPercentage")));
- sinkCell(sink, packageSummary.get("totalElapsedTime"));
+ sinkCell(sink, numberFormat.format(packageSummary.get("totalElapsedTime")) + " s");
sink.tableRow_();
}
- sink.tableRows_();
-
- sink.table_();
-
+ endTable();
sink.lineBreak();
sink.paragraph();
@@ -269,9 +255,7 @@ public final class SurefireReportGenerator {
}
if (showTable) {
- sink.table();
-
- sink.tableRows(new int[] {LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT}, false);
+ startTable();
sink.tableRow();
@@ -295,13 +279,11 @@ public final class SurefireReportGenerator {
for (ReportTestSuite suite : testSuiteList) {
if (showSuccess || suite.getNumberOfErrors() != 0 || suite.getNumberOfFailures() != 0) {
- constructTestSuiteSection(sink, numberFormat, suite);
+ constructTestSuiteSection(sink, suite);
}
}
- sink.tableRows_();
-
- sink.table_();
+ endTable();
}
sink.section2_();
@@ -312,7 +294,11 @@ public final class SurefireReportGenerator {
sink.section1_();
}
- private void constructTestSuiteSection(Sink sink, NumberFormat numberFormat, ReportTestSuite suite) {
+ private void constructTestSuiteSection(Sink sink, ReportTestSuite suite) {
+ NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
+ NumberFormat percentFormat = NumberFormat.getPercentInstance(locale);
+ percentFormat.setMinimumFractionDigits(1);
+
sink.tableRow();
sink.tableCell();
@@ -343,19 +329,17 @@ public final class SurefireReportGenerator {
sinkCell(sink, Integer.toString(suite.getNumberOfSkipped()));
- String percentage = report.computePercentage(
+ float percentage = parser.computePercentage(
suite.getNumberOfTests(), suite.getNumberOfErrors(),
suite.getNumberOfFailures(), suite.getNumberOfSkipped());
- sinkCell(sink, percentage + "%");
+ sinkCell(sink, percentFormat.format(percentage));
- sinkCell(sink, numberFormat.format(suite.getTimeElapsed()));
+ sinkCell(sink, numberFormat.format(suite.getTimeElapsed()) + " s");
sink.tableRow_();
}
private void constructTestCasesSection(LocalizedProperties bundle, Sink sink) {
- NumberFormat numberFormat = report.getNumberFormat();
-
sink.section1();
sinkAnchor(sink, "Test_Cases");
sink.sectionTitle1();
@@ -385,19 +369,15 @@ public final class SurefireReportGenerator {
}
if (showTable) {
- sink.table();
-
- sink.tableRows(new int[] {LEFT, LEFT, LEFT}, false);
+ startTable();
for (ReportTestCase testCase : testCases) {
if (!testCase.isSuccessful() || showSuccess) {
- constructTestCaseSection(sink, numberFormat, testCase);
+ constructTestCaseSection(sink, testCase);
}
}
- sink.tableRows_();
-
- sink.table_();
+ endTable();
}
sink.section2_();
@@ -409,7 +389,9 @@ public final class SurefireReportGenerator {
sink.section1_();
}
- private static void constructTestCaseSection(Sink sink, NumberFormat numberFormat, ReportTestCase testCase) {
+ private void constructTestCaseSection(Sink sink, ReportTestCase testCase) {
+ NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
+
sink.tableRow();
sink.tableCell();
@@ -463,34 +445,35 @@ public final class SurefireReportGenerator {
sinkCellAnchor(sink, testCase.getName(), "TC_" + toHtmlId(testCase.getFullName()));
}
- sinkCell(sink, numberFormat.format(testCase.getTime()));
+ sinkCell(sink, numberFormat.format(testCase.getTime()) + " s");
sink.tableRow_();
if (!testCase.isSuccessful()) {
- sink.tableRow();
-
- sinkCell(sink, "");
- sinkCell(sink, testCase.getFailureMessage());
- sinkCell(sink, "");
- sink.tableRow_();
-
- String detail = testCase.getFailureDetail();
- if (detail != null) {
+ String message = testCase.getFailureMessage();
+ if (message != null) {
sink.tableRow();
sinkCell(sink, "");
+ sinkCell(sink, message);
+ sinkCell(sink, "");
+ sink.tableRow_();
+ }
- sink.tableCell();
+ String detail = testCase.getFailureDetail();
+ if (detail != null) {
SinkEventAttributeSet atts = new SinkEventAttributeSet();
atts.addAttribute(ID, toHtmlId(testCase.getFullName()) + toHtmlIdFailure(testCase));
atts.addAttribute(STYLE, "display:none;");
- sink.unknown("div", TAG_TYPE_START, atts);
+ sink.tableRow(atts);
+
+ sinkCell(sink, "");
+
+ sink.tableCell();
sink.verbatim(null);
sink.text(detail);
sink.verbatim_();
- sink.unknown("div", TAG_TYPE_END, null);
sink.tableCell_();
sinkCell(sink, "");
@@ -515,26 +498,24 @@ public final class SurefireReportGenerator {
sinkLineBreak(sink);
- sink.table();
-
- sink.tableRows(new int[] {LEFT, LEFT}, false);
+ startTable();
- for (ReportTestCase tCase : failures) {
+ for (ReportTestCase testCase : failures) {
sink.tableRow();
sink.tableCell();
- String type = tCase.getFailureType();
+ String type = testCase.getFailureType();
sinkIcon(type, sink);
sink.tableCell_();
- sinkCellAnchor(sink, tCase.getName(), toHtmlId(tCase.getFullName()));
+ sinkCellAnchor(sink, testCase.getName(), toHtmlId(testCase.getFullName()));
sink.tableRow_();
- String message = tCase.getFailureMessage();
+ String message = testCase.getFailureMessage();
sink.tableRow();
@@ -544,7 +525,7 @@ public final class SurefireReportGenerator {
sink.tableRow_();
- String detail = tCase.getFailureDetail();
+ String detail = testCase.getFailureDetail();
if (detail != null) {
sink.tableRow();
@@ -552,11 +533,11 @@ public final class SurefireReportGenerator {
sink.tableCell();
SinkEventAttributeSet atts = new SinkEventAttributeSet();
- atts.addAttribute(ID, tCase.getName() + toHtmlIdFailure(tCase));
+ atts.addAttribute(ID, testCase.getName() + toHtmlIdFailure(testCase));
sink.unknown("div", TAG_TYPE_START, atts);
- String fullClassName = tCase.getFullClassName();
- String errorLineNumber = tCase.getFailureErrorLine();
+ String fullClassName = testCase.getFullClassName();
+ String errorLineNumber = testCase.getFailureErrorLine();
if (xrefLocation != null) {
String path = fullClassName.replace('.', '/');
sink.link(xrefLocation + "/" + path + ".html#L" + errorLineNumber);
@@ -574,9 +555,7 @@ public final class SurefireReportGenerator {
}
}
- sink.tableRows_();
-
- sink.table_();
+ endTable();
sinkLineBreak(sink);
@@ -671,11 +650,7 @@ public final class SurefireReportGenerator {
}
private static String javascriptToggleDisplayCode() {
-
- // the javascript code is emitted within a commented CDATA section
- // so we have to start with a newline and comment the CDATA closing in the end
-
- return "\n" + "function toggleDisplay(elementId) {\n"
+ return "function toggleDisplay(elementId) {\n"
+ " var elm = document.getElementById(elementId + '-error');\n"
+ " if (elm == null) {\n"
+ " elm = document.getElementById(elementId + '-failure');\n"
@@ -689,9 +664,8 @@ public final class SurefireReportGenerator {
+ " elm.style.display = \"none\";\n"
+ " document.getElementById(elementId + '-off').style.display = \"inline\";\n"
+ " document.getElementById(elementId + '-on').style.display = \"none\";\n"
- + " } \n"
- + " } \n"
+ + " }\n"
+ " }\n"
- + "//";
+ + " }";
}
}
diff --git a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/Surefire597Test.java b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/Surefire597Test.java
index e3274f5b7..25a5579c5 100644
--- a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/Surefire597Test.java
+++ b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/Surefire597Test.java
@@ -24,11 +24,11 @@ import java.io.StringWriter;
import junit.framework.TestCase;
import org.apache.maven.doxia.module.xhtml5.Xhtml5Sink;
import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.tools.SiteTool;
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
import static java.util.Collections.singletonList;
-import static java.util.Locale.ENGLISH;
import static org.apache.maven.plugins.surefire.report.Utils.toSystemNewLine;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -41,11 +41,18 @@ public class Surefire597Test extends TestCase {
public void testCorruptedTestCaseFailureWithMissingErrorTypeAndMessage() throws Exception {
File basedir = new File(".").getCanonicalFile();
File report = new File(basedir, "target/test-classes/surefire-597");
- ConsoleLogger log = new NullConsoleLogger();
- SurefireReportGenerator gen = new SurefireReportGenerator(singletonList(report), ENGLISH, true, null, log);
StringWriter writer = new StringWriter();
Sink sink = new Xhtml5Sink(writer) {};
- gen.doGenerateReport(new SurefireReportMojo().getBundle(ENGLISH), sink);
+ ConsoleLogger consoleLogger = new NullConsoleLogger();
+ SurefireReportRenderer r = new SurefireReportRenderer(
+ sink,
+ SiteTool.DEFAULT_LOCALE,
+ new SurefireReportMojo().getBundle(SiteTool.DEFAULT_LOCALE),
+ consoleLogger,
+ true,
+ singletonList(report),
+ null);
+ r.render();
String xml = writer.toString();
assertThat(
xml,
@@ -59,11 +66,11 @@ public class Surefire597Test extends TestCase {
+ "<th>Time</th></tr>\n"
+ "<tr class=\"b\">\n"
+ "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td>"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td>"
+ "</tr>"
+ "</table>")));
assertThat(
@@ -79,12 +86,12 @@ public class Surefire597Test extends TestCase {
+ "<th>Time</th></tr>\n"
+ "<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire\">surefire</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr></table>")));
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr></table>")));
assertThat(
xml,
containsString(toSystemNewLine("<table border=\"0\" class=\"bodyTable\">\n"
@@ -99,25 +106,25 @@ public class Surefire597Test extends TestCase {
+ "<th>Time</th></tr>\n"
+ "<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire.MyTest\"><img src=\"images/icon_error_sml.gif\" alt=\"\" /></a></td>\n"
- + "<td align=\"left\"><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr></table>")));
+ + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr></table>")));
assertThat(
xml,
containsString(toSystemNewLine("<table border=\"0\" class=\"bodyTable\">\n"
+ "<tr class=\"a\">\n"
+ "<td align=\"left\"><img src=\"images/icon_error_sml.gif\" alt=\"\" /></td>\n"
- + "<td align=\"left\"><a id=\"surefire.MyTest.test\"></a>test</td></tr>\n"
+ + "<td><a id=\"surefire.MyTest.test\"></a>test</td></tr>\n"
+ "<tr class=\"b\">\n"
+ "<td align=\"left\"></td>\n"
- + "<td align=\"left\">java.lang.RuntimeException: java.lang.IndexOutOfBoundsException: msg</td></tr>\n"
+ + "<td>java.lang.RuntimeException: java.lang.IndexOutOfBoundsException: msg</td></tr>\n"
+ "<tr class=\"a\">\n"
+ "<td align=\"left\"></td>\n"
- + "<td align=\"left\">\n"
+ + "<td>\n"
+ "<div id=\"test-error\">surefire.MyTest:13</div></td></tr></table>")));
}
}
diff --git a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
index 14c1992da..4dfb98a51 100644
--- a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
+++ b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
@@ -19,26 +19,17 @@
package org.apache.maven.plugins.surefire.report;
import java.io.File;
-import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.io.Writer;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Locale;
-import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.siterenderer.Renderer;
-import org.apache.maven.doxia.siterenderer.RendererException;
-import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
-import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.plugin.testing.ArtifactStubFactory;
import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
import org.apache.maven.plugins.surefire.report.stubs.DependencyArtifactStubFactory;
-import org.apache.maven.shared.utils.WriterFactory;
import org.apache.maven.shared.utils.io.FileUtils;
-import org.apache.maven.shared.utils.io.IOUtil;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
import org.eclipse.aether.repository.LocalRepository;
@@ -54,15 +45,23 @@ import static org.hamcrest.MatcherAssert.assertThat;
public class SurefireReportMojoTest extends AbstractMojoTestCase {
private ArtifactStubFactory artifactStubFactory;
- private Renderer renderer;
+ // Can be removed with Doxia 2.0.0
+ private Locale origLocale;
@Override
protected void setUp() throws Exception {
super.setUp();
- renderer = (Renderer) lookup(Renderer.ROLE);
-
artifactStubFactory = new DependencyArtifactStubFactory(getTestFile("target"), true, false);
artifactStubFactory.getWorkingDir().mkdirs();
+
+ origLocale = Locale.getDefault();
+ Locale.setDefault(Locale.ROOT);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ Locale.setDefault(origLocale);
+ super.tearDown();
}
protected SurefireReportMojo createReportMojo(File pluginXmlFile) throws Exception {
@@ -105,7 +104,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
File report = new File(getBasedir(), "target/site/unit/basic-surefire-report-test/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -127,7 +125,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
File report =
new File(getBasedir(), "target/site/unit/basic-surefire-report-success-false/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -142,8 +139,7 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
assertFalse(linkXRef);
mojo.execute();
File report =
- new File(getBasedir(), "target/site/unit/basic-surefire-report-success-false/surefire-report.html");
- renderer(mojo, report);
+ new File(getBasedir(), "target/site/unit/basic-surefire-report-linkxref-false/surefire-report.html");
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -157,7 +153,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
File report =
new File(getBasedir(), "target/site/unit/basic-surefire-report-reporting-null/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -172,14 +167,13 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
File report =
new File(getBasedir(), "target/site/unit/basic-surefire-report-anchor-test-cases/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
- int idx = htmlContent.indexOf("<td align=\"left\"><a id=\"TC_com.shape.CircleTest.testX\"></a>testX</td>");
+ int idx = htmlContent.indexOf("<td><a id=\"TC_com.shape.CircleTest.testX\"></a>testX</td>");
assertTrue(idx > 0);
- idx = htmlContent.indexOf("<td align=\"left\"><a id=\"TC_com.shape.CircleTest.testRadius\"></a>"
+ idx = htmlContent.indexOf("<td><a id=\"TC_com.shape.CircleTest.testRadius\"></a>"
+ "<a href=\"#com.shape.CircleTest.testRadius\">testRadius</a>");
assertTrue(idx > 0);
}
@@ -189,7 +183,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
SurefireReportMojo mojo = createReportMojo(testPom);
mojo.execute();
File report = new File(getBasedir(), "target/site/unit/surefire-report-single-error/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -197,22 +190,22 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td>")));
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire\">surefire</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
@@ -221,13 +214,13 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
+ "<img src=\"images/icon_error_sml.gif\" alt=\"\" />"
+ "</a>"
+ "</td>\n"
- + "<td align=\"left\"><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(htmlContent, containsString(">surefire.MyTest:13</a>"));
@@ -278,7 +271,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
File report = new File(
getBasedir(), "target/site/unit/surefire-report-nestedClass-trimStackTrace/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -286,22 +278,22 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td>")));
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire\">surefire</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
@@ -310,13 +302,13 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
+ "<img src=\"images/icon_error_sml.gif\" alt=\"\" />"
+ "</a>"
+ "</td>\n"
- + "<td align=\"left\"><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(htmlContent, containsString(">surefire.MyTest:13</a>"));
assertThat(htmlContent, containsString("./xref-test/surefire/MyTest.html#L13"));
@@ -342,7 +334,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
SurefireReportMojo mojo = createReportMojo(testPom);
mojo.execute();
File report = new File(getBasedir(), "target/site/unit/surefire-report-nestedClass/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -350,22 +341,22 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td>")));
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire\">surefire</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
@@ -374,13 +365,13 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
+ "<img src=\"images/icon_error_sml.gif\" alt=\"\" />"
+ "</a>"
+ "</td>\n"
- + "<td align=\"left\"><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(htmlContent, containsString(">surefire.MyTest:13</a>"));
assertThat(htmlContent, containsString("./xref-test/surefire/MyTest.html#L13"));
@@ -431,7 +422,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
File report =
new File(getBasedir(), "target/site/unit/surefire-report-enclosed-trimStackTrace/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -439,22 +429,22 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td>")));
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire\">surefire</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
@@ -463,13 +453,13 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
+ "<img src=\"images/icon_error_sml.gif\" alt=\"\" />"
+ "</a>"
+ "</td>\n"
- + "<td align=\"left\"><a href=\"#surefire.MyTest$A\">MyTest$A</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td><a href=\"#surefire.MyTest$A\">MyTest$A</a></td>\n"
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(htmlContent, containsString(">surefire.MyTest$A:45</a>"));
@@ -495,7 +485,6 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
SurefireReportMojo mojo = createReportMojo(testPom);
mojo.execute();
File report = new File(getBasedir(), "target/site/unit/surefire-report-enclosed/surefire-report.html");
- renderer(mojo, report);
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
@@ -503,22 +492,22 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td>")));
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
+ "<td align=\"left\"><a href=\"#surefire\">surefire</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(
htmlContent,
containsString(toSystemNewLine("<tr class=\"b\">\n"
@@ -527,13 +516,13 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
+ "<img src=\"images/icon_error_sml.gif\" alt=\"\" />"
+ "</a>"
+ "</td>\n"
- + "<td align=\"left\"><a href=\"#surefire.MyTest$A\">MyTest$A</a></td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">1</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0</td>\n"
- + "<td align=\"left\">0%</td>\n"
- + "<td align=\"left\">0</td></tr>")));
+ + "<td><a href=\"#surefire.MyTest$A\">MyTest$A</a></td>\n"
+ + "<td>1</td>\n"
+ + "<td>1</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0</td>\n"
+ + "<td>0.0%</td>\n"
+ + "<td>0 s</td></tr>")));
assertThat(htmlContent, containsString(">surefire.MyTest$A:45</a>"));
@@ -609,37 +598,11 @@ public class SurefireReportMojoTest extends AbstractMojoTestCase {
mojo.execute();
- File report = new File(getBasedir(), "target/site/acceptance-test-report.html");
- renderer(mojo, report);
+ File report = new File(getBasedir(), "target/site/unit/surefire-1183/acceptance-test-report.html");
assertTrue(report.exists());
String htmlContent = FileUtils.fileRead(report);
assertTrue(htmlContent.contains("<h2><a name=\"Acceptance_Test\"></a>Acceptance Test</h2></section>"));
}
-
- /**
- * Renderer the sink from the report mojo.
- *
- * @param mojo not null
- * @param outputHtml not null
- * @throws RendererException if any
- * @throws IOException if any
- */
- private void renderer(SurefireReportMojo mojo, File outputHtml) throws RendererException, IOException {
- Writer writer = null;
- SiteRenderingContext context = new SiteRenderingContext();
- context.setDecoration(new DecorationModel());
- context.setTemplateName("org/apache/maven/doxia/siterenderer/resources/default-site.vm");
- context.setLocale(Locale.ENGLISH);
-
- try {
- outputHtml.getParentFile().mkdirs();
- writer = WriterFactory.newXmlWriter(outputHtml);
-
- renderer.generateDocument(writer, (SiteRendererSink) mojo.getSink(), context);
- } finally {
- IOUtil.close(writer);
- }
- }
}
diff --git a/maven-surefire-report-plugin/src/test/resources/unit/surefire-1183/plugin-config.xml b/maven-surefire-report-plugin/src/test/resources/unit/surefire-1183/plugin-config.xml
index 3166e7896..75ad4abd9 100644
--- a/maven-surefire-report-plugin/src/test/resources/unit/surefire-1183/plugin-config.xml
+++ b/maven-surefire-report-plugin/src/test/resources/unit/surefire-1183/plugin-config.xml
@@ -31,8 +31,7 @@
<outputName>acceptance-test-report</outputName>
<localRepository>${localRepository}</localRepository>
<outputDirectory>${basedir}/target/site/unit/surefire-1183</outputDirectory>
- <reportsDirectory>${basedir}/src/test/resources/unit/surefire-1183/acceptancetest-reports
- </reportsDirectory>
+ <reportsDirectory>${basedir}/src/test/resources/unit/surefire-1183/acceptancetest-reports</reportsDirectory>
</configuration>
</plugin>
</plugins>
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire260TestWithIdenticalNamesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire260TestWithIdenticalNamesIT.java
index aca227760..5c473af91 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire260TestWithIdenticalNamesIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire260TestWithIdenticalNamesIT.java
@@ -23,8 +23,9 @@ import java.net.URI;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlTableRow;
+
import org.apache.maven.surefire.its.fixture.OutputValidator;
import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
import org.apache.maven.surefire.its.fixture.TestFile;
@@ -58,7 +59,7 @@ public class Surefire260TestWithIdenticalNamesIT extends SurefireJUnit4Integrati
HtmlAnchor a = (HtmlAnchor)
page.getByXPath("//a[@href = \"javascript:toggleDisplay('surefire260.TestB.testDup');\"]")
.get(0);
- HtmlDivision content = (HtmlDivision) page.getElementById("surefire260.TestB.testDup-failure");
+ HtmlTableRow content = (HtmlTableRow) page.getElementById("surefire260.TestB.testDup-failure");
assertNotNull(content);
assertTrue(content.getAttribute("style").contains("none"));
a.click();
diff --git a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java
index 467d78487..230317647 100644
--- a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java
+++ b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportParser.java
@@ -22,16 +22,13 @@ import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
-import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.reporting.MavenReportException;
import org.apache.maven.shared.utils.io.DirectoryScanner;
import org.xml.sax.SAXException;
@@ -46,23 +43,18 @@ public final class SurefireReportParser {
private static final String EXCLUDES =
"*.txt, testng-failed.xml, testng-failures.xml, testng-results.xml, failsafe-summary*.xml";
- private static final int PCENT = 100;
-
private final List<ReportTestSuite> testSuites = new ArrayList<>();
- private final NumberFormat numberFormat;
-
private final ConsoleLogger consoleLogger;
private final List<File> reportsDirectories;
- public SurefireReportParser(List<File> reportsDirectories, Locale locale, ConsoleLogger consoleLogger) {
+ public SurefireReportParser(List<File> reportsDirectories, ConsoleLogger consoleLogger) {
this.reportsDirectories = reportsDirectories;
- numberFormat = NumberFormat.getInstance(locale);
this.consoleLogger = consoleLogger;
}
- public List<ReportTestSuite> parseXMLReportFiles() throws MavenReportException {
+ public List<ReportTestSuite> parseXMLReportFiles() {
final Collection<File> xmlReportFiles = new ArrayList<>();
for (File reportsDirectory : reportsDirectories) {
if (reportsDirectory.exists()) {
@@ -76,19 +68,19 @@ public final class SurefireReportParser {
try {
testSuites.addAll(parser.parse(aXmlReportFileList.getAbsolutePath()));
} catch (ParserConfigurationException e) {
- throw new MavenReportException("Error setting up parser for JUnit XML report", e);
+ throw new RuntimeException("Error setting up parser for JUnit XML report", e);
} catch (SAXException e) {
- throw new MavenReportException("Error parsing JUnit XML report " + aXmlReportFileList, e);
+ throw new RuntimeException("Error parsing JUnit XML report " + aXmlReportFileList, e);
} catch (IOException e) {
- throw new MavenReportException("Error reading JUnit XML report " + aXmlReportFileList, e);
+ throw new RuntimeException("Error reading JUnit XML report " + aXmlReportFileList, e);
}
}
return testSuites;
}
- public Map<String, String> getSummary(List<ReportTestSuite> suites) {
- Map<String, String> totalSummary = new HashMap<>();
+ public Map<String, Object> getSummary(List<ReportTestSuite> suites) {
+ Map<String, Object> totalSummary = new HashMap<>();
int totalNumberOfTests = 0;
@@ -112,28 +104,24 @@ public final class SurefireReportParser {
totalElapsedTime += suite.getTimeElapsed();
}
- String totalPercentage =
+ float totalPercentage =
computePercentage(totalNumberOfTests, totalNumberOfErrors, totalNumberOfFailures, totalNumberOfSkipped);
- totalSummary.put("totalTests", Integer.toString(totalNumberOfTests));
+ totalSummary.put("totalTests", totalNumberOfTests);
- totalSummary.put("totalErrors", Integer.toString(totalNumberOfErrors));
+ totalSummary.put("totalErrors", totalNumberOfErrors);
- totalSummary.put("totalFailures", Integer.toString(totalNumberOfFailures));
+ totalSummary.put("totalFailures", totalNumberOfFailures);
- totalSummary.put("totalSkipped", Integer.toString(totalNumberOfSkipped));
+ totalSummary.put("totalSkipped", totalNumberOfSkipped);
- totalSummary.put("totalElapsedTime", numberFormat.format(totalElapsedTime));
+ totalSummary.put("totalElapsedTime", totalElapsedTime);
totalSummary.put("totalPercentage", totalPercentage);
return totalSummary;
}
- public NumberFormat getNumberFormat() {
- return numberFormat;
- }
-
public Map<String, List<ReportTestSuite>> getSuitesGroupByPackage(List<ReportTestSuite> testSuitesList) {
Map<String, List<ReportTestSuite>> suitePackage = new HashMap<>();
@@ -152,9 +140,12 @@ public final class SurefireReportParser {
return suitePackage;
}
- public String computePercentage(int tests, int errors, int failures, int skipped) {
- float percentage = tests == 0 ? 0 : ((float) (tests - errors - failures - skipped) / (float) tests) * PCENT;
- return numberFormat.format(percentage);
+ /**
+ * @return a float between 0.0 and 1.0
+ */
+ public float computePercentage(int tests, int errors, int failures, int skipped) {
+ float percentage = tests == 0 ? 0 : ((float) (tests - errors - failures - skipped) / (float) tests);
+ return percentage;
}
public List<ReportTestCase> getFailureDetails(List<ReportTestSuite> testSuites) {
diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java
index 4596f60ab..8a9240e11 100644
--- a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java
+++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportParserTest.java
@@ -22,7 +22,6 @@ import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
-import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -31,7 +30,6 @@ import junit.framework.TestCase;
import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
import static java.util.Collections.singletonList;
-import static java.util.Locale.ENGLISH;
/**
*
@@ -39,10 +37,9 @@ import static java.util.Locale.ENGLISH;
@SuppressWarnings("checkstyle:magicnumber")
public class SurefireReportParserTest extends TestCase {
public void testParseXMLReportFiles() throws Exception {
- SurefireReportParser report =
- new SurefireReportParser(singletonList(getTestDir()), ENGLISH, new NullConsoleLogger());
+ SurefireReportParser parser = new SurefireReportParser(singletonList(getTestDir()), new NullConsoleLogger());
- List<ReportTestSuite> suites = report.parseXMLReportFiles();
+ List<ReportTestSuite> suites = parser.parseXMLReportFiles();
assertEquals(8, suites.size());
@@ -80,23 +77,21 @@ public class SurefireReportParserTest extends TestCase {
suites.add(tSuite2);
- SurefireReportParser report = new SurefireReportParser(null, ENGLISH, new NullConsoleLogger());
+ SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
- Map<String, String> testMap = report.getSummary(suites);
+ Map<String, Object> testMap = parser.getSummary(suites);
- assertEquals(20, Integer.parseInt(testMap.get("totalErrors")));
+ assertEquals(20, (int) testMap.get("totalErrors"));
- assertEquals(40, Integer.parseInt(testMap.get("totalFailures")));
+ assertEquals(40, (int) testMap.get("totalFailures"));
- assertEquals(200, Integer.parseInt(testMap.get("totalTests")));
+ assertEquals(200, (int) testMap.get("totalTests"));
- assertEquals(4, Integer.parseInt(testMap.get("totalSkipped")));
+ assertEquals(4, (int) testMap.get("totalSkipped"));
- NumberFormat numberFormat = report.getNumberFormat();
+ assertEquals(2.0f, (float) testMap.get("totalElapsedTime"));
- assertEquals(2.0f, numberFormat.parse(testMap.get("totalElapsedTime")).floatValue(), 0.0f);
-
- assertEquals(68.00f, numberFormat.parse(testMap.get("totalPercentage")).floatValue(), 0);
+ assertEquals(0.68f, (float) testMap.get("totalPercentage"));
}
public void testGetSuitesGroupByPackage() {
@@ -120,9 +115,9 @@ public class SurefireReportParserTest extends TestCase {
suites.add(tSuite3);
- SurefireReportParser report = new SurefireReportParser(null, ENGLISH, new NullConsoleLogger());
+ SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
- Map<String, List<ReportTestSuite>> groupMap = report.getSuitesGroupByPackage(suites);
+ Map<String, List<ReportTestSuite>> groupMap = parser.getSuitesGroupByPackage(suites);
assertEquals(2, groupMap.size());
@@ -134,13 +129,9 @@ public class SurefireReportParserTest extends TestCase {
}
public void testComputePercentage() throws Exception {
- SurefireReportParser report = new SurefireReportParser(null, ENGLISH, new NullConsoleLogger());
- NumberFormat numberFormat = report.getNumberFormat();
+ SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
- assertEquals(
- 70.00f,
- numberFormat.parse(report.computePercentage(100, 20, 10, 0)).floatValue(),
- 0);
+ assertEquals(0.7f, (float) parser.computePercentage(100, 20, 10, 0));
}
public void testGetFailureDetails() {
@@ -178,9 +169,9 @@ public class SurefireReportParserTest extends TestCase {
suites.add(tSuite2);
- SurefireReportParser report = new SurefireReportParser(null, ENGLISH, new NullConsoleLogger());
+ SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
- List<ReportTestCase> failures = report.getFailureDetails(suites);
+ List<ReportTestCase> failures = parser.getFailureDetails(suites);
assertEquals(2, failures.size());