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 2010/12/13 22:23:53 UTC

svn commit: r1045380 - in /maven/surefire/trunk: surefire-api/src/main/java/org/apache/maven/surefire/util/ surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/

Author: krosenvold
Date: Mon Dec 13 21:23:53 2010
New Revision: 1045380

URL: http://svn.apache.org/viewvc?rev=1045380&view=rev
Log:
[SUREFIRE-662] Fixed for TestNG

Modified:
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultDirectoryScanner.java
    maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
    maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultDirectoryScanner.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultDirectoryScanner.java?rev=1045380&r1=1045379&r2=1045380&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultDirectoryScanner.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultDirectoryScanner.java Mon Dec 13 21:23:53 2010
@@ -68,7 +68,7 @@ public class DefaultDirectoryScanner
 
             Class testClass = loadClass( classLoader, className );
 
-            if ( scannerFilter.accept( testClass ) )
+            if ( scannerFilter == null || scannerFilter.accept( testClass ) )
             {
                 result.add( testClass );
             }

Modified: maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java?rev=1045380&r1=1045379&r2=1045380&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java Mon Dec 13 21:23:53 2010
@@ -19,24 +19,26 @@ package org.apache.maven.surefire.testng
  * under the License.
  */
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.surefire.report.DefaultReportEntry;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.ReporterException;
+import org.apache.maven.surefire.report.ReporterFactory;
 import org.apache.maven.surefire.report.ReporterManager;
 import org.apache.maven.surefire.report.ReporterManagerFactory;
 import org.apache.maven.surefire.suite.AbstractDirectoryTestSuite;
 import org.apache.maven.surefire.testset.SurefireTestSet;
 import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.apache.maven.surefire.util.TestsToRun;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 
 /**
  * Test suite for TestNG based on a directory of Java test classes. Can also execute JUnit tests.
@@ -86,6 +88,94 @@ public class TestNGDirectoryTestSuite
         return new TestNGTestSet( testClass );
     }
 
+    public void execute( TestsToRun testsToRun, ReporterFactory reporterManagerFactory )
+        throws ReporterException, TestSetFailedException
+    {
+        ReporterManager reporterManager = (ReporterManager) reporterManagerFactory.createReporter();
+        startTestSuite( reporterManager, this );
+
+        if ( testsToRun.size() == 0 )
+        {
+            return;
+        }
+
+        if ( testsToRun.size() > 1 )
+        {
+            executeMulti( testsToRun, reporterManagerFactory );
+            return;
+        }
+        TestNGExecutor.run( new Class[]{ (Class) testsToRun.iterator().next() }, this.testSourceDirectory, this.options,
+                            this.version, this.classifier, reporterManager, this, reportsDirectory );
+
+        finishTestSuite( reporterManager, this );
+    }
+
+    public void executeMulti( TestsToRun testsToRun, ReporterFactory reporterManagerFactory )
+        throws ReporterException, TestSetFailedException
+    {
+        Class junitTest;
+        try
+        {
+            junitTest = Class.forName( "junit.framework.Test" );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            junitTest = null;
+        }
+
+        List testNgTestClasses = new ArrayList();
+        List junitTestClasses = new ArrayList();
+        for ( Iterator it = testsToRun.iterator(); it.hasNext(); )
+        {
+            Class testSet = (Class) it.next();
+            Class c = testSet;
+            if ( junitTest != null && junitTest.isAssignableFrom( c ) )
+            {
+                junitTestClasses.add( c );
+            }
+            else
+            {
+                testNgTestClasses.add( c );
+            }
+        }
+
+        File testNgReportsDirectory = reportsDirectory, junitReportsDirectory = reportsDirectory;
+
+        if ( junitTestClasses.size() > 0 && testNgTestClasses.size() > 0 )
+        {
+            testNgReportsDirectory = new File( reportsDirectory, "testng-native-results" );
+            junitReportsDirectory = new File( reportsDirectory, "testng-junit-results" );
+        }
+
+        ReporterManager reporterManager =
+            new SynchronizedReporterManager( (ReporterManager) reporterManagerFactory.createReporter() );
+        startTestSuite( reporterManager, this );
+
+        Class[] testClasses = (Class[]) testNgTestClasses.toArray( new Class[0] );
+
+        TestNGExecutor.run( testClasses, this.testSourceDirectory, this.options, this.version, this.classifier,
+                            reporterManager, this, testNgReportsDirectory );
+
+        if ( junitTestClasses.size() > 0 )
+        {
+            testClasses = (Class[]) junitTestClasses.toArray( new Class[0] );
+
+            Map junitOptions = new HashMap();
+            for ( Iterator it = this.options.keySet().iterator(); it.hasNext(); )
+            {
+                Object key = it.next();
+                junitOptions.put( key, options.get( key ) );
+            }
+
+            junitOptions.put( "junit", Boolean.TRUE );
+
+            TestNGExecutor.run( testClasses, this.testSourceDirectory, junitOptions, this.version, this.classifier,
+                                reporterManager, this, junitReportsDirectory );
+        }
+
+        finishTestSuite( reporterManager, this );
+    }
+
     // single class test
     public void execute( String testSetName, ReporterManagerFactory reporterManagerFactory, ClassLoader classLoader )
         throws ReporterException, TestSetFailedException
@@ -110,6 +200,7 @@ public class TestNGDirectoryTestSuite
         finishTestSuite( reporterManager, this );
     }
 
+    // todo: Delete as soon as we build surefire itself with 2.7
     public void execute( ReporterManagerFactory reporterManagerFactory, ClassLoader classLoader )
         throws ReporterException, TestSetFailedException
     {

Modified: maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java?rev=1045380&r1=1045379&r2=1045380&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java Mon Dec 13 21:23:53 2010
@@ -26,11 +26,12 @@ import org.apache.maven.surefire.report.
 import org.apache.maven.surefire.report.ReporterFactory;
 import org.apache.maven.surefire.report.ReporterManagerFactory;
 import org.apache.maven.surefire.suite.RunResult;
-import org.apache.maven.surefire.suite.SurefireTestSuite;
 import org.apache.maven.surefire.testset.DirectoryScannerParameters;
 import org.apache.maven.surefire.testset.TestArtifactInfo;
 import org.apache.maven.surefire.testset.TestRequest;
 import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.apache.maven.surefire.util.DirectoryScanner;
+import org.apache.maven.surefire.util.TestsToRun;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -56,8 +57,12 @@ public class TestNGProvider
 
     private final DirectoryScannerParameters directoryScannerParameters;
 
+    private final DirectoryScanner directoryScanner;
+
     private final TestRequest testRequest;
 
+    private TestsToRun testsToRun;
+
     private final File basedir;
 
     public TestNGProvider( ProviderParameters booterParameters )
@@ -70,6 +75,7 @@ public class TestNGProvider
         basedir = directoryScannerParameters != null ? directoryScannerParameters.getTestClassesDirectory() : null;
         testArtifactInfo = booterParameters.getTestArtifactInfo();
         reporterConfiguration = booterParameters.getReporterConfiguration();
+        this.directoryScanner = booterParameters.getDirectoryScanner();
     }
 
     public Boolean isRunnable()
@@ -80,15 +86,29 @@ public class TestNGProvider
     public RunResult invoke( Object forkTestSet )
         throws TestSetFailedException, ReporterException
     {
-        SurefireTestSuite suite = getActiveSuite();
-        suite.locateTestSets( testClassLoader );
-        if ( forkTestSet != null && testRequest == null )
+
+        if ( isTestNGXmlTestSuite( testRequest ) )
         {
-            suite.execute( (String) forkTestSet, (ReporterManagerFactory) reporterFactory, testClassLoader );
+            TestNGXmlTestSuite testNGXmlTestSuite = getXmlSuite();
+            testNGXmlTestSuite.locateTestSets( testClassLoader );
+            if ( forkTestSet != null && testRequest == null )
+            {
+                testNGXmlTestSuite.execute( (String) forkTestSet, (ReporterManagerFactory) reporterFactory,
+                                            testClassLoader );
+            }
+            else
+            {
+                testNGXmlTestSuite.execute( (ReporterManagerFactory) reporterFactory, testClassLoader );
+            }
         }
         else
         {
-            suite.execute( (ReporterManagerFactory) reporterFactory, testClassLoader );
+            if ( testsToRun == null )
+            {
+                testsToRun = forkTestSet == null ? scanClassPath() : TestsToRun.fromClass( (Class) forkTestSet );
+            }
+            TestNGDirectoryTestSuite suite = getDirectorySuite();
+            suite.execute( testsToRun, reporterFactory );
         }
 
         return reporterFactory.close();
@@ -119,20 +139,30 @@ public class TestNGProvider
     }
 
 
-    public SurefireTestSuite getActiveSuite()
-    {
-        return isTestNGXmlTestSuite( testRequest ) ? (SurefireTestSuite) getXmlSuite() : getDirectorySuite();
-    }
-
     public Iterator getSuites()
     {
-        try
+        if ( isTestNGXmlTestSuite( testRequest ) )
         {
-            return getActiveSuite().locateTestSets( testClassLoader ).keySet().iterator();
+            try
+            {
+                return getXmlSuite().locateTestSets( testClassLoader ).keySet().iterator();
+            }
+            catch ( TestSetFailedException e )
+            {
+                throw new RuntimeException( e );
+            }
         }
-        catch ( TestSetFailedException e )
+        else
         {
-            throw new RuntimeException( e );
+            testsToRun = scanClassPath();
+            return testsToRun.iterator();
         }
     }
+
+    private TestsToRun scanClassPath()
+    {
+        return directoryScanner.locateTestClasses( testClassLoader, null );
+    }
+
+
 }