Updated Branches:
  refs/heads/master eedf23978 -> d342273c3

[SUREFIRE-839] Tests not matching categories would fail build

Fixed with IT


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/d342273c
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/d342273c
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/d342273c

Branch: refs/heads/master
Commit: d342273c30c0ec8aa5ba58603b1d9ceea5039278
Parents: eedf239
Author: Kristian Rosenvold <kristian.rosenv...@gmail.com>
Authored: Wed Dec 5 22:36:19 2012 +0100
Committer: Kristian Rosenvold <kristian.rosenv...@gmail.com>
Committed: Wed Dec 5 22:36:19 2012 +0100

----------------------------------------------------------------------
 surefire-integration-tests/pom.xml                 |   13 ++-
 .../surefire/its/fixture/SurefireLauncher.java     |    8 +-
 .../jiras/Surefire839TestWithoutCategoriesIT.java  |   33 ++++++
 .../src/test/resources/junit48-categories/pom.xml  |   10 +-
 .../surefire/junitcore/JUnitCoreProvider.java      |   83 ++++++++++-----
 .../maven/surefire/junitcore/JUnitCoreWrapper.java |   23 ++---
 6 files changed, 117 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/pom.xml
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/pom.xml 
b/surefire-integration-tests/pom.xml
index 053281c..adc5cc4 100644
--- a/surefire-integration-tests/pom.xml
+++ b/surefire-integration-tests/pom.xml
@@ -18,7 +18,8 @@
   ~ under the License.
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
@@ -36,7 +37,7 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <it.settings.showPasswords>false</it.settings.showPasswords>
     <testng.version>5.7</testng.version>
-    <surefire.threadcount>4</surefire.threadcount>
+    <surefire.threadcount>5</surefire.threadcount>
     <mavenHomeUsed>${maven.home}</mavenHomeUsed>
     <useInterpolatedSettings>false</useInterpolatedSettings>
   </properties>
@@ -77,7 +78,7 @@
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-shared-utils</artifactId>
-  </dependency>
+    </dependency>
   </dependencies>
 
   <build>
@@ -90,13 +91,15 @@
             <threadCount>1</threadCount>
             <perCoreThreadCount>false</perCoreThreadCount>
 
-              <!-- Pass current surefire version to the main suite so that it 
-->
+            <!-- Pass current surefire version to the main suite so that it -->
             <!-- can forward to all integration test projects. SUREFIRE-513 -->
             <systemPropertyVariables>
               <surefire.version>${project.version}</surefire.version>
               <testng.version>${testng.version}</testng.version>
               <maven.home>${mavenHomeUsed}</maven.home>
-              
<maven.settings.file>${project.basedir}/../surefire-setup-integration-tests/target/private/it-settings.xml</maven.settings.file>
+              <maven.settings.file>
+                
${project.basedir}/../surefire-setup-integration-tests/target/private/it-settings.xml
+              </maven.settings.file>
               
<maven.repo.local>${project.basedir}/../surefire-setup-integration-tests/target/it-repo</maven.repo.local>
               <maven.test.tmpdir>${project.build.directory}</maven.test.tmpdir>
               
<user.localRepository>${settings.localRepository}</user.localRepository>

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
 
b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
index 36b5c53..0c0e1da 100755
--- 
a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
+++ 
b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java
@@ -108,13 +108,14 @@ public class SurefireLauncher
         File testDir = new File( tempDir, resourcePath );
         FileUtils.deleteDirectory( testDir );
 
-        return ResourceExtractor.extractResourceToDestination( cl, 
resourcePath, tempDir, true );
+        File file = ResourceExtractor.extractResourceToDestination( cl, 
resourcePath, tempDir, true );
+        return file.getCanonicalFile();
     }
 
     private File getUnpackDir()
     {
         String tempDirPath = System.getProperty( "maven.test.tmpdir", 
System.getProperty( "java.io.tmpdir" ) );
-        return new File( tempDirPath, testClass.getSimpleName() + 
File.separator + getTestMethodName()  + suffix);
+        return new File( tempDirPath, testClass.getSimpleName() + 
File.separator + getTestMethodName() + suffix );
     }
 
     String getTestMethodName()
