Author: jvanzyl
Date: Sat Jan  6 10:08:15 2007
New Revision: 493522

URL: http://svn.apache.org/viewvc?view=rev&rev=493522
Log:
SUREFIRE-31 Tom did some work to get the patch going and its working for him, 
he'll work on some tests but we'll get
            this out for people

Added:
    maven/surefire/trunk/surefire-providers/surefire-junit4/
    maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml   (with 
props)
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java
   (with props)
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java
   (with props)
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
   (with props)
    
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
   (with props)
Modified:
    
maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
    maven/surefire/trunk/surefire-providers/pom.xml

Modified: 
maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java?view=diff&rev=493522&r1=493521&r2=493522
==============================================================================
--- 
maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
 (original)
+++ 
maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
 Sat Jan  6 10:08:15 2007
@@ -498,6 +498,10 @@
                 // different one since its based on the source level, not the 
JVM. Prune using the filter.
                 addProvider( surefireBooter, "surefire-testng", 
surefireArtifact.getBaseVersion(), testNgArtifact );
             }
+            else if (junitArtifact != null && 
junitArtifact.getBaseVersion().startsWith("4"))
+            {
+                addProvider( surefireBooter, "surefire-junit4", 
surefireArtifact.getBaseVersion(), null );
+            }
             else
             {
                 // add the JUnit provider as default - it doesn't require 
JUnit to be present,
@@ -586,9 +590,19 @@
             }
             else
             {
+               String junitDirectoryTestSuite;
+               if (junitArtifact.getBaseVersion().startsWith("4")) 
+               {
+                       junitDirectoryTestSuite = 
"org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite";
+               } 
+               else
+               {
+                       junitDirectoryTestSuite = 
"org.apache.maven.surefire.junit.JUnitDirectoryTestSuite";
+               }
+                       
                 // fall back to JUnit, which also contains POJO support. Also 
it can run
                 // classes compiled against JUnit since it has a dependency on 
JUnit itself.
-                surefireBooter.addTestSuite( 
"org.apache.maven.surefire.junit.JUnitDirectoryTestSuite",
+                surefireBooter.addTestSuite( junitDirectoryTestSuite,
                                              new 
Object[]{testClassesDirectory, includes, excludes} );
             }
         }

Modified: maven/surefire/trunk/surefire-providers/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/pom.xml?view=diff&rev=493522&r1=493521&r2=493522
==============================================================================
--- maven/surefire/trunk/surefire-providers/pom.xml (original)
+++ maven/surefire/trunk/surefire-providers/pom.xml Sat Jan  6 10:08:15 2007
@@ -27,6 +27,7 @@
   <name>SureFire Providers</name>
   <modules>
     <module>surefire-junit</module>
+    <module>surefire-junit4</module>
     <module>surefire-testng</module>
   </modules>
   <dependencies>

Added: maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml?view=auto&rev=493522
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml (added)
+++ maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml Sat Jan  6 
10:08:15 2007
@@ -0,0 +1,33 @@
+<!--
+  ~ Copyright 2001-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed 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.
+  -->
+
+<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/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven.surefire</groupId>
+    <artifactId>surefire-providers</artifactId>
+    <version>2.1-SNAPSHOT</version>
+  </parent>
+  <artifactId>surefire-junit4</artifactId>
+  <name>SureFire JUnit4 Runner</name>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.0</version>
+    </dependency>
+  </dependencies>
+</project>

Propchange: maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/surefire/trunk/surefire-providers/surefire-junit4/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java?view=auto&rev=493522
==============================================================================
--- 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java
 (added)
+++ 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java
 Sat Jan  6 10:08:15 2007
@@ -0,0 +1,40 @@
+package org.apache.maven.surefire.junit4;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.apache.maven.surefire.suite.AbstractDirectoryTestSuite;
+import org.apache.maven.surefire.testset.SurefireTestSet;
+import org.apache.maven.surefire.testset.TestSetFailedException;
+
+/**
+ * Test suite for JUnit4 based on a directory of Java test classes. This is
+ * capable of running both JUnit3 and JUnit4 test classes (I think).
+ * 
+ * @author Karl M. Davis
+ */
+public class JUnit4DirectoryTestSuite extends AbstractDirectoryTestSuite
+{
+       /**
+        * Constructor.
+        */
+       public JUnit4DirectoryTestSuite(File basedir, ArrayList includes,
+                       ArrayList excludes)
+       {
+               super(basedir, includes, excludes);
+       }
+
+       /**
+        * This method will be called for each class to be run as a test. It 
returns
+        * a surefire test set that will later be executed.
+        * 
+        * @see 
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite#createTestSet(java.lang.Class,
+        *      java.lang.ClassLoader)
+        */
+       protected SurefireTestSet createTestSet(Class testClass,
+                       ClassLoader classLoader) throws TestSetFailedException
+       {
+               return new JUnit4TestSet(testClass);
+       }
+
+}

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4DirectoryTestSuite.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java?view=auto&rev=493522
==============================================================================
--- 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java
 (added)
