This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git


The following commit(s) were added to refs/heads/master by this push:
     new d24adb4cd [SUREFIRE-2277] RunResult#getFlakes() is lost during 
serialisation/deserialisation to/from failsafe-summary.xml
d24adb4cd is described below

commit d24adb4cd702253fa3bf1799e6f067c61d78d75f
Author: Bing Xu <b...@atlassian.com>
AuthorDate: Thu Oct 10 09:40:53 2024 +1100

    [SUREFIRE-2277] RunResult#getFlakes() is lost during 
serialisation/deserialisation to/from failsafe-summary.xml
    
    This closes #790
---
 .../failsafe/util/FailsafeSummaryXmlUtils.java     |  6 +++
 .../maven/plugin/failsafe/RunResultTest.java       | 48 ++++++++++++++++++++++
 .../src/site/resources/xsd/failsafe-summary.xsd    |  1 +
 .../apache/maven/surefire/api/suite/RunResult.java |  4 ++
 4 files changed, 59 insertions(+)

diff --git 
a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/util/FailsafeSummaryXmlUtils.java
 
b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/util/FailsafeSummaryXmlUtils.java
index ed39cc90a..fac986b39 100644
--- 
a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/util/FailsafeSummaryXmlUtils.java
+++ 
b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/util/FailsafeSummaryXmlUtils.java
@@ -64,6 +64,7 @@ public final class FailsafeSummaryXmlUtils {
             + "    <errors>%d</errors>\n"
             + "    <failures>%d</failures>\n"
             + "    <skipped>%d</skipped>\n"
+            + "    <flakes>%d</flakes>\n"
             + "    %s\n"
             + "</failsafe-summary>";
 
@@ -84,12 +85,16 @@ public final class FailsafeSummaryXmlUtils {
             String skipped = xpath.evaluate("/failsafe-summary/skipped", root);
             String failureMessage = 
xpath.evaluate("/failsafe-summary/failureMessage", root);
             String timeout = xpath.evaluate("/failsafe-summary/@timeout", 
root);
+            String flakes = xpath.evaluate("/failsafe-summary/flakes", root);
 
             return new RunResult(
                     parseInt(completed),
                     parseInt(errors),
                     parseInt(failures),
                     parseInt(skipped),
+                    // FIXME Backwards compatability: to be replaced with 
parseInt in a future release
+                    // synchronize with 
maven-surefire-plugin/src/site/resources/xsd/failsafe-summary.xsd
+                    isBlank(flakes) ? 0 : parseInt(flakes),
                     isBlank(failureMessage) ? null : 
unescapeXml(failureMessage),
                     parseBoolean(timeout));
         }
@@ -107,6 +112,7 @@ public final class FailsafeSummaryXmlUtils {
                 fromRunResult.getErrors(),
                 fromRunResult.getFailures(),
                 fromRunResult.getSkipped(),
+                fromRunResult.getFlakes(),
                 msg);
 
         Files.write(
diff --git 
a/maven-failsafe-plugin/src/test/java/org/apache/maven/plugin/failsafe/RunResultTest.java
 
b/maven-failsafe-plugin/src/test/java/org/apache/maven/plugin/failsafe/RunResultTest.java
index 1bd4145bc..80d3eeaa4 100644
--- 
a/maven-failsafe-plugin/src/test/java/org/apache/maven/plugin/failsafe/RunResultTest.java
+++ 
b/maven-failsafe-plugin/src/test/java/org/apache/maven/plugin/failsafe/RunResultTest.java
@@ -19,12 +19,17 @@
 package org.apache.maven.plugin.failsafe;
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.StandardOpenOption;
+import java.util.Locale;
 
 import org.apache.maven.plugin.failsafe.util.FailsafeSummaryXmlUtils;
 import org.apache.maven.surefire.api.suite.RunResult;
 import org.apache.maven.surefire.api.util.SureFireFileManager;
 import org.junit.Test;
 
+import static java.lang.String.format;
 import static org.assertj.core.api.Assertions.assertThat;
 
 /**
@@ -64,6 +69,49 @@ public class RunResultTest {
         writeReadCheck(new RunResult(3, 2, 1, 0, null, true));
     }
 
+    @Test
+    public void testFlakes() throws Exception {
+        writeReadCheck(new RunResult(3, 2, 1, 0, 2, null, true));
+    }
+
+    @Test
+    public void testLegacyDeserialization() throws Exception {
+        File legacySummary = SureFireFileManager.createTempFile("failsafe", 
"test");
+        String legacyFailsafeSummaryXmlTemplate = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>\n"
+                + "<failsafe-summary 
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
+                + " 
xsi:noNamespaceSchemaLocation=\"https://maven.apache.org/surefire/maven-surefire-plugin/xsd/failsafe-summary.xsd\"";
+                + " result=\"%s\" timeout=\"%s\">\n"
+                + "    <completed>%d</completed>\n"
+                + "    <errors>%d</errors>\n"
+                + "    <failures>%d</failures>\n"
+                + "    <skipped>%d</skipped>\n"
+                + "    %s\n"
+                + "</failsafe-summary>";
+        String xml = format(Locale.ROOT, legacyFailsafeSummaryXmlTemplate, 0, 
false, 3, 2, 1, 0, "msg");
+        Files.write(
+                legacySummary.toPath(),
+                xml.getBytes(StandardCharsets.UTF_8),
+                StandardOpenOption.CREATE,
+                StandardOpenOption.TRUNCATE_EXISTING,
+                StandardOpenOption.WRITE);
+
+        // When the failsafe-summary.xml does not contain the <flakes> 
element, it should be considered as 0.
+        RunResult expected = new RunResult(3, 2, 1, 0, 0, null, false);
+        RunResult actual = FailsafeSummaryXmlUtils.toRunResult(legacySummary);
+
+        
assertThat(actual.getCompletedCount()).isEqualTo(expected.getCompletedCount());
+
+        assertThat(actual.getErrors()).isEqualTo(expected.getErrors());
+
+        assertThat(actual.getFailures()).isEqualTo(expected.getFailures());
+
+        assertThat(actual.getSkipped()).isEqualTo(expected.getSkipped());
+
+        assertThat(actual.getFlakes()).isEqualTo(expected.getFlakes());
+
+        assertThat(actual).isEqualTo(expected);
+    }
+
     @Test
     public void testAppendSerialization() throws Exception {
         RunResult simpleAggregate = getSimpleAggregate();
diff --git a/maven-surefire-plugin/src/site/resources/xsd/failsafe-summary.xsd 
b/maven-surefire-plugin/src/site/resources/xsd/failsafe-summary.xsd
index c412ec59e..b81565234 100644
--- a/maven-surefire-plugin/src/site/resources/xsd/failsafe-summary.xsd
+++ b/maven-surefire-plugin/src/site/resources/xsd/failsafe-summary.xsd
@@ -25,6 +25,7 @@
         <xsd:element name="errors" type="xsd:int"/>
         <xsd:element name="failures" type="xsd:int"/>
         <xsd:element name="skipped" type="xsd:int"/>
+        <xsd:element name="flakes" type="xsd:int" minOccurs="0"/>
         <xsd:element name="failureMessage" type="xsd:string" nillable="true"/>
       </xsd:sequence>
       <xsd:attribute name="result" type="errorType" use="optional"/>
diff --git 
a/surefire-api/src/main/java/org/apache/maven/surefire/api/suite/RunResult.java 
b/surefire-api/src/main/java/org/apache/maven/surefire/api/suite/RunResult.java
index 8be1df1d0..545e7ab44 100644
--- 
a/surefire-api/src/main/java/org/apache/maven/surefire/api/suite/RunResult.java
+++ 
b/surefire-api/src/main/java/org/apache/maven/surefire/api/suite/RunResult.java
@@ -202,6 +202,9 @@ public class RunResult {
         if (skipped != runResult.skipped) {
             return false;
         }
+        if (flakes != runResult.flakes) {
+            return false;
+        }
         if (timeout != runResult.timeout) {
             return false;
         }
@@ -218,6 +221,7 @@ public class RunResult {
         result = 31 * result + errors;
         result = 31 * result + failures;
         result = 31 * result + skipped;
+        result = 31 * result + flakes;
         result = 31 * result + (failure != null ? failure.hashCode() : 0);
         result = 31 * result + (timeout ? 1 : 0);
         return result;

Reply via email to