@@ -123,7 +124,8 @@ public class SurefireLauncher
         StackTraceElement[] stackTrace = getStackTraceElements();
         StackTraceElement topInTestClass = null;
         topInTestClass = findTopElemenent( stackTrace, testClass );
-        if (topInTestClass == null){
+        if ( topInTestClass == null )
+        {
             // Look in superclass...
             topInTestClass = findTopElemenent( stackTrace, 
testClass.getSuperclass() );
         }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java
 
b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java
new file mode 100755
index 0000000..6c03349
--- /dev/null
+++ 
b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java
@@ -0,0 +1,33 @@
+package org.apache.maven.surefire.its.jiras;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+
+import org.junit.Test;
+
+public class Surefire839TestWithoutCategoriesIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void classWithoutCategory()
+    {
+        unpack( "junit48-categories" ).setJUnitVersion( "4.11" 
).executeTest().verifyErrorFree( 2 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml
----------------------------------------------------------------------
diff --git 
a/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml 
b/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml
index 802f4d6..02914f8 100644
--- a/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml
+++ b/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml
@@ -30,16 +30,16 @@
 
 
   <properties>
-    <junitVersion>4.8.1</junitVersion>
-      <groups>junit4.CategoryA,junit4.CategoryB</groups>
-      <excludedGroups></excludedGroups>
+    <junit.version>4.8.1</junit.version>
+    <groups>junit4.CategoryA,junit4.CategoryB</groups>
+    <excludedGroups></excludedGroups>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>${junitVersion}</version>
+      <version>${junit.version}</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -60,7 +60,7 @@
         <version>${surefire.version}</version>
         <configuration>
           <groups>${groups}</groups>
-         <excludedGroups>${excludedGroups}</excludedGroups>
+          <excludedGroups>${excludedGroups}</excludedGroups>
         </configuration>
         <dependencies>
           <dependency>

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
index afe6888..81ea524 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
@@ -103,6 +103,22 @@ public class JUnitCoreProvider
         return testsToRun.iterator();
     }
 
+    private boolean containsSomethingRunnable( TestsToRun testsToRun, Filter 
filter )
+    {
+        if ( filter == null )
+        {
+            return true;
+        }
+        for ( Class o : testsToRun.getLocatedClasses() )
+        {
+            if ( canRunClass( filter, o ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public RunResult invoke( Object forkTestSet )
         throws TestSetFailedException, ReporterException
     {
@@ -116,32 +132,39 @@ public class JUnitCoreProvider
 
         if ( testsToRun == null )
         {
-            if (forkTestSet instanceof TestsToRun)
+            if ( forkTestSet instanceof TestsToRun )
             {
                 testsToRun = (TestsToRun) forkTestSet;
             }
-            else if (forkTestSet instanceof Class)
+            else if ( forkTestSet instanceof Class )
             {
-                testsToRun = TestsToRun.fromClass( (Class) forkTestSet );
-            } else
+                Class theClass = (Class) forkTestSet;
+                testsToRun = TestsToRun.fromClass( theClass );
+            }
+            else
             {
                 testsToRun = getSuitesAsList( filter );
             }
         }
 
-        final Map<String, TestSet> testSetMap = new ConcurrentHashMap<String, 
TestSet>();
+        if ( containsSomethingRunnable( testsToRun, filter ) )
+        {
 
-        RunListener listener = ConcurrentReporterManager.createInstance( 
testSetMap, reporterFactory,
-                                                                         
jUnitCoreParameters.isParallelClasses(),
-                                                                         
jUnitCoreParameters.isParallelBoth(),
-                                                                         
consoleLogger );
+            final Map<String, TestSet> testSetMap = new 
ConcurrentHashMap<String, TestSet>();
 
-        ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) listener );
+            RunListener listener = ConcurrentReporterManager.createInstance( 
testSetMap, reporterFactory,
+                                                                             
jUnitCoreParameters.isParallelClasses(),
+                                                                             
jUnitCoreParameters.isParallelBoth(),
+                                                                             
consoleLogger );
 
-        org.junit.runner.notification.RunListener jUnit4RunListener = new 
JUnitCoreRunListener( listener, testSetMap );
-        customRunListeners.add( 0, jUnit4RunListener );
+            ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) 
listener );
 
-        JUnitCoreWrapper.execute( testsToRun, jUnitCoreParameters, 
customRunListeners, filter );
+            org.junit.runner.notification.RunListener jUnit4RunListener =
+                new JUnitCoreRunListener( listener, testSetMap );
+            customRunListeners.add( 0, jUnit4RunListener );
+
+            JUnitCoreWrapper.execute( testsToRun, jUnitCoreParameters, 
customRunListeners, filter );
+        }
         return reporterFactory.close();
     }
 
@@ -159,27 +182,35 @@ public class JUnitCoreProvider
         while ( it.hasNext() )
         {
             Class<?> clazz = it.next();
-            boolean isCategoryAnnotatedClass = 
jUnit48Reflector.isCategoryAnnotationPresent( clazz );
-            Description d = Description.createSuiteDescription( clazz );
-            if ( filter.shouldRun( d ) )
+            if ( canRunClass( filter, clazz ) )
             {
                 res.add( clazz );
             }
-            else
+        }
+        return new TestsToRun( res );
+    }
+
+    private boolean canRunClass( Filter filter, Class<?> clazz )
+    {
+        boolean isCategoryAnnotatedClass = 
jUnit48Reflector.isCategoryAnnotationPresent( clazz );
+        Description d = Description.createSuiteDescription( clazz );
+        if ( filter.shouldRun( d ) )
+        {
+            return true;
+        }
+        else
+        {
+            for ( Method method : clazz.getMethods() )
             {
-                for ( Method method : clazz.getMethods() )
+                final Description testDescription =
+                    Description.createTestDescription( clazz, 
method.getName(), method.getAnnotations() );
+                if ( filter.shouldRun( testDescription ) )
                 {
-                    final Description testDescription =
-                        Description.createTestDescription( clazz, 
method.getName(), method.getAnnotations() );
-                    if ( filter.shouldRun( testDescription ) )
-                    {
-                        res.add( clazz );
-                        break;
-                    }
+                    return true;
                 }
             }
         }
-        return new TestsToRun( res );
+        return false;
     }
 
     private Filter createJUnit48Filter()

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java
index bfd4dff..aeda523 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java
@@ -19,13 +19,12 @@ package org.apache.maven.surefire.junitcore;
  * under the License.
  */
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
-
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
 import org.apache.maven.surefire.testset.TestSetFailedException;
 import org.apache.maven.surefire.util.TestsToRun;
+
 import org.junit.runner.Computer;
 import org.junit.runner.JUnitCore;
 import org.junit.runner.Request;
@@ -54,18 +53,14 @@ class JUnitCoreWrapper
 
         try
         {
-               Iterator classIter = testsToRun.iterator();
-               while (classIter.hasNext()) 
-               {
-                       Request req = Request.classes( computer, new Class[]{ 
(Class) classIter.next() });
-                       if ( filter != null )
-                       {
-                           req = req.filterWith( filter );
-                       }
-       
-                   final Result run = junitCore.run( req );
-                   JUnit4RunListener.rethrowAnyTestMechanismFailures( run );
-               }
+            Request req = Request.classes( computer, 
testsToRun.getLocatedClasses() );
+            if ( filter != null )
+            {
+                req = req.filterWith( filter );
+            }
+
+            final Result run = junitCore.run( req );
+            JUnit4RunListener.rethrowAnyTestMechanismFailures( run );
         }
         finally
         {

Reply via email to