+++ 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java
 Sat Jan  6 10:08:15 2007
@@ -0,0 +1,58 @@
+package org.apache.maven.surefire.junit4;
+
+import org.apache.maven.surefire.report.StackTraceWriter;
+import org.junit.runner.notification.Failure;
+
+/**
+ * Writes out a specific [EMAIL PROTECTED] 
org.junit.runner.notification.Failure} for
+ * surefire as a stacktrace.
+ * 
+ * @author Karl M. Davis
+ */
+public class JUnit4StackTraceWriter implements StackTraceWriter
+{
+       // Member Variables
+       private Failure junitFailure;
+
+       /**
+        * Constructor.
+        * 
+        * @param junitFailure
+        *            the [EMAIL PROTECTED] Failure} that this will be 
operating on
+        */
+       public JUnit4StackTraceWriter(Failure junitFailure)
+       {
+               this.junitFailure = junitFailure;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.apache.maven.surefire.report.StackTraceWriter#writeTraceToString()
+        */
+       public String writeTraceToString()
+       {
+               return junitFailure.getTrace();
+       }
+
+       /**
+        * At the moment, returns the same as [EMAIL PROTECTED] 
#writeTraceToString()}.
+        * 
+        * @see 
org.apache.maven.surefire.report.StackTraceWriter#writeTrimmedTraceToString()
+        */
+       public String writeTrimmedTraceToString()
+       {
+               return junitFailure.getTrace();
+       }
+
+       /**
+        * Returns the exception associated with this failure.
+        * 
+        * @see org.apache.maven.surefire.report.StackTraceWriter#getThrowable()
+        */
+       public Throwable getThrowable()
+       {
+               return junitFailure.getException();
+       }
+
+}

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4StackTraceWriter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java?view=auto&rev=493522
==============================================================================
--- 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
 (added)
+++ 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
 Sat Jan  6 10:08:15 2007
@@ -0,0 +1,59 @@
+package org.apache.maven.surefire.junit4;
+
+import org.apache.maven.surefire.report.ReporterManager;
+import org.apache.maven.surefire.testset.AbstractTestSet;
+import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.junit.runner.Request;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunListener;
+import org.junit.runner.notification.RunNotifier;
+
+public class JUnit4TestSet extends AbstractTestSet
+{
+       // Member Variables
+       private Runner junitTestRunner;
+
+       /**
+        * Constructor.
+        * 
+        * @param testClass the class to be run as a test
+        */
+       protected JUnit4TestSet(Class testClass)
+       {
+               super(testClass);
+               
+               junitTestRunner = Request.aClass(testClass).getRunner();
+       }
+
+       /**
+        * Actually runs the test and adds the tests results to the 
<code>reportManager</code>.
+        * 
+        * @see 
org.apache.maven.surefire.testset.SurefireTestSet#execute(org.apache.maven.surefire.report.ReporterManager,
 java.lang.ClassLoader)
+        */
+       public void execute(ReporterManager reportManager, ClassLoader loader)
+                       throws TestSetFailedException
+       {
+               RunNotifier fNotifier = new RunNotifier();
+               RunListener listener = new JUnit4TestSetReporter(this, 
reportManager);
+               fNotifier.addListener(listener);
+               
+               try
+               {
+                       junitTestRunner.run(fNotifier);
+               }
+               finally
+               {
+                       fNotifier.removeListener(listener);
+               }
+       }
+
+       /**
+        * Returns the number of tests to be run in this class.
+        * 
+        * @see org.apache.maven.surefire.testset.SurefireTestSet#getTestCount()
+        */
+       public int getTestCount() throws TestSetFailedException
+       {
+               return junitTestRunner.testCount();
+       }
+}

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSet.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java?view=auto&rev=493522
==============================================================================
--- 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
 (added)
+++ 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
 Sat Jan  6 10:08:15 2007
@@ -0,0 +1,129 @@
+package org.apache.maven.surefire.junit4;
+
+import java.util.ResourceBundle;
+
+import org.apache.maven.surefire.Surefire;
+import org.apache.maven.surefire.report.ReportEntry;
+import org.apache.maven.surefire.report.ReporterManager;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunListener;
+
+public class JUnit4TestSetReporter extends RunListener
+{
+       // Constants
+    private static ResourceBundle bundle = ResourceBundle.getBundle( 
Surefire.SUREFIRE_BUNDLE_NAME );
+
+       // Member Variables
+       private JUnit4TestSet testSet;
+       private ReporterManager reportMgr;
+       /**
+        * 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;
+
+       /**
+        * Constructor.
+        * 
+        * @param testSet
+        *            the specific test set that this will report on as it is
+        *            executed
+        * @param reportManager
+        *            the report manager to log testing events to
+        */
+       JUnit4TestSetReporter(JUnit4TestSet testSet, ReporterManager 
reportManager)
+       {
+               this.testSet = testSet;
+               this.reportMgr = reportManager;
+       }
+
+       /**
+        * Called right before any tests from a specific class are run.
+        * 
+        * @see 
org.junit.runner.notification.RunListener#testRunStarted(org.junit.runner.Description)
+        */
+       public void testRunStarted(Description description) throws Exception
+       {
+        String rawString = bundle.getString( "testSetStarting" );
+        ReportEntry report = new ReportEntry(testSet, testSet.getName(), 
rawString);
+
+        this.reportMgr.testSetStarting(report);
+       }
+       
+       /**
+        * Called right after all tests from a specific class are run.
+        * 
+        * @see 
org.junit.runner.notification.RunListener#testRunFinished(org.junit.runner.Result)
+        */
+       public void testRunFinished(Result result) throws Exception
+       {
+        String rawString = bundle.getString( "testSetCompletedNormally" );
+        ReportEntry report = new ReportEntry(testSet, testSet.getName(), 
rawString);
+
+        this.reportMgr.testSetCompleted(report);
+        this.reportMgr.reset();
+       }
+       
+       /**
+        * Called when a specific test has been skipped (for whatever reason).
+        * 
+        * @see 
org.junit.runner.notification.RunListener#testIgnored(org.junit.runner.Description)
+        */
+       public void testIgnored(Description description) throws Exception
+       {
+        String rawString = bundle.getString( "testSkipped" );
+        ReportEntry report = new ReportEntry(testSet, 
description.getDisplayName(), rawString);
+
+        this.reportMgr.testSkipped(report);
+       }
+       
+       /**
+        * Called when a specific test has started.
+        * 
+        * @see 
org.junit.runner.notification.RunListener#testStarted(org.junit.runner.Description)
+        */
+       public void testStarted(Description description) throws Exception
+       {
+        String rawString = bundle.getString( "testStarting" );
+        ReportEntry report = new ReportEntry(testSet, 
description.getDisplayName(), rawString);
+
+        this.reportMgr.testStarting(report);
+
+               this.failureFlag = false;
+       }
+       
+       /**
+        * Called when a specific test has failed.
+        * 
+        * @see 
org.junit.runner.notification.RunListener#testFailure(org.junit.runner.notification.Failure)
+        */
+       public void testFailure(Failure failure) throws Exception
+       {
+        String rawString = bundle.getString( "executeException" );
+        ReportEntry report = new ReportEntry(testSet, failure.getTestHeader(), 
rawString, new JUnit4StackTraceWriter(failure));
+
+        if(failure.getException() instanceof AssertionError)
+               this.reportMgr.testFailed(report);
+        else
+               this.reportMgr.testError(report);
+        
+        failureFlag = true;
+       }
+       
+       /**
+        * Called after a specific test has finished.
+        * 
+        * @see 
org.junit.runner.notification.RunListener#testFinished(org.junit.runner.Description)
+        */
+       public void testFinished(Description description) throws Exception
+       {
+               if(failureFlag == false)
+               {
+               String rawString = bundle.getString( "testSuccessful" );
+               ReportEntry report = new ReportEntry(testSet, 
description.getDisplayName(), rawString);
+       
+               this.reportMgr.testSucceeded(report);
+               }
+       }
+}

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"


Reply via email to