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/05/25 09:21:02 UTC
[maven-surefire] 01/02: [SUREFIRE-2164] Simplify serialization of elapsed time in StatelessXmlReporter
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch simplify-serialization-deserialization-of-elapsed-time
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit 6692a70423d99a42376ed3958cb6ebd36960d0b1
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Fri May 19 19:18:01 2023 +0200
[SUREFIRE-2164] Simplify serialization of elapsed time in StatelessXmlReporter
This closes #637
---
.../surefire/report/StatelessXmlReporter.java | 57 ++++++++++++----------
1 file changed, 32 insertions(+), 25 deletions(-)
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 7a9a019d9..62299da4e 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
@@ -48,42 +48,45 @@ 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;
-@SuppressWarnings({"javadoc", "checkstyle:javadoctype"})
// CHECKSTYLE_OFF: LineLength
-/*
+/**
* XML format reporter writing to <code>TEST-<i>reportName</i>[-<i>suffix</i>].xml</code> file like written and read
* by Ant's <a href="http://ant.apache.org/manual/Tasks/junit.html"><code><junit></code></a> and
* <a href="http://ant.apache.org/manual/Tasks/junitreport.html"><code><junitreport></code></a> tasks,
* then supported by many tools like CI servers.
* <br>
- * <pre><?xml version="1.0" encoding="UTF-8"?>
- * <testsuite name="<i>suite name</i>" [group="<i>group</i>"] tests="<i>0</i>" failures="<i>0</i>" errors="<i>0</i>" skipped="<i>0</i>" time="<i>0,###.###</i>">
- * <properties>
- * <property name="<i>name</i>" value="<i>value</i>"/>
+ * <pre><?xml version="1.0" encoding="UTF-8"?>
+ * <testsuite name="<i>suite name</i>" [group="<i>group</i>"] tests="<i>0</i>" failures="<i>0</i>" errors="<i>0</i>" skipped="<i>0</i>" time="<i>{float}</i>">
+ * <properties>
+ * <property name="<i>name</i>" value="<i>value</i>"/>
* [...]
- * </properties>
- * <testcase time="<i>0,###.###</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]"/>
- * <testcase time="<i>0,###.###</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]">
- * <<b>error</b> message="<i>message</i>" type="<i>exception class name</i>"><i>stacktrace</i></error>
- * <system-out><i>system out content (present only if not empty)</i></system-out>
- * <system-err><i>system err content (present only if not empty)</i></system-err>
- * </testcase>
- * <testcase time="<i>0,###.###</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]">
- * <<b>failure</b> message="<i>message</i>" type="<i>exception class name</i>"><i>stacktrace</i></failure>
- * <system-out><i>system out content (present only if not empty)</i></system-out>
- * <system-err><i>system err content (present only if not empty)</i></system-err>
- * </testcase>
- * <testcase time="<i>0,###.###</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]">
- * <<b>skipped</b>/>
- * </testcase>
+ * </properties>
+ * <testcase time="<i>{float}</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]"/>
+ * <testcase time="<i>{float}</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]">
+ * <<b>error</b> message="<i>message</i>" type="<i>exception class name</i>"><i>stacktrace</i></error>
+ * <system-out><i>system out content (present only if not empty)</i></system-out>
+ * <system-err><i>system err content (present only if not empty)</i></system-err>
+ * </testcase>
+ * <testcase time="<i>{float}</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]">
+ * <<b>failure</b> message="<i>message</i>" type="<i>exception class name</i>"><i>stacktrace</i></failure>
+ * <system-out><i>system out content (present only if not empty)</i></system-out>
+ * <system-err><i>system err content (present only if not empty)</i></system-err>
+ * </testcase>
+ * <testcase time="<i>{float}</i>" name="<i>test name</i> [classname="<i>class name</i>"] [group="<i>group</i>"]">
+ * <<b>skipped</b>/>
+ * </testcase>
* [...]</pre>
*
* @author Kristian Rosenvold
- * @see <a href="http://wiki.apache.org/ant/Proposals/EnhancedTestReports">Ant's format enhancement proposal</a>
+ * @see <a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115528872">Ant's format enhancement proposal</a>
* (not yet implemented by Ant 1.8.2)
+ * @see <a href="https://github.com/apache/ant/blob/6f68fbdefad521741b37304cfdfc6d8646cf1839/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java">Ant's <code>XMLJUnitResultFormatter</code></a>
*/
-// todo this is no more stateless due to existence of testClassMethodRunHistoryMap since of 2.19.
+@SuppressWarnings({"javadoc", "checkstyle:javadoctype"})
+// TODO this is no more stateless due to existence of testClassMethodRunHistoryMap since of 2.19.
public class StatelessXmlReporter implements StatelessReportEventListener<WrappedReportEntry, TestSetStats> {
+ private static final float ONE_SECOND = 1000.0f;
+
private static final String XML_INDENT = " ";
private static final String XML_NL = "\n";
@@ -387,7 +390,9 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Wrappe
ppw.addAttribute("classname", extraEscapeAttribute(className));
}
- ppw.addAttribute("time", report.elapsedTimeAsString());
+ if (report.getElapsed() != null) {
+ ppw.addAttribute("time", String.valueOf(report.getElapsed() / ONE_SECOND));
+ }
}
private void createTestSuiteElement(XMLWriter ppw, WrappedReportEntry report, TestSetStats testSetStats)
@@ -407,7 +412,9 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Wrappe
ppw.addAttribute("group", report.getGroup());
}
- ppw.addAttribute("time", report.elapsedTimeAsString());
+ if (report.getElapsed() != null) {
+ ppw.addAttribute("time", String.valueOf(report.getElapsed() / ONE_SECOND));
+ }
ppw.addAttribute("tests", String.valueOf(testSetStats.getCompletedCount()));