From 0987f798d0518e15335bd04da2db2eb53c548425 Mon Sep 17 00:00:00 2001 From: Michael Osipov Date: Fri, 19 May 2023 20:05:42 +0200 Subject: [PATCH] [SUREFIRE-2166] Use ChoiceFormat to selective render percentage and elapsed time in SurefireReportRenderer This closes #639 --- .../report/SurefireReportRenderer.java | 38 +++++++++---------- .../main/resources/surefire-report.properties | 6 +++ .../resources/surefire-report_de.properties | 1 + .../resources/surefire-report_sv.properties | 1 + .../surefire/report/Surefire597Test.java | 6 +-- .../report/SurefireReportMojoTest.java | 30 +++++++-------- 6 files changed, 43 insertions(+), 39 deletions(-) diff --git a/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java b/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java index 9cf0039a70..75ca805e28 100644 --- a/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java +++ b/maven-surefire-report-plugin/src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportRenderer.java @@ -19,7 +19,6 @@ package org.apache.maven.plugins.surefire.report; import java.io.File; -import java.text.NumberFormat; import java.util.List; import java.util.Locale; import java.util.Map; @@ -100,6 +99,16 @@ private String getI18nString(String section, String key) { return i18n.getString("surefire-report", locale, "report." + section + '.' + key); } + /** + * @param section The section. + * @param key The key to translate. + * @param args The args to pass to translated string. + * @return the translated key. + */ + private String formatI18nString(String section, String key, Object... args) { + return i18n.format("surefire-report", locale, "report." + section + '.' + key, args); + } + public void renderBody() { javaScript(javascriptToggleDisplayCode()); @@ -120,9 +129,6 @@ public void renderBody() { private void renderSectionSummary() { Map summary = parser.getSummary(testSuites); - NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); - NumberFormat percentFormat = NumberFormat.getPercentInstance(locale); - percentFormat.setMinimumFractionDigits(1); sink.section1(); sinkAnchor("Summary"); @@ -150,8 +156,8 @@ private void renderSectionSummary() { String.valueOf(summary.get("totalErrors")), String.valueOf(summary.get("totalFailures")), String.valueOf(summary.get("totalSkipped")), - percentFormat.format(summary.get("totalPercentage")), - numberFormat.format(summary.get("totalElapsedTime")) + " s" + formatI18nString("surefire", "value.successrate", summary.get("totalPercentage")), + formatI18nString("surefire", "value.time", summary.get("totalElapsedTime")) }); endTable(); @@ -171,10 +177,6 @@ private void renderSectionPackages() { return; } - NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); - NumberFormat percentFormat = NumberFormat.getPercentInstance(locale); - percentFormat.setMinimumFractionDigits(1); - sink.section1(); sinkAnchor("Package_List"); sink.sectionTitle1(); @@ -210,8 +212,8 @@ private void renderSectionPackages() { String.valueOf(packageSummary.get("totalErrors")), String.valueOf(packageSummary.get("totalFailures")), String.valueOf(packageSummary.get("totalSkipped")), - percentFormat.format(packageSummary.get("totalPercentage")), - numberFormat.format(packageSummary.get("totalElapsedTime")) + " s" + formatI18nString("surefire", "value.successrate", packageSummary.get("totalPercentage")), + formatI18nString("surefire", "value.time", packageSummary.get("totalElapsedTime")) }); } @@ -273,10 +275,6 @@ private void renderSectionPackages() { } private void renderSectionTestSuite(ReportTestSuite suite) { - NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); - NumberFormat percentFormat = NumberFormat.getPercentInstance(locale); - percentFormat.setMinimumFractionDigits(1); - sink.tableRow(); sink.tableCell(); @@ -310,9 +308,9 @@ private void renderSectionTestSuite(ReportTestSuite suite) { float percentage = parser.computePercentage( suite.getNumberOfTests(), suite.getNumberOfErrors(), suite.getNumberOfFailures(), suite.getNumberOfSkipped()); - tableCell(percentFormat.format(percentage)); + tableCell(formatI18nString("surefire", "value.successrate", percentage)); - tableCell(numberFormat.format(suite.getTimeElapsed()) + " s"); + tableCell(formatI18nString("surefire", "value.time", suite.getTimeElapsed())); sink.tableRow_(); } @@ -372,8 +370,6 @@ private void renderSectionTestCases() { } private void constructTestCaseSection(ReportTestCase testCase) { - NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); - sink.tableRow(); sink.tableCell(); @@ -427,7 +423,7 @@ private void constructTestCaseSection(ReportTestCase testCase) { sinkCellAnchor(testCase.getName(), "TC_" + toHtmlId(testCase.getFullName())); } - tableCell(numberFormat.format(testCase.getTime()) + " s"); + tableCell(formatI18nString("surefire", "value.time", testCase.getTime())); sink.tableRow_(); diff --git a/maven-surefire-report-plugin/src/main/resources/surefire-report.properties b/maven-surefire-report-plugin/src/main/resources/surefire-report.properties index 2b68fbb023..ba45d63066 100644 --- a/maven-surefire-report-plugin/src/main/resources/surefire-report.properties +++ b/maven-surefire-report-plugin/src/main/resources/surefire-report.properties @@ -35,6 +35,12 @@ report.surefire.label.testcases=Test Cases report.surefire.label.failuredetails=Failure Details report.surefire.text.note1=Note: failures are anticipated and checked for with assertions while errors are unanticipated. report.surefire.text.note2=Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. +report.surefire.value.successrate={0,choice,0#0%|0.0<{0,number,0.0%}|1#{0,number,0%}} +# Rationale: The idea is to always display four digits for visually consistent output +# Important: +# * Keep in sync with org.apache.maven.plugin.surefire.report.WrappedReportEntry +# * Needs to be copied into other bundles only if non-Latin script is used +report.surefire.value.time={0,choice,0#0|0.0<{0,number,0.000}|10#{0,number,0.00}|100#{0,number,0.0}|1000#{0,number,0}} s report.failsafe.name=Failsafe report.failsafe.description=Report on the integration test results of the project. diff --git a/maven-surefire-report-plugin/src/main/resources/surefire-report_de.properties b/maven-surefire-report-plugin/src/main/resources/surefire-report_de.properties index 2a3bb905e0..2867ac5d29 100644 --- a/maven-surefire-report-plugin/src/main/resources/surefire-report_de.properties +++ b/maven-surefire-report-plugin/src/main/resources/surefire-report_de.properties @@ -35,6 +35,7 @@ report.surefire.label.tests=Tests report.surefire.label.time =Zeit report.surefire.text.note1 =Hinweis: Fehlschl\u00E4ge werden erwartet und durch Behauptungen \u00FCberpr\u00FCft w\u00E4hrend Fehler unerwartet sind. report.surefire.text.note2 =Hinweis: Die Paketstatistiken werden nicht rekursiv berechnet, es werden lediglich die Ergebnisse aller enthaltenen Tests aufsummiert. +report.surefire.value.successrate={0,choice,0#0 %|0.0<{0,number,0.0 %}|1#{0,number,0 %}} report.failsafe.name=Failsafe report.failsafe.description=Bericht \u00FCber die Integrationstestresultate des Projekts. diff --git a/maven-surefire-report-plugin/src/main/resources/surefire-report_sv.properties b/maven-surefire-report-plugin/src/main/resources/surefire-report_sv.properties index 3b60a603c1..d1b69679b5 100644 --- a/maven-surefire-report-plugin/src/main/resources/surefire-report_sv.properties +++ b/maven-surefire-report-plugin/src/main/resources/surefire-report_sv.properties @@ -35,6 +35,7 @@ report.surefire.label.testcases=Testfall report.surefire.label.failuredetails=Detaljer om misslyckade tester report.surefire.text.note1=Notera: misslyckade tester \u00e4r f\u00f6rv\u00e4ntade och har kontrollerats med assertions medan felaktiga tester \u00e4r ov\u00e4ntade. report.surefire.text.note2=Notera: paketstatistiken ber\u00e4knas inte rekursivt, den summerar bara alla testsviters antal. +report.surefire.value.successrate={0,choice,0#0 %|0.0<{0,number,0.0 %}|1#{0,number,0 %}} report.failsafe.name=Failsafe report.failsafe.description=Rapport om integration testresultaten f\u00f6r projektet. 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 f1a45fdc20..598c916785 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 @@ -66,7 +66,7 @@ public void testCorruptedTestCaseFailureWithMissingErrorTypeAndMessage() throws + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s" + "" + ""))); @@ -87,7 +87,7 @@ public void testCorruptedTestCaseFailureWithMissingErrorTypeAndMessage() throws + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( xml, @@ -108,7 +108,7 @@ public void testCorruptedTestCaseFailureWithMissingErrorTypeAndMessage() throws + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( xml, 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 1b2634aaf5..8dab21e862 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 @@ -193,7 +193,7 @@ public void testSurefireReportSingleError() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( @@ -204,7 +204,7 @@ public void testSurefireReportSingleError() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( htmlContent, @@ -219,7 +219,7 @@ public void testSurefireReportSingleError() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat(htmlContent, containsString(">surefire.MyTest:13")); @@ -281,7 +281,7 @@ public void testSurefireReportNestedClassTrimStackTrace() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( @@ -292,7 +292,7 @@ public void testSurefireReportNestedClassTrimStackTrace() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( htmlContent, @@ -307,7 +307,7 @@ public void testSurefireReportNestedClassTrimStackTrace() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat(htmlContent, containsString(">surefire.MyTest:13")); @@ -344,7 +344,7 @@ public void testSurefireReportNestedClass() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( @@ -355,7 +355,7 @@ public void testSurefireReportNestedClass() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( htmlContent, @@ -370,7 +370,7 @@ public void testSurefireReportNestedClass() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat(htmlContent, containsString(">surefire.MyTest:13")); @@ -432,7 +432,7 @@ public void testSurefireReportEnclosedTrimStackTrace() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( @@ -443,7 +443,7 @@ public void testSurefireReportEnclosedTrimStackTrace() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( htmlContent, @@ -458,7 +458,7 @@ public void testSurefireReportEnclosedTrimStackTrace() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat(htmlContent, containsString(">surefire.MyTest$A:45")); @@ -495,7 +495,7 @@ public void testSurefireReportEnclosed() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( @@ -506,7 +506,7 @@ public void testSurefireReportEnclosed() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat( htmlContent, @@ -521,7 +521,7 @@ public void testSurefireReportEnclosed() throws Exception { + "1\n" + "0\n" + "0\n" - + "0.0%\n" + + "0%\n" + "0 s"))); assertThat(htmlContent, containsString(">surefire.MyTest$A:45"));