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"