Author: dfabulich
Date: Mon Nov 26 02:19:50 2007
New Revision: 598205

URL: http://svn.apache.org/viewvc?rev=598205&view=rev
Log:
[SUREFIRE-337] Provide support for running JUnit and TestNG tests together

Modified:
    
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
    maven/surefire/trunk/surefire-providers/surefire-testng/pom.xml
    
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/TestNGReporter.java
    
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java

Modified: 
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java?rev=598205&r1=598204&r2=598205&view=diff
==============================================================================
--- 
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
 (original)
+++ 
maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
 Mon Nov 26 02:19:50 2007
@@ -41,7 +41,7 @@
 public abstract class AbstractDirectoryTestSuite
     implements SurefireTestSuite
 {
-    protected ResourceBundle bundle = ResourceBundle.getBundle( 
Surefire.SUREFIRE_BUNDLE_NAME );
+    protected static ResourceBundle bundle = ResourceBundle.getBundle( 
Surefire.SUREFIRE_BUNDLE_NAME );
 
     private static final String FS = System.getProperty( "file.separator" );
 

Modified: maven/surefire/trunk/surefire-providers/surefire-testng/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/pom.xml?rev=598205&r1=598204&r2=598205&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-testng/pom.xml (original)
+++ maven/surefire/trunk/surefire-providers/surefire-testng/pom.xml Mon Nov 26 
02:19:50 2007
@@ -33,6 +33,11 @@
       <artifactId>maven-artifact</artifactId>
       <version>2.0</version>
     </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+    </dependency>
   </dependencies>
   <!-- TODO: do we include both? Or just 1.5? No need for profile -->
   <profiles>

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=598205&r1=598204&r2=598205&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 Nov 26 02:19:50 2007
@@ -19,21 +19,23 @@
  * 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.ReportEntry;
 import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.ReporterManager;
 import org.apache.maven.surefire.suite.AbstractDirectoryTestSuite;
 import org.apache.maven.surefire.testset.SurefireTestSet;
 import org.apache.maven.surefire.testset.TestSetFailedException;
 
-import java.io.File;
-import java.util.ArrayList;
-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.
  *
@@ -106,15 +108,77 @@
             throw new IllegalStateException( "You must call locateTestSets 
before calling execute" );
         }
 
-        Class[] testClasses = new Class[testSets.size()];
-        int i = 0;
+        List testNgTestClasses = new ArrayList();
+        List junitTestClasses = new ArrayList();
         for ( Iterator it = testSets.values().iterator(); it.hasNext(); )
         {
             SurefireTestSet testSet = (SurefireTestSet) it.next();
-            testClasses[i++] = testSet.getTestClass();
+            Class c = testSet.getTestClass();
+            if (junit.framework.Test.class.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");
+        }
+        
+        startTestSuite( reporterManager, this );
+        
+        Class[] testClasses = (Class[]) testNgTestClasses.toArray( new 
Class[0] );
 
         TestNGExecutor.run( testClasses, this.testSourceDirectory, 
this.options, this.version, 
-                            this.classifier, reporterManager, this, 
reportsDirectory );
+                            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 );
+    }
+
+    public static void startTestSuite( ReporterManager reporterManager, Object 
suite )
+    {
+        String rawString = bundle.getString( "testSetStarting" );
+
+        ReportEntry report = new ReportEntry( suite, "TestSuite", rawString );
+
+        try
+        {
+            reporterManager.testSetStarting( report );
+        }
+        catch ( ReporterException e )
+        {
+            // TODO: remove this exception from the report manager
+        }
+    }
+    
+    public static void finishTestSuite( ReporterManager reporterManager, 
Object suite )
+    {
+        String rawString = bundle.getString( "testSetCompletedNormally" );
+
+        ReportEntry report =
+            new ReportEntry( suite, "TestSuite", rawString );
+
+        reporterManager.testSetCompleted( report );
+
+        reporterManager.reset();
     }
 }

Modified: 
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGReporter.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGReporter.java?rev=598205&r1=598204&r2=598205&view=diff
==============================================================================
--- 
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGReporter.java
 (original)
+++ 
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGReporter.java
 Mon Nov 26 02:19:50 2007
@@ -141,36 +141,12 @@
 
     public void onStart( ISuite suite )
     {
-        String rawString = bundle.getString( "testSetStarting" );
         
-        String[] includedGroups = (String[]) 
suite.getMethodsByGroups().keySet().toArray( new String[0] );
-
-        String group = groupString( includedGroups, suite.getName() );
-
-        ReportEntry report = new ReportEntry( source, suite.getName(), group, 
rawString );
-
-        try
-        {
-            reportManager.testSetStarting( report );
-        }
-        catch ( ReporterException e )
-        {
-            // TODO: remove this exception from the report manager
-        }
     }
     
     public void onFinish( ISuite suite )
     {
-        String rawString = bundle.getString( "testSetCompletedNormally" );
-
-        String[] includedGroups = (String[]) 
suite.getMethodsByGroups().keySet().toArray( new String[0] );
-        
-        ReportEntry report =
-            new ReportEntry( source, suite.getName(), groupString( 
includedGroups, null ), rawString );
-
-        reportManager.testSetCompleted( report );
 
-        reportManager.reset();
     }
 
     /**

Modified: 
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java?rev=598205&r1=598204&r2=598205&view=diff
==============================================================================
--- 
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
 (original)
+++ 
maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
 Mon Nov 26 02:19:50 2007
@@ -88,9 +88,10 @@
         {
             throw new IllegalStateException( "You must call locateTestSets 
before calling execute" );
         }
-
+        TestNGDirectoryTestSuite.startTestSuite( reporterManager, this );
         TestNGExecutor.run( this.suiteFilePaths, this.testSourceDirectory, 
this.options, this.version, 
                             this.classifier, reporterManager, this, 
reportsDirectory );
+        TestNGDirectoryTestSuite.finishTestSuite( reporterManager, this );
     }
 
     public void execute( String testSetName, ReporterManager reporterManager, 
ClassLoader classLoader )


Reply via email to