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

tibordigana 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 1ae1bb3b5 Revert "Properly work with test failures caused during 
beforeAll phase (#3194)"
1ae1bb3b5 is described below

commit 1ae1bb3b5e66ea3f0084667c22cea51d1c1c4ba9
Author: Jakub Stejskal <[email protected]>
AuthorDate: Wed Oct 29 10:47:45 2025 +0100

    Revert "Properly work with test failures caused during beforeAll phase 
(#3194)"
    
    This reverts commit 4a47a1c44f3abe18164cc3a5d1287f440bb40684.
    
    Signed-off-by: Jakub Stejskal <[email protected]>
---
 .../surefire/report/DefaultReporterFactory.java    | 86 ----------------------
 .../report/DefaultReporterFactoryTest.java         | 46 ++----------
 2 files changed, 6 insertions(+), 126 deletions(-)

diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
index 520febab2..f95c061ab 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
@@ -72,9 +72,6 @@ public class DefaultReporterFactory implements 
ReporterFactory, ReportsMerger {
 
     private RunStatistics globalStats = new RunStatistics();
 
-    // from "<testclass>.<testmethod>" -> statistics about all the runs for 
success tests
-    private Map<String, List<TestMethodStats>> successTests;
-
     // from "<testclass>.<testmethod>" -> statistics about all the runs for 
flaky tests
     private Map<String, List<TestMethodStats>> flakyTests;
 
@@ -246,7 +243,6 @@ static TestResultType 
getTestResultType(List<ReportEntryType> reportEntries, int
      */
     private void mergeTestHistoryResult() {
         globalStats = new RunStatistics();
-        successTests = new TreeMap<>();
         flakyTests = new TreeMap<>();
         failedTests = new TreeMap<>();
         errorTests = new TreeMap<>();
@@ -269,32 +265,10 @@ private void mergeTestHistoryResult() {
 
         // Update globalStatistics by iterating through mergedTestHistoryResult
         int completedCount = 0, skipped = 0;
-        Map<String, List<TestMethodStats>> beforeAllFailures = new HashMap<>();
 
         for (Map.Entry<String, List<TestMethodStats>> entry : 
mergedTestHistoryResult.entrySet()) {
             List<TestMethodStats> testMethodStats = entry.getValue();
             String testClassMethodName = entry.getKey();
-
-            // Handle @BeforeAll failures (null method names)
-            if (testClassMethodName == null) {
-                for (TestMethodStats methodStats : testMethodStats) {
-                    String className = 
extractClassNameFromStackTrace(methodStats);
-                    if (className != null) {
-                        if (beforeAllFailures.containsKey(className)) {
-                            List<TestMethodStats> previousMethodStats = 
beforeAllFailures.get(className);
-                            previousMethodStats.add(methodStats);
-                            beforeAllFailures.put(className, 
previousMethodStats);
-                        } else {
-                            List<TestMethodStats> initMethodStats = new 
ArrayList<>();
-                            initMethodStats.add(methodStats);
-                            beforeAllFailures.put(className, initMethodStats);
-                        }
-                    }
-                }
-                // Skip normal processing of @BeforeAll failures because it 
needs special care
-                continue;
-            }
-
             completedCount++;
 
             List<ReportEntryType> resultTypes = new ArrayList<>();
@@ -312,16 +286,6 @@ private void mergeTestHistoryResult() {
                         }
                     }
                     completedCount += successCount - 1;
-                    successTests.put(testClassMethodName, testMethodStats);
-
-                    // If current test belong to class that failed during 
beforeAll store that info to proper log info
-                    String className = 
extractClassNameFromMethodName(testClassMethodName);
-                    if (beforeAllFailures.containsKey(className)) {
-                        List<TestMethodStats> previousMethodStats = 
beforeAllFailures.get(className);
-                        previousMethodStats.addAll(testMethodStats);
-                        beforeAllFailures.put(className, previousMethodStats);
-                    }
-
                     break;
                 case SKIPPED:
                     skipped++;
@@ -340,21 +304,6 @@ private void mergeTestHistoryResult() {
             }
         }
 
-        // Process @BeforeAll failures after we know which classes have 
successful tests
-        for (Map.Entry<String, List<TestMethodStats>> entry : 
beforeAllFailures.entrySet()) {
-            String className = entry.getKey();
-            List<TestMethodStats> testMethodStats = entry.getValue();
-            String classNameKey = className + ".<beforeAll>";
-
-            if (reportConfiguration.getRerunFailingTestsCount() > 0
-                    && testMethodStats.stream().anyMatch(methodStats -> 
methodStats.getTestClassMethodName() != null)) {
-                flakyTests.put(classNameKey, testMethodStats);
-            } else {
-                errorTests.put(classNameKey, testMethodStats);
-                completedCount++;
-            }
-        }
-
         globalStats.set(completedCount, errorTests.size(), failedTests.size(), 
skipped, flakyTests.size());
     }
 
@@ -413,41 +362,6 @@ boolean printTestFailures(TestResultType type) {
         return printed;
     }
 
-    /**
-     * Extract class name from test class method name like 
"com.example.TestClass.methodName"
-     */
-    private static String extractClassNameFromMethodName(String 
testClassMethodName) {
-        if (testClassMethodName == null || testClassMethodName.isEmpty()) {
-            return null;
-        }
-        int lastDotIndex = testClassMethodName.lastIndexOf('.');
-        if (lastDotIndex > 0) {
-            return testClassMethodName.substring(0, lastDotIndex);
-        }
-        return null;
-    }
-
-    /**
-     * Extract class name from stack trace when method name is null (e.g., 
@BeforeAll failures)
-     */
-    private static String extractClassNameFromStackTrace(TestMethodStats 
stats) {
-        if (stats.getStackTraceWriter() == null) {
-            return null;
-        }
-        String stackTrace = 
stats.getStackTraceWriter().smartTrimmedStackTrace();
-        if (stackTrace == null || stackTrace.isEmpty()) {
-            return null;
-        }
-
-        // Strip everything after the first whitespace character
-        int firstWhitespace = stackTrace.indexOf(' ');
-        if (firstWhitespace > 0) {
-            stackTrace = stackTrace.substring(0, firstWhitespace);
-        }
-
-        return extractClassNameFromMethodName(stackTrace);
-    }
-
     // Describe the result of a given test
     enum TestResultType {
         ERROR("Errors: "),
diff --git 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
index 76479f815..86c23c82a 100644
--- 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
+++ 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
@@ -68,12 +68,6 @@ public class DefaultReporterFactoryTest extends TestCase {
 
     private static final String ERROR = "error";
 
-    private static final String TEST_BEFORE_ALL_FLAKE = 
"com.example.FlakyClass";
-
-    private static final String TEST_BEFORE_ALL_ERROR = 
"com.example.AlwaysFailClass";
-
-    private static final String TEST_ERROR_SUFFIX = "-- Time elapsed: 292.2 s 
<<< ERROR!";
-
     public void testMergeTestHistoryResult() throws Exception {
         MessageUtils.setColorEnabled(false);
         File target = new File(System.getProperty("user.dir"), "target");
@@ -103,7 +97,7 @@ public void testMergeTestHistoryResult() throws Exception {
 
         DefaultReporterFactory factory = new 
DefaultReporterFactory(reportConfig, reporter);
 
-        // First run, four tests failed and one passed, plus @BeforeAll failure
+        // First run, four tests failed and one passed
         Queue<TestMethodStats> firstRunStats = new ArrayDeque<>();
         firstRunStats.add(new TestMethodStats(TEST_ONE, ReportEntryType.ERROR, 
new DummyStackTraceWriter(ERROR)));
         firstRunStats.add(new TestMethodStats(TEST_TWO, ReportEntryType.ERROR, 
new DummyStackTraceWriter(ERROR)));
@@ -112,11 +106,6 @@ public void testMergeTestHistoryResult() throws Exception {
         firstRunStats.add(
                 new TestMethodStats(TEST_FOUR, ReportEntryType.FAILURE, new 
DummyStackTraceWriter(ASSERTION_FAIL)));
         firstRunStats.add(new TestMethodStats(TEST_FIVE, 
ReportEntryType.SUCCESS, null));
-        // @BeforeAll failure for a test class that will eventually succeed
-        firstRunStats.add(new TestMethodStats(
-                null,
-                ReportEntryType.ERROR,
-                new DummyStackTraceWriter(TEST_BEFORE_ALL_FLAKE + ".null " + 
TEST_ERROR_SUFFIX)));
 
         // Second run, two tests passed
         Queue<TestMethodStats> secondRunStats = new ArrayDeque<>();
@@ -125,21 +114,11 @@ public void testMergeTestHistoryResult() throws Exception 
{
         secondRunStats.add(new TestMethodStats(TEST_TWO, 
ReportEntryType.SUCCESS, null));
         secondRunStats.add(new TestMethodStats(TEST_THREE, 
ReportEntryType.ERROR, new DummyStackTraceWriter(ERROR)));
         secondRunStats.add(new TestMethodStats(TEST_FOUR, 
ReportEntryType.SUCCESS, null));
-        // Successful test from the class that had @BeforeAll failure
-        secondRunStats.add(new TestMethodStats(TEST_BEFORE_ALL_FLAKE + 
".testSucceed", ReportEntryType.SUCCESS, null));
-        // @BeforeAll failure for a different class that will stay as error
-        secondRunStats.add(new TestMethodStats(
-                null,
-                ReportEntryType.ERROR,
-                new DummyStackTraceWriter(TEST_BEFORE_ALL_ERROR + ".null " + 
TEST_ERROR_SUFFIX)));
 
         // Third run, another test passed
         Queue<TestMethodStats> thirdRunStats = new ArrayDeque<>();
         thirdRunStats.add(new TestMethodStats(TEST_ONE, 
ReportEntryType.SUCCESS, null));
         thirdRunStats.add(new TestMethodStats(TEST_THREE, 
ReportEntryType.ERROR, new DummyStackTraceWriter(ERROR)));
-        // Another @BeforeAll failure for the always-failing class
-        thirdRunStats.add(new TestMethodStats(
-                null, ReportEntryType.ERROR, new 
DummyStackTraceWriter(TEST_BEFORE_ALL_ERROR + ".null")));
 
         TestSetRunListener firstRunListener = mock(TestSetRunListener.class);
         TestSetRunListener secondRunListener = mock(TestSetRunListener.class);
@@ -155,21 +134,17 @@ public void testMergeTestHistoryResult() throws Exception 
{
         invokeMethod(factory, "mergeTestHistoryResult");
         RunStatistics mergedStatistics = factory.getGlobalRunStatistics();
 
-        // TEST_THREE and AlwaysFailClass.null are failing tests, regular 
tests + FlakyClass.null are flaky
-        assertEquals(7, mergedStatistics.getCompletedCount());
-        assertEquals(2, mergedStatistics.getErrors());
+        // Only TEST_THREE is a failing test, other three are flaky tests
+        assertEquals(5, mergedStatistics.getCompletedCount());
+        assertEquals(1, mergedStatistics.getErrors());
         assertEquals(0, mergedStatistics.getFailures());
-        assertEquals(4, mergedStatistics.getFlakes());
+        assertEquals(3, mergedStatistics.getFlakes());
         assertEquals(0, mergedStatistics.getSkipped());
 
         // Now test the result will be printed out correctly
         factory.printTestFailures(TestResultType.FLAKE);
         String[] expectedFlakeOutput = {
             "Flakes: ",
-            TEST_BEFORE_ALL_FLAKE + ".<beforeAll>",
-            "  Run 1: " + TEST_BEFORE_ALL_FLAKE + ".null " + TEST_ERROR_SUFFIX,
-            "  Run 2: PASS",
-            "",
             TEST_FOUR,
             "  Run 1: " + ASSERTION_FAIL,
             "  Run 2: PASS",
@@ -189,16 +164,7 @@ public void testMergeTestHistoryResult() throws Exception {
         reporter.reset();
         factory.printTestFailures(TestResultType.ERROR);
         String[] expectedFailureOutput = {
-            "Errors: ",
-            TEST_BEFORE_ALL_ERROR + ".<beforeAll>",
-            "  Run 1: " + TEST_BEFORE_ALL_ERROR + ".null " + TEST_ERROR_SUFFIX,
-            "  Run 2: " + TEST_BEFORE_ALL_ERROR + ".null",
-            "",
-            TEST_THREE,
-            "  Run 1: " + ASSERTION_FAIL,
-            "  Run 2: " + ERROR,
-            "  Run 3: " + ERROR,
-            ""
+            "Errors: ", TEST_THREE, "  Run 1: " + ASSERTION_FAIL, "  Run 2: " 
+ ERROR, "  Run 3: " + ERROR, ""
         };
         assertEquals(asList(expectedFailureOutput), reporter.getMessages());
 

Reply via email to