You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2011/11/25 21:52:27 UTC

svn commit: r1206317 - in /maven/surefire/trunk: surefire-api/src/test/java/org/apache/maven/surefire/util/ surefire-integration-tests/src/test/resources/junit48-method-pattern/ surefire-providers/common-junit48/ surefire-providers/common-junit48/src/m...

Author: krosenvold
Date: Fri Nov 25 20:52:24 2011
New Revision: 1206317

URL: http://svn.apache.org/viewvc?rev=1206317&view=rev
Log:
[SUREFIRE-760] Method level filtering for JUnitCore provider

Removed:
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
Modified:
    maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java
    maven/surefire/trunk/surefire-integration-tests/src/test/resources/junit48-method-pattern/pom.xml
    maven/surefire/trunk/surefire-providers/common-junit48/pom.xml
    maven/surefire/trunk/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/pom.xml
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java

Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java Fri Nov 25 20:52:24 2011
@@ -19,10 +19,10 @@ package org.apache.maven.surefire.util;
  * under the License.
  */
 
-import junit.framework.TestCase;
-
 import java.util.Arrays;
 
+import junit.framework.TestCase;
+
 /*
  * @author Kristian Rosenvold
  */

Modified: maven/surefire/trunk/surefire-integration-tests/src/test/resources/junit48-method-pattern/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/resources/junit48-method-pattern/pom.xml?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/resources/junit48-method-pattern/pom.xml (original)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/resources/junit48-method-pattern/pom.xml Fri Nov 25 20:52:24 2011
@@ -59,6 +59,13 @@
         <configuration>
           <test>BasicTest#testSuccess*</test>
         </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.maven.surefire</groupId>
+            <artifactId>surefire-junit47</artifactId>
+            <version>${surefire.version}</version>
+          </dependency>
+        </dependencies>
       </plugin>
     </plugins>
   </build>

Modified: maven/surefire/trunk/surefire-providers/common-junit48/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/common-junit48/pom.xml?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/common-junit48/pom.xml (original)
+++ maven/surefire/trunk/surefire-providers/common-junit48/pom.xml Fri Nov 25 20:52:24 2011
@@ -43,11 +43,42 @@
       <artifactId>common-junit4</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+    </dependency>
+
  </dependencies>
 
   <build>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <minimizeJar>true</minimizeJar>
+              <artifactSet>
+                <includes>
+                  <include>org.codehaus.plexus:plexus-utils</include>
+                </includes>
+              </artifactSet>
+              <relocations>
+                <relocation>
+                  <pattern>org.codehaus.plexus.util</pattern>
+                  <shadedPattern>org.apache.maven.surefire.commonjunit48.org.codehaus.plexus.util</shadedPattern>
+                </relocation>
+              </relocations>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+     <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <configuration>
           <source>1.5</source>

Modified: maven/surefire/trunk/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java (original)
+++ maven/surefire/trunk/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java Fri Nov 25 20:52:24 2011
@@ -22,6 +22,7 @@ package org.apache.maven.surefire.common
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
+import org.codehaus.plexus.util.SelectorUtils;
 
 import org.junit.experimental.categories.Categories;
 import org.junit.runner.Description;
@@ -67,6 +68,49 @@ public class FilterFactory
         return included;
     }
 
