You are viewing a plain text version of this content. The canonical link for it is here.
Posted to surefire-commits@maven.apache.org by kr...@apache.org on 2011/04/19 20:48:26 UTC

svn commit: r1095165 - in /maven/surefire/trunk/surefire-providers/common-junit4/src: main/java/org/apache/maven/surefire/common/junit4/ main/java/org/apache/maven/surefire/junit4/ test/java/org/apache/maven/surefire/common/junit4/

Author: krosenvold
Date: Tue Apr 19 18:48:25 2011
New Revision: 1095165

URL: http://svn.apache.org/viewvc?rev=1095165&view=rev
Log:
[SUREFIRE-730] Fixed failure status

With unit test

Modified:
    maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java
    maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/junit4/MockReporter.java
    maven/surefire/trunk/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/JUnit4RunListenerTest.java

Modified: maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java?rev=1095165&r1=1095164&r2=1095165&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java (original)
+++ maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java Tue Apr 19 18:48:25 2011
@@ -42,7 +42,7 @@ public class JUnit4RunListener
      * This flag is set after a failure has occurred so that a <code>testSucceeded</code> event is not fired.
      * This is necessary because JUnit4 always fires a <code>testRunFinished</code> event-- even if there was a failure.
      */
-    private boolean failureFlag;
+    private ThreadLocal failureFlag = new InheritableThreadLocal();
 
     /**
      * Constructor.
@@ -76,7 +76,7 @@ public class JUnit4RunListener
         throws Exception
     {
         reporter.testStarting( createReportEntry( description ) );
-        failureFlag = false;
+        failureFlag.remove( );
     }
 
     /**
@@ -100,13 +100,13 @@ public class JUnit4RunListener
         {
             this.reporter.testError( report );
         }
-        failureFlag = true;
+        failureFlag.set( Boolean.TRUE );
     }
 
     public void testAssumptionFailure( Failure failure )
     {
         this.reporter.testAssumptionFailure( createReportEntry( failure.getDescription() ) );
-        failureFlag = true;
+        failureFlag.set( Boolean.TRUE );
     }
 
 
@@ -118,7 +118,8 @@ public class JUnit4RunListener
     public void testFinished( Description description )
         throws Exception
     {
-        if ( !failureFlag )
+        Boolean failure = (Boolean) failureFlag.get();
+        if ( failure == null )
         {
             reporter.testSucceeded( createReportEntry( description ) );
         }

Modified: maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/junit4/MockReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/junit4/MockReporter.java?rev=1095165&r1=1095164&r2=1095165&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/junit4/MockReporter.java (original)
+++ maven/surefire/trunk/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/junit4/MockReporter.java Tue Apr 19 18:48:25 2011
@@ -19,14 +19,13 @@ package org.apache.maven.surefire.junit4
  * under the License.
  */
 
-import org.apache.maven.surefire.report.RunListener;
-import org.apache.maven.surefire.report.ReportEntry;
-import org.apache.maven.surefire.report.ReporterConfiguration;
-import org.apache.maven.surefire.report.ReporterException;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.maven.surefire.report.ReportEntry;
+import org.apache.maven.surefire.report.ReporterConfiguration;
+import org.apache.maven.surefire.report.ReporterException;
+import org.apache.maven.surefire.report.RunListener;
 
 /** Internal use only */
 public class MockReporter
@@ -143,10 +142,12 @@ public class MockReporter
 
     public void testError( ReportEntry report )
     {
+        testError.incrementAndGet();
     }
 
     public void testFailed( ReportEntry report )
     {
+        testFailed.incrementAndGet();
     }
 
     public void testAssumptionFailure( ReportEntry report )

Modified: maven/surefire/trunk/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/JUnit4RunListenerTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/JUnit4RunListenerTest.java?rev=1095165&r1=1095164&r2=1095165&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/JUnit4RunListenerTest.java (original)
+++ maven/surefire/trunk/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/JUnit4RunListenerTest.java Tue Apr 19 18:48:25 2011
@@ -19,11 +19,15 @@ package org.apache.maven.surefire.common
  * under the License.
  */
 
+import java.util.concurrent.CountDownLatch;
 import org.apache.maven.surefire.junit4.MockReporter;
 
+import junit.framework.Assert;
 import org.junit.Test;
+import org.junit.runner.Description;
 import org.junit.runner.Request;
 import org.junit.runner.Runner;
+import org.junit.runner.notification.Failure;
 import org.junit.runner.notification.RunListener;
 import org.junit.runner.notification.RunNotifier;
 
@@ -44,6 +48,42 @@ public class JUnit4RunListenerTest
         junitTestRunner.run( runNotifier );
     }
 
+    @Test
+    public void testParallelInvocations()
+        throws Exception
+    {
+        final MockReporter reporter = new MockReporter();
+        final RunListener jUnit4TestSetReporter = new JUnit4RunListener( reporter );
+        final CountDownLatch countDownLatch = new CountDownLatch( 1 );
+        final Description testSomething = Description.createTestDescription( STest1.class, "testSomething" );
+        final Description testSomething2 = Description.createTestDescription( STest2.class, "testSomething2" );
+
+        jUnit4TestSetReporter.testStarted( testSomething );
+
+        new Thread(new Runnable(){
+            public void run()
+            {
+                try
+                {
+                    jUnit4TestSetReporter.testStarted(  testSomething2 );
+                    jUnit4TestSetReporter.testFailure( new Failure( testSomething2, new AssertionError( "Fud" ) ));
+                    jUnit4TestSetReporter.testFinished( testSomething2 );
+                    countDownLatch.countDown();
+                }
+                catch ( Exception e )
+                {
+                    throw new RuntimeException( e );
+                }
+            }
+        }).start();
+
+        countDownLatch.await();
+        jUnit4TestSetReporter.testFinished( testSomething );
+
+        Assert.assertEquals( "Failing tests", 1, reporter.getTestFailed() );
+        Assert.assertEquals( "Succeeded tests", 1, reporter.getTestSucceeded() );
+    }
+
 
     public static class STest1
     {