+    public Filter createMethodFilter( String requestedTestMethod )
+    {
+        return new MethodFilter( requestedTestMethod );
+    }
+
+    private static class MethodFilter
+        extends Filter
+    {
+        private final String requestedTestMethod;
+
+        public MethodFilter( String requestedTestMethod )
+        {
+            this.requestedTestMethod = requestedTestMethod;
+        }
+
+        @Override
+        public boolean shouldRun( Description description )
+        {
+            for ( Description o : description.getChildren() )
+            {
+                if (isDescriptionMatch( o )){
+                    return true;
+                }
+                
+            }
+            return isDescriptionMatch( description );
+        }
+
+        private boolean isDescriptionMatch( Description description )
+        {
+            return description.getMethodName() != null && SelectorUtils.match( requestedTestMethod,
+                                                                               description.getMethodName() );
+        }
+
+
+        @Override
+        public String describe()
+        {
+            return "By method"  + requestedTestMethod;
+        }
+    }
+
+
     private static class CombinedCategoryFilter
         extends Filter
     {

Modified: maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java Fri Nov 25 20:52:24 2011
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.junit4
  * under the License.
  */
 
+import java.lang.reflect.Method;
 import java.util.Iterator;
 import java.util.List;
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
@@ -41,7 +42,11 @@ import org.apache.maven.surefire.util.Di
 import org.apache.maven.surefire.util.RunOrderCalculator;
 import org.apache.maven.surefire.util.TestsToRun;
 
+import org.apache.maven.surefire.util.internal.StringUtils;
+import org.codehaus.plexus.util.SelectorUtils;
+import org.junit.runner.Request;
 import org.junit.runner.Result;
+import org.junit.runner.Runner;
 import org.junit.runner.notification.RunNotifier;
 
 /**
@@ -125,7 +130,7 @@ public class JUnit4Provider
 
         try
         {
-            JUnit4TestSet.execute( clazz, listeners, this.requestedTestMethod );
+            execute( clazz, listeners, this.requestedTestMethod );
         }
         catch ( TestSetFailedException e )
         {
@@ -205,4 +210,27 @@ public class JUnit4Provider
         final String property = System.getProperty( "surefire.junit4.upgradecheck" );
         return property != null;
     }
+
+
+    private static void execute( Class testClass, RunNotifier fNotifier, String testMethod )
+        throws TestSetFailedException
+    {
+        if ( !StringUtils.isBlank( testMethod ) )
+        {
+            Method[] methods = testClass.getMethods();
+            for (int i = 0,size = methods.length;i<size;i++)
+            {
+                if ( SelectorUtils.match( testMethod, methods[i].getName() ) )
+                {
+                    Runner junitTestRunner = Request.method( testClass, methods[i].getName() ).getRunner();
+                    junitTestRunner.run( fNotifier );
+                }
+            }
+            return;
+        }
+
+        Runner junitTestRunner = Request.aClass( testClass ).getRunner();
+
+        junitTestRunner.run( fNotifier );
+    }
 }

Modified: maven/surefire/trunk/surefire-providers/surefire-junit47/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit47/pom.xml?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit47/pom.xml (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit47/pom.xml Fri Nov 25 20:52:24 2011
@@ -39,10 +39,6 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-all</artifactId>
       <version>1.7</version>

Modified: maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java?rev=1206317&r1=1206316&r2=1206317&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java Fri Nov 25 20:52:24 2011
@@ -43,6 +43,7 @@ import org.apache.maven.surefire.util.Di
 import org.apache.maven.surefire.util.RunOrderCalculator;
 import org.apache.maven.surefire.util.ScannerFilter;
 import org.apache.maven.surefire.util.TestsToRun;
+import org.apache.maven.surefire.util.internal.StringUtils;
 
 import org.junit.runner.Description;
 import org.junit.runner.manipulation.Filter;
@@ -74,6 +75,8 @@ public class JUnitCoreProvider
 
     private RunOrderCalculator runOrderCalculator;
 
+    private String requestedTestMethod;
+
     public JUnitCoreProvider( ProviderParameters providerParameters )
     {
         this.providerParameters = providerParameters;
@@ -82,6 +85,8 @@ public class JUnitCoreProvider
         this.runOrderCalculator = providerParameters.getRunOrderCalculator();
         this.jUnitCoreParameters = new JUnitCoreParameters( providerParameters.getProviderProperties() );
         this.scannerFilter = new JUnit4TestChecker( testClassLoader );
+        this.requestedTestMethod = providerParameters.getTestRequest().getRequestedTestMethod();
+
         customRunListeners = JUnit4RunListenerFactory.
             createCustomListeners( providerParameters.getProviderProperties().getProperty( "listener" ) );
         jUnit48Reflector = new JUnit48Reflector( testClassLoader );
@@ -169,7 +174,10 @@ public class JUnitCoreProvider
 
     private Filter createJUnit48Filter()
     {
-        return new FilterFactory( testClassLoader ).createGroupFilter( providerParameters.getProviderProperties() );
+        final FilterFactory filterFactory = new FilterFactory( testClassLoader );
+        return isMethodFilterSpecified() ?
+            filterFactory.createMethodFilter( requestedTestMethod ) :
+            filterFactory.createGroupFilter( providerParameters.getProviderProperties() );
     }
 
     private TestsToRun scanClassPath()
@@ -177,4 +185,9 @@ public class JUnitCoreProvider
         final TestsToRun scanned = directoryScanner.locateTestClasses( testClassLoader, scannerFilter );
         return  runOrderCalculator.orderTestClasses(  scanned );
     }
+
+    private boolean isMethodFilterSpecified()
+    {
+        return !StringUtils.isBlank( requestedTestMethod );
+    }
 }