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/11 14:28:40 UTC

svn commit: r1044651 [1/2] - in /maven/surefire/trunk: maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/ maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ maven-surefire-common/src/test/java/org/apac...

Author: krosenvold
Date: Sat Dec 11 13:28:38 2010
New Revision: 1044651

URL: http://svn.apache.org/viewvc?rev=1044651&view=rev
Log:
o Extracted interfaces for the reporter function

Added:
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/DefaultReportEntry.java
      - copied, changed from r1044155, maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/RunReporter.java
      - copied, changed from r1044155, maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireConfigurationException.java   (with props)
Removed:
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManagerFactory2.java
Modified:
    maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
    maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingStreamConsumerTest.java
    maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/AbstractOutputConsumerTestCase.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/BaseProviderFactory.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/BriefFileReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/MulticastingReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterConfiguration.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManagerFactory.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
    maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/PojoTestSet.java
    maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTestCase.java
    maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java
    maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java
    maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
    maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/TestListenerInvocationHandler.java
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
    maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ClassesParallelRunListener.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ConcurrentReportingRunListener.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/LogicalStream.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/MethodsParallelRunListener.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestSet.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/ConcurrentReportingRunListenerTest.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/MavenSurefireJUnit47RunnerTestCase.java
    maven/surefire/trunk/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/MockReporter.java
    maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/SynchronizedReporterManager.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
    maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGReporter.java

Modified: maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java (original)
+++ maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java Sat Dec 11 13:28:38 2010
@@ -821,20 +821,14 @@ public abstract class AbstractSurefireMo
     private List getReporters( boolean forking )
     {
         List reports = new ArrayList();
-        if ( isUseFile() )
+        final String consoleReporter = getConsoleReporter( forking );
+        if ( consoleReporter != null )
         {
-            if ( isPrintSummary() )
-            {
-                if ( forking )
-                {
-                    reports.add( ForkingConsoleReporter.class.getName() );
-                }
-                else
-                {
-                    reports.add( ConsoleReporter.class.getName() );
-                }
-            }
+            reports.add( consoleReporter );
+        }
 
+        if ( isUseFile() )
+        {
             if ( BRIEF_REPORT_FORMAT.equals( getReportFormat() ) )
             {
                 reports.add( BriefFileReporter.class.getName() );
@@ -844,17 +838,6 @@ public abstract class AbstractSurefireMo
                 reports.add( FileReporter.class.getName() );
             }
         }
-        else
-        {
-            if ( BRIEF_REPORT_FORMAT.equals( getReportFormat() ) )
-            {
-                reports.add( BriefConsoleReporter.class.getName() );
-            }
-            else if ( PLAIN_REPORT_FORMAT.equals( getReportFormat() ) )
-            {
-                reports.add( DetailedConsoleReporter.class.getName() );
-            }
-        }
 
         if ( !isDisableXmlReport() )
         {
@@ -863,6 +846,30 @@ public abstract class AbstractSurefireMo
         return reports;
     }
 
+
+    /**
+     * Returns the reporter that will write to the console
+     *
+     * @param forking forking
+     * @return a console reporter of null if no console reporting
+     */
+    private String getConsoleReporter( boolean forking )
+    {
+        if ( isUseFile() && isPrintSummary() )
+        {
+            return forking ? ForkingConsoleReporter.class.getName() : ConsoleReporter.class.getName();
+        }
+        else if ( BRIEF_REPORT_FORMAT.equals( getReportFormat() ) )
+        {
+            return BriefConsoleReporter.class.getName();
+        }
+        else if ( PLAIN_REPORT_FORMAT.equals( getReportFormat() ) )
+        {
+            return DetailedConsoleReporter.class.getName();
+        }
+        return null;
+    }
+
     protected void ensureWorkingDirectoryExists()
         throws MojoFailureException
     {

Modified: maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingStreamConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingStreamConsumerTest.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingStreamConsumerTest.java (original)
+++ maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingStreamConsumerTest.java Sat Dec 11 13:28:38 2010
@@ -19,8 +19,8 @@ package org.apache.maven.plugin.surefire
  * under the License.
  */
 
-import org.apache.maven.plugin.surefire.booterclient.ForkingStreamConsumer;
 import org.apache.maven.plugin.surefire.booterclient.output.OutputConsumer;
+import org.apache.maven.surefire.report.DefaultReportEntry;
 import org.apache.maven.surefire.report.ForkingConsoleReporter;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.jmock.Mock;
@@ -51,9 +51,7 @@ public class ForkingStreamConsumerTest
         outputConsumerMock = new Mock( OutputConsumer.class );
         streamConsumer = new ForkingStreamConsumer( (OutputConsumer) outputConsumerMock.proxy() );
         message = "message";
-        reportEntry = new ReportEntry();
-        reportEntry.setGroup( "group" );
-        reportEntry.setName( "name" );
+        reportEntry = DefaultReportEntry.nameGroup( "name", "group" );
     }
 
     public void testConsumeHeaderLine()

Modified: maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/AbstractOutputConsumerTestCase.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/AbstractOutputConsumerTestCase.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/AbstractOutputConsumerTestCase.java (original)
+++ maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/output/AbstractOutputConsumerTestCase.java Sat Dec 11 13:28:38 2010
@@ -20,6 +20,7 @@ package org.apache.maven.plugin.surefire
  */
 
 import junit.framework.TestCase;
+import org.apache.maven.surefire.report.DefaultReportEntry;
 import org.apache.maven.surefire.report.ReportEntry;
 
 /**
@@ -42,9 +43,7 @@ public abstract class AbstractOutputCons
     {
         super.setUp();
         setLine( "line" );
-        setReportEntry( new ReportEntry() );
-        getReportEntry().setGroup( "group" );
-        getReportEntry().setName( "name" );
+        setReportEntry( DefaultReportEntry.nameGroup( "name", "group" ) );
     }
 
     public void setOutputConsumer( OutputConsumer outputConsumer )

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/BaseProviderFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/BaseProviderFactory.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/BaseProviderFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/BaseProviderFactory.java Sat Dec 11 13:28:38 2010
@@ -22,7 +22,6 @@ package org.apache.maven.surefire.provid
 import org.apache.maven.surefire.report.ReporterConfiguration;
 import org.apache.maven.surefire.report.ReporterFactory;
 import org.apache.maven.surefire.report.ReporterManagerFactory;
-import org.apache.maven.surefire.report.ReporterManagerFactory2;
 import org.apache.maven.surefire.testset.DirectoryScannerParameters;
 import org.apache.maven.surefire.testset.TestArtifactInfo;
 import org.apache.maven.surefire.testset.TestRequest;
@@ -67,7 +66,7 @@ public class BaseProviderFactory
     public ReporterFactory getReporterFactory()
     {
         ReporterFactory reporterManagerFactory =
-            new ReporterManagerFactory2( surefireClassLoader, reporterConfiguration );
+            new ReporterManagerFactory( surefireClassLoader, reporterConfiguration );
         if ( providerProperties != null )
         {
             reporterManagerFactory.getGlobalRunStatistics().initResultsFromProperties( providerProperties );

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/providerapi/ProviderParameters.java Sat Dec 11 13:28:38 2010
@@ -2,7 +2,6 @@ package org.apache.maven.surefire.provid
 
 import org.apache.maven.surefire.report.ReporterConfiguration;
 import org.apache.maven.surefire.report.ReporterFactory;
-import org.apache.maven.surefire.report.ReporterManagerFactory;
 import org.apache.maven.surefire.testset.DirectoryScannerParameters;
 import org.apache.maven.surefire.testset.TestArtifactInfo;
 import org.apache.maven.surefire.testset.TestRequest;
@@ -20,30 +19,35 @@ public interface ProviderParameters
     /**
      * Provides a directory scanner that enforces the includes/excludes parameters that were passed to surefire.
      * See #getDirectoryScannerParameters for details
+     *
      * @return The directory scanner
      */
     DirectoryScanner getDirectoryScanner();
 
     /**
      * Provides features for creating reporting objects
-     * @return A ReporterManagerFactory that allows the creation of one or more ReporterManagers
+     *
+     * @return A ReporterFactory that allows the creation of one or more ReporterManagers
      */
     ReporterFactory getReporterFactory();
 
     /**
      * The raw parameters used in creating the directory scanner
+     *
      * @return The parameters
      */
     DirectoryScannerParameters getDirectoryScannerParameters();
 
     /**
      * The raw parameters used in creating the ReporterManagerFactory
+     *
      * @return The reporter configuration
      */
     ReporterConfiguration getReporterConfiguration();
 
     /**
      * Contains information about requested test suites or individual tests from the command line.
+     *
      * @return The testRequest
      */
 
@@ -51,18 +55,21 @@ public interface ProviderParameters
 
     /**
      * The class loader for the tests
+     *
      * @return the classloader
      */
     ClassLoader getTestClassLoader();
 
     /**
      * The per-provider specific properties that may come all the way from the plugin's properties setting.
+     *
      * @return the provider specific properties
      */
     Properties getProviderProperties();
 
     /**
      * Artifact info about the artifact used to autodetect provider
+     *
      * @return The artifactinfo, or null if autodetect was not used.
      */
     TestArtifactInfo getTestArtifactInfo();

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java Sat Dec 11 13:28:38 2010
@@ -31,6 +31,7 @@ import java.io.PrintWriter;
  */
 public abstract class AbstractConsoleReporter
     extends AbstractTextReporter
+    implements RunReporter
 {
     private static final String TEST_SET_STARTING_PREFIX = "Running ";
 
@@ -45,16 +46,18 @@ public abstract class AbstractConsoleRep
     protected AbstractConsoleReporter( String format, ReporterConfiguration reporterConfiguration )
     {
         // TODO: use logger
-        super( new PrintWriter( new OutputStreamWriter( new BufferedOutputStream( originalSystemOut, BUFFER_SIZE ) ) ), format,
-               reporterConfiguration );
+        super( new PrintWriter( new OutputStreamWriter( new BufferedOutputStream( originalSystemOut, BUFFER_SIZE ) ) ),
+               format, reporterConfiguration );
     }
 
-    /** @deprecated Can be removed once we build surefire with 2.7 */
+    /**
+     * @deprecated Can be removed once we build surefire with 2.7
+     */
     protected AbstractConsoleReporter( String format, Boolean trimStackTrace )
     {
         // TODO: use logger
-        super( new PrintWriter( new OutputStreamWriter( new BufferedOutputStream( originalSystemOut, BUFFER_SIZE ) ) ), format,
-               trimStackTrace );
+        super( new PrintWriter( new OutputStreamWriter( new BufferedOutputStream( originalSystemOut, BUFFER_SIZE ) ) ),
+               format, trimStackTrace );
     }
 
     public void testSetStarting( ReportEntry report )
@@ -131,7 +134,8 @@ public abstract class AbstractConsoleRep
      */
     public static ReportEntry parseTestSetStartingMessage( String message )
     {
-        ReportEntry reportEntry = new ReportEntry();
+        String name;
+        String group = null;
         int i = message.indexOf( TEST_SET_STARTING_GROUP_PREFIX );
         int j;
         if ( i >= 0 )
@@ -141,7 +145,7 @@ public abstract class AbstractConsoleRep
             {
                 throw new RuntimeException( "Message provided can not be parsed" );
             }
-            reportEntry.setGroup( message.substring( i + TEST_SET_STARTING_GROUP_PREFIX.length(), j ) );
+            group = message.substring( i + TEST_SET_STARTING_GROUP_PREFIX.length(), j );
         }
         else
         {
@@ -151,8 +155,8 @@ public abstract class AbstractConsoleRep
                 throw new RuntimeException( "Message provided can not be parsed" );
             }
         }
-        reportEntry.setName( message.substring( TEST_SET_STARTING_PREFIX.length(), i ) );
-        return reportEntry;
+        name = message.substring( TEST_SET_STARTING_PREFIX.length(), i );
+        return DefaultReportEntry.nameGroup( name, group );
     }
 
     /**

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java Sat Dec 11 13:28:38 2010
@@ -53,7 +53,9 @@ public abstract class AbstractTextReport
         this.format = format;
     }
 
-    /** @deprecated Can be removed once we build Surefire with 2.7 */
+    /**
+     * @deprecated Can be removed once we build Surefire with 2.7
+     */
     protected AbstractTextReporter( String format, Boolean trimStackTrace )
     {
         super( trimStackTrace );
@@ -61,7 +63,9 @@ public abstract class AbstractTextReport
         this.format = format;
     }
 
-    /** @deprecated Can be removed once we build Surefire with 2.7 */
+    /**
+     * @deprecated Can be removed once we build Surefire with 2.7
+     */
     protected AbstractTextReporter( PrintWriter writer, String format, Boolean trimStackTrace )
     {
         super( trimStackTrace );
@@ -96,6 +100,11 @@ public abstract class AbstractTextReport
         }
     }
 
+    public void writeDetailMessage( String message )
+    {
+        writeMessage( message );
+    }
+
     public void testSucceeded( ReportEntry report )
     {
         super.testSucceeded( report );

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/BriefFileReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/BriefFileReporter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/BriefFileReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/BriefFileReporter.java Sat Dec 11 13:28:38 2010
@@ -35,9 +35,15 @@ public class BriefFileReporter
         super( reporterConfiguration, BRIEF );
     }
 
-    /** @deprecated Can be removed once we build Surefire with 2.7 */
+    /**
+     * @deprecated Can be removed once we build Surefire with 2.7
+     */
     public BriefFileReporter( File reportsDirectory, Boolean trimStackTrace )
     {
         super( reportsDirectory, BRIEF, trimStackTrace );
     }
+
+    public void writeDetailMessage( String message )
+    {
+    }
 }

Copied: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/DefaultReportEntry.java (from r1044155, maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java)
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/DefaultReportEntry.java?p2=maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/DefaultReportEntry.java&p1=maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java&r1=1044155&r2=1044651&rev=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/DefaultReportEntry.java Sat Dec 11 13:28:38 2010
@@ -19,21 +19,27 @@ package org.apache.maven.surefire.report
  * under the License.
  */
 
-
-import org.apache.maven.surefire.suite.RunResult;
-import org.apache.maven.surefire.testset.TestSetFailedException;
-
 /**
  * @author Kristian Rosenvold
  */
-public interface ReporterFactory
+public class DefaultReportEntry extends ReportEntry
 {
-    public RunStatistics getGlobalRunStatistics();
-
-    public RunResult close();
-
-    public void warnIfNoTests() throws TestSetFailedException;
-
-    public ReporterManager createReporterManager() throws TestSetFailedException;
-
+    public DefaultReportEntry( String source, String name, String message )
+    {
+        super( source, name, null, message, null );
+    }
+
+    public DefaultReportEntry( String source, String name, String group, String message )
+    {
+        super( source, name, group, message, null );
+    }
+
+    public DefaultReportEntry( String source, String name, String message, StackTraceWriter stackTraceWriter )
+    {
+        super( source, name, null, message, stackTraceWriter );
+    }
+
+    public static ReportEntry nameGroup(String name, String group){
+        return new ReportEntry( name, group);
+    }
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/MulticastingReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/MulticastingReporter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/MulticastingReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/MulticastingReporter.java Sat Dec 11 13:28:38 2010
@@ -28,7 +28,7 @@ import java.util.List;
  * @author Kristian Rosenvold
  */
 public class MulticastingReporter
-    implements Reporter
+    implements Reporter, RunReporter
 {
     private final List target;
 
@@ -67,7 +67,11 @@ public class MulticastingReporter
     {
         for ( Iterator it = target.iterator(); it.hasNext(); )
         {
-            ( (Reporter) it.next() ).runStarting();
+            Object next = it.next();
+            if ( next instanceof RunReporter )
+            {
+                ( (RunReporter) next ).runStarting();
+            }
         }
     }
 
@@ -75,7 +79,11 @@ public class MulticastingReporter
     {
         for ( Iterator it = target.iterator(); it.hasNext(); )
         {
-            ( (Reporter) it.next() ).runCompleted();
+            Object next = it.next();
+            if ( next instanceof RunReporter )
+            {
+                ( (RunReporter) next ).runCompleted();
+            }
         }
     }
 
@@ -133,6 +141,15 @@ public class MulticastingReporter
         }
     }
 
+    public void writeDetailMessage( String message )
+    {
+        for ( Iterator it = target.iterator(); it.hasNext(); )
+        {
+            Reporter reporter = ( (Reporter) it.next() );
+            reporter.writeDetailMessage( message );
+        }
+    }
+
     public void writeMessage( String message )
     {
         for ( Iterator it = target.iterator(); it.hasNext(); )

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReportEntry.java Sat Dec 11 13:28:38 2010
@@ -23,58 +23,34 @@ import org.apache.commons.lang.builder.E
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.apache.commons.lang.builder.ToStringBuilder;
 
+// todo: Make this an interface when surefire 2.7.1 compiles with surefire 2.7.0
 public class ReportEntry
 {
-    private String source;
+    private final String source;
 
-    private String name;
+    private final String name;
 
-    private String group;
+    private final String group;
 
-    private String message;
+    private final String message;
 
-    private StackTraceWriter stackTraceWriter;
+    private final StackTraceWriter stackTraceWriter;
 
-    public ReportEntry()
+    protected ReportEntry( String name, String group )
     {
+        this.name = name;
+        this.group = group;
+        this.stackTraceWriter = null;
+        this.message = null;
+        this.source = null;
     }
 
-    public ReportEntry( Object source, String name, String message )
-    {
-        this( source.getClass().getName(), name, null, message );
-    }
-
-    public ReportEntry( Object source, String name, String group, String message )
-    {
-        this( source.getClass().getName(), name, group, message, null );
-    }
-
-    public ReportEntry( Object source, String name, String message, StackTraceWriter stackTraceWriter )
-    {
-        this( source.getClass().getName(), name, null, message, stackTraceWriter );
-    }
-
-    public ReportEntry( Object source, String name, String group, String message, StackTraceWriter stackTraceWriter )
-    {
-        this( source.getClass().getName(), name, group, message, stackTraceWriter );
-    }
-    
     public ReportEntry( String source, String name, String message )
     {
-        this( source, name, null, message );
-    }
-
-    public ReportEntry( String source, String name, String group, String message )
-    {
-        this( source, name, group, message, null );
+        this( source, name, null, message, null );
     }
 
-    public ReportEntry( String source, String name, String message, StackTraceWriter stackTraceWriter )
-    {
-        this( source, name, null, message, stackTraceWriter );
-    }
-
-    public ReportEntry( String source, String name, String group, String message, StackTraceWriter stackTraceWriter )
+    protected ReportEntry( String source, String name, String group, String message, StackTraceWriter stackTraceWriter )
     {
         if ( source == null )
         {
@@ -89,28 +65,15 @@ public class ReportEntry
             throw new NullPointerException( "message is null" );
         }
 
-        this.setSource( source );
-
-        this.setName( name );
+        this.source = source;
 
-        this.setGroup( group );
+        this.name = name;
 
-        this.setMessage( message );
+        this.group = group;
 
-        this.setStackTraceWriter( stackTraceWriter );
-    }
+        this.message = message;
 
-    public void setSource( String source )
-    {
-        this.source = source;
-    }
-    
-    /**
-     * @deprecated Use {@link #getSourceName()} instead
-     */
-    public Object getSource()
-    {
-        return getSourceName();
+        this.stackTraceWriter = stackTraceWriter;
     }
 
     public String getSourceName()
@@ -118,41 +81,21 @@ public class ReportEntry
         return source;
     }
 
-    public void setName( String name )
-    {
-        this.name = name;
-    }
-
     public String getName()
     {
         return name;
     }
 
-    public void setGroup( String group )
-    {
-        this.group = group;
-    }
-
     public String getGroup()
     {
         return group;
     }
 
-    public void setMessage( String message )
-    {
-        this.message = message;
-    }
-
     public String getMessage()
     {
         return message;
     }
 
-    public void setStackTraceWriter( StackTraceWriter stackTraceWriter )
-    {
-        this.stackTraceWriter = stackTraceWriter;
-    }
-
     public StackTraceWriter getStackTraceWriter()
     {
         return stackTraceWriter;
@@ -169,24 +112,17 @@ public class ReportEntry
             return true;
         }
         ReportEntry rhs = (ReportEntry) obj;
-        return new EqualsBuilder()
-            .append( getSourceName(), rhs.getSourceName() )
-            .append( getName(), rhs.getName() )
-            .append( getGroup(), rhs.getGroup() )
-            .append( getMessage(), rhs.getMessage() )
-            .append( getStackTraceWriter(), rhs.getStackTraceWriter() )
-            .isEquals();
+        return new EqualsBuilder().append( getSourceName(), rhs.getSourceName() ).append( getName(),
+                                                                                          rhs.getName() ).append(
+            getGroup(), rhs.getGroup() ).append( getMessage(), rhs.getMessage() ).append( getStackTraceWriter(),
+                                                                                          rhs.getStackTraceWriter() ).isEquals();
     }
 
     public String toString()
     {
-        return new ToStringBuilder( this )
-            .append( "source", getSourceName() )
-            .append( "name", getName() )
-            .append( "group", getGroup() )
-            .append( "message", getMessage() )
-            .append( "stackTraceWriter", getStackTraceWriter() )
-            .toString();
+        return new ToStringBuilder( this ).append( "source", getSourceName() ).append( "name", getName() ).append(
+            "group", getGroup() ).append( "message", getMessage() ).append( "stackTraceWriter",
+                                                                            getStackTraceWriter() ).toString();
     }
 
     public int hashCode()
@@ -194,13 +130,8 @@ public class ReportEntry
         // you pick a hard-coded, randomly chosen, non-zero, odd number
         // ideally different for each class
         // good resource at http://primes.utm.edu/lists/small/1000.txt
-        return new HashCodeBuilder( 5897, 6653 )
-            .append( getSourceName() )
-            .append( getName() )
-            .append( getGroup() )
-            .append( getMessage() )
-            .append( getStackTraceWriter() )
-            .toHashCode();
+        return new HashCodeBuilder( 5897, 6653 ).append( getSourceName() ).append( getName() ).append(
+            getGroup() ).append( getMessage() ).append( getStackTraceWriter() ).toHashCode();
     }
 
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java Sat Dec 11 13:28:38 2010
@@ -20,21 +20,27 @@ package org.apache.maven.surefire.report
  */
 
 /**
- * Contract between the different implementations of the Surefire reporters
- *
- * @version $Id$
+ * Used by providers to report results.
+ * Using this interface integrates the providers together into a common reporting infrastructure.
+ * <p/>
+ * An instance of a reporter is not guaranteed to be thread-safe and concurrent test frameworks
+ * must request an instance of a reporter per-thread from the ReporterFactory.
  */
 public interface Reporter
 {
-    // The entire run
-    void runStarting();
-
-    void runCompleted();
-
-    // Test Sets
+    /**
+     * Indicates the start of a given test-set
+     *
+     * @param report the report entry describing the testset
+     */
     void testSetStarting( ReportEntry report )
         throws ReporterException;
 
+    /**
+     * Indicates end of a given test-set
+     *
+     * @param report the report entry describing the testset
+     */
     void testSetCompleted( ReportEntry report )
         throws ReporterException;
 
@@ -74,11 +80,29 @@ public interface Reporter
 
     void testSkipped( ReportEntry report );
 
-    // Counters
-    void reset();
 
+    /**
+     * Writes a message that will be displayed in all free-text format reporters.
+     * These messages will be output regardless, as opposed to #writeDetailMessage,
+     * which is controlled by reportFormat.
+     *
+     * @param message The message to write.
+     */
     void writeMessage( String message );
 
-    void writeFooter( String footer );
+    /**
+     * Writes a detailed message that will not necessarily be displayed in all channels.
+     * This is controlled by reportFormat attribute on the plugin.
+     *
+     * @param message The message to write
+     */
+    void writeDetailMessage( String message );
 
+    /**
+     * Restores the instance of the reporter, making the instance re-usable for a subsequent run in the
+     * same thread.
+     */
+    void reset();
+
+    void writeFooter( String footer );
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterConfiguration.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterConfiguration.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterConfiguration.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterConfiguration.java Sat Dec 11 13:28:38 2010
@@ -20,6 +20,7 @@ package org.apache.maven.surefire.report
  */
 
 import java.io.File;
+import java.io.PrintStream;
 import java.util.List;
 
 /**
@@ -31,6 +32,10 @@ public class ReporterConfiguration
 
     private final File reportsDirectory;
 
+    private final PrintStream originalSystemOut;
+
+    private final PrintStream originalSystemErr;
+
     /**
      * A non-null Boolean value
      */
@@ -41,10 +46,18 @@ public class ReporterConfiguration
         this.reports = reports;
         this.reportsDirectory = reportsDirectory;
         this.trimStackTrace = trimStackTrace;
+        /*
+        * While this may seem slightly odd, when this object is constructted no user code has been run
+        * (including classloading), and we can be guaranteed that no-one has modified System.out/System.err.
+        * As soon as we start loading user code, all h*ll breaks loose in this respect.
+         */
+        this.originalSystemOut = System.out;
+        this.originalSystemErr = System.err;
     }
 
     /**
      * The directory where reports will be created, normally ${project.build.directory}/surefire-reports
+     *
      * @return A file pointing at the specified directory
      */
     public File getReportsDirectory()
@@ -54,6 +67,7 @@ public class ReporterConfiguration
 
     /**
      * Indicates if reporting should trim the stack traces.
+     *
      * @return true if stacktraces should be trimmed in reporting
      */
     public Boolean isTrimStackTrace()
@@ -63,11 +77,34 @@ public class ReporterConfiguration
 
     /**
      * A list of classnames representing runnable reports for this test-run.
+     *
      * @return A list of strings, each string is a classname of a class
-     * implementing the org.apache.maven.surefire.report.Reporter interface
+     *         implementing the org.apache.maven.surefire.report.Reporter interface
      */
     public List getReports()
     {
         return reports;
     }
+
+    /**
+     * The original system out belonging to the (possibly forked) surefire process.
+     * Note that users of Reporter/ReporterFactory should normally not be using this.
+     *
+     * @return A printstream.
+     */
+    public PrintStream getOriginalSystemOut()
+    {
+        return originalSystemOut;
+    }
+
+    /**
+     * The original system err belonging to the (possibly forked) surefire process.
+     * Note that users of Reporter/ReporterFactory should normally not be using this.
+     *
+     * @return A printstream.
+     */
+    public PrintStream getOriginalSystemErr()
+    {
+        return originalSystemErr;
+    }
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java Sat Dec 11 13:28:38 2010
@@ -30,10 +30,13 @@ public interface ReporterFactory
 {
     public RunStatistics getGlobalRunStatistics();
 
-    public RunResult close();
-
-    public void warnIfNoTests() throws TestSetFailedException;
+    /**
+     * Creates a (non-thread-safe) reporter
+     *
+     * @return A reporter instance
+     */
+    public Reporter createReporter();
 
-    public ReporterManager createReporterManager() throws TestSetFailedException;
+    public RunResult close();
 
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java Sat Dec 11 13:28:38 2010
@@ -37,25 +37,29 @@ import java.util.List;
  * <p/>
  */
 public class ReporterManager
+    implements Reporter, RunReporter
 {
     private final RunStatistics runStatisticsForThis;
 
     private final MulticastingReporter multicastingReporter;
 
+    private final RunReporter runReporter;
+
     private final SystemStreamCapturer consoleCapturer;
 
     public ReporterManager( List reports, RunStatistics runStatisticsForThis )
     {
-        this.consoleCapturer =  new SystemStreamCapturer();
-        multicastingReporter = new MulticastingReporter( reports );
+        this.consoleCapturer = new SystemStreamCapturer();
+        runReporter = multicastingReporter = new MulticastingReporter( reports );
         this.runStatisticsForThis = runStatisticsForThis;
     }
 
     protected ReporterManager( ReporterManager other )
     {
         this.multicastingReporter = other.multicastingReporter;
+        this.runReporter = other.multicastingReporter;
         this.runStatisticsForThis = other.runStatisticsForThis;
-        this.consoleCapturer =  other.consoleCapturer;
+        this.consoleCapturer = other.consoleCapturer;
     }
 
     public void writeMessage( String message )
@@ -68,6 +72,11 @@ public class ReporterManager
         multicastingReporter.writeConsoleMessage( message );
     }
 
+    public void writeDetailMessage( String message )
+    {
+        multicastingReporter.writeDetailMessage( message );
+    }
+
     // ----------------------------------------------------------------------
     // Run
     // ----------------------------------------------------------------------

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManagerFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManagerFactory.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManagerFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManagerFactory.java Sat Dec 11 13:28:38 2010
@@ -20,7 +20,9 @@ package org.apache.maven.surefire.report
  */
 
 import org.apache.maven.surefire.suite.RunResult;
+import org.apache.maven.surefire.testset.SurefireConfigurationException;
 import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.apache.maven.surefire.util.NestedRuntimeException;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
@@ -42,10 +44,10 @@ import java.util.List;
  */
 
 /**
- * NOTE: The ReporterManagerFactory2 should take over for this once we build surefire with 2.7,
- * just merge it into this class, this is just a hack to be able to build 2.7 with 2.5
+ * Note; this class contains "old" and "new" style instantiation, "old" style can be removed once we build 2.7.X + with 2.7
  */
 public class ReporterManagerFactory
+    implements ReporterFactory
 {
     protected final List reportDefinitions;
 
@@ -53,17 +55,30 @@ public class ReporterManagerFactory
 
     protected final RunStatistics globalRunStatistics = new RunStatistics();
 
-    protected ReporterManager first;
+    private final ReporterConfiguration reporterConfiguration;
+
+    protected RunReporter first;
 
     protected final Object lock = new Object();
 
 
     public ReporterManagerFactory( List reportDefinitions, ClassLoader surefireClassLoader )
     {
+        this( reportDefinitions, surefireClassLoader, null );
+    }
+
+    public ReporterManagerFactory( List reportDefinitions, ClassLoader surefireClassLoader,
+                                   ReporterConfiguration reporterConfiguration )
+    {
         this.reportDefinitions = reportDefinitions;
         this.surefireClassLoader = surefireClassLoader;
+        this.reporterConfiguration = reporterConfiguration;
     }
 
+    public ReporterManagerFactory( ClassLoader surefireClassLoader, ReporterConfiguration reporterConfiguration )
+    {
+        this( reporterConfiguration.getReports(), surefireClassLoader, reporterConfiguration );
+    }
 
     public RunStatistics getGlobalRunStatistics()
     {
@@ -74,6 +89,20 @@ public class ReporterManagerFactory
         throws TestSetFailedException
     {
         final List reports = instantiateReports( reportDefinitions, surefireClassLoader );
+        return (ReporterManager) setupReporter( reports );
+
+    }
+
+    public Reporter createReporter()
+    {
+        final List reports =
+            instantiateReportsNewStyle( reportDefinitions, reporterConfiguration, surefireClassLoader );
+        return setupReporter( reports );
+    }
+
+
+    private Reporter setupReporter( List reports )
+    {
         // Note, if we ever start making >1 reporter Managers, we have to aggregate run statistics
         // i.e. we cannot use a single "globalRunStatistics"
         final ReporterManager reporterManager = new ReporterManager( reports, globalRunStatistics );
@@ -91,8 +120,10 @@ public class ReporterManagerFactory
         return reporterManager;
     }
 
+
     public RunResult close()
     {
+        warnIfNoTests();
         synchronized ( lock )
         {
             if ( first != null )
@@ -103,10 +134,26 @@ public class ReporterManagerFactory
         }
     }
 
-
     private List instantiateReports( List reportDefinitions, ClassLoader classLoader )
         throws TestSetFailedException
     {
+        if ( reportDefinitions.size() == 0 )
+        {
+            return new ArrayList();
+        }
+        if ( reportDefinitions.iterator().next() instanceof String )
+        {
+            return instantiateReportsNewStyle( reportDefinitions, reporterConfiguration, classLoader );
+        }
+        else
+        {
+            return instantiateReportsOldStyle( reportDefinitions, classLoader );
+        }
+    }
+
+    private List instantiateReportsOldStyle( List reportDefinitions, ClassLoader classLoader )
+        throws TestSetFailedException
+    {
         List reports = new ArrayList();
 
         for ( Iterator i = reportDefinitions.iterator(); i.hasNext(); )
@@ -124,6 +171,81 @@ public class ReporterManagerFactory
         return reports;
     }
 
+    protected List instantiateReportsNewStyle( List reportDefinitions, ReporterConfiguration reporterConfiguration,
+                                               ClassLoader classLoader )
+    {
+        List reports = new ArrayList();
+
+        for ( Iterator i = reportDefinitions.iterator(); i.hasNext(); )
+        {
+
+            String className = (String) i.next();
+
+            Reporter report = instantiateReportNewStyle( className, reporterConfiguration, classLoader );
+
+            reports.add( report );
+        }
+
+        return reports;
+    }
+
+    private static Reporter instantiateReportNewStyle( String className, ReporterConfiguration params,
+                                                       ClassLoader classLoader )
+    {
+        try
+        {
+            return (Reporter) instantiateObject( className, params, classLoader );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new SurefireConfigurationException( "Unable to find class to create report '" + className + "'", e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            throw new SurefireConfigurationException(
+                "Unable to find appropriate constructor to create report: " + e.getMessage(), e );
+        }
+    }
+
+
+    private static Object instantiateObject( String className, ReporterConfiguration params, ClassLoader classLoader )
+        throws SurefireConfigurationException, ClassNotFoundException, NoSuchMethodException
+    {
+        Class clazz = classLoader.loadClass( className );
+
+        Object object;
+        try
+        {
+            if ( params != null )
+            {
+                Class[] paramTypes = new Class[1];
+                paramTypes[0] = classLoader.loadClass( ReporterConfiguration.class.getName() );
+
+                Constructor constructor = clazz.getConstructor( paramTypes );
+
+                object = constructor.newInstance( new Object[]{ params } );
+            }
+            else
+            {
+                object = clazz.newInstance();
+            }
+        }
+        catch ( IllegalAccessException e )
+        {
+            throw new SurefireConfigurationException( "Unable to instantiate object: " + e.getMessage(), e );
+        }
+        catch ( InvocationTargetException e )
+        {
+            throw new SurefireConfigurationException( e.getTargetException().getMessage(), e.getTargetException() );
+        }
+        catch ( InstantiationException e )
+        {
+            throw new SurefireConfigurationException( "Unable to instantiate object: " + e.getMessage(), e );
+        }
+        return object;
+    }
+
+
     private static Reporter instantiateReport( String className, Object[] params, ClassLoader classLoader )
         throws TestSetFailedException
     {
@@ -190,12 +312,18 @@ public class ReporterManagerFactory
         return object;
     }
 
-    public void warnIfNoTests()
-        throws TestSetFailedException
+    private void warnIfNoTests()
     {
         if ( getGlobalRunStatistics().getRunResult().getCompletedCount() == 0 )
         {
-            createReporterManager().writeMessage( "There are no tests to run." );
+            try
+            {
+                createReporterManager().writeMessage( "There are no tests to run." );
+            }
+            catch ( TestSetFailedException e )
+            {
+                throw new NestedRuntimeException( e );
+            }
         }
     }
 }

Copied: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/RunReporter.java (from r1044155, maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java)
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/RunReporter.java?p2=maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/RunReporter.java&p1=maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java&r1=1044155&r2=1044651&rev=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/RunReporter.java Sat Dec 11 13:28:38 2010
@@ -19,21 +19,20 @@ package org.apache.maven.surefire.report
  * under the License.
  */
 
-
-import org.apache.maven.surefire.suite.RunResult;
-import org.apache.maven.surefire.testset.TestSetFailedException;
-
 /**
- * @author Kristian Rosenvold
+ * A reporter that is aware of run start/run finished events
  */
-public interface ReporterFactory
+public interface RunReporter
 {
-    public RunStatistics getGlobalRunStatistics();
-
-    public RunResult close();
-
-    public void warnIfNoTests() throws TestSetFailedException;
-
-    public ReporterManager createReporterManager() throws TestSetFailedException;
-
+    /**
+     * Indicates the start of the entire test run.
+     * Only called on the first provider, and just by the ReporterFactory
+     */
+    void runStarting();
+
+    /**
+     * Indicates the end of the entire test run
+     * Only called on the first provider, and just by the ReporterFactory
+     */
+    void runCompleted();
 }

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java Sat Dec 11 13:28:38 2010
@@ -61,7 +61,9 @@ public class XMLReporter
         this.reportsDirectory = reporterConfiguration.getReportsDirectory();
     }
 
-    /** @deprecated Can be removed once we build surfire with 2.7 */
+    /**
+     * @deprecated Can be removed once we build surfire with 2.7
+     */
     public XMLReporter( File reportsDirectory, Boolean trimStackTrace )
     {
         super( trimStackTrace );
@@ -74,6 +76,10 @@ public class XMLReporter
     {
     }
 
+    public void writeDetailMessage( String message )
+    {
+    }
+
     public void testSetCompleted( ReportEntry report )
         throws ReporterException
     {
@@ -172,7 +178,7 @@ public class XMLReporter
         testCase.setAttribute( "time", elapsedTimeAsString( runTime ) );
         return testCase;
     }
-    
+
     private Xpp3Dom createTestSuiteElement( ReportEntry report, long runTime )
     {
         Xpp3Dom testCase = new Xpp3Dom( "testsuite" );
@@ -198,7 +204,7 @@ public class XMLReporter
 
         writeTestProblems( report, stdOut, stdErr, "failure" );
     }
-    
+
     public void testSkipped( ReportEntry report )
     {
         super.testSkipped( report );
@@ -231,8 +237,8 @@ public class XMLReporter
                 element.setAttribute( "message", message );
 
                 element.setAttribute( "type", ( stackTrace.indexOf( ":" ) > -1
-                                                ? stackTrace.substring( 0, stackTrace.indexOf( ":" ) )
-                                                : stackTrace ) );
+                    ? stackTrace.substring( 0, stackTrace.indexOf( ":" ) )
+                    : stackTrace ) );
             }
             else
             {

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=1044651&r1=1044650&r2=1044651&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 Sat Dec 11 13:28:38 2010
@@ -21,6 +21,7 @@ package org.apache.maven.surefire.suite;
 
 import org.apache.maven.surefire.NonAbstractClassFilter;
 import org.apache.maven.surefire.Surefire;
+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.ReporterManager;
@@ -127,7 +128,7 @@ public abstract class AbstractDirectoryT
 
         String rawString = bundle.getString( "testSetStarting" );
 
-        ReportEntry report = new ReportEntry( this.getClass().getName(), testSet.getName(), rawString );
+        ReportEntry report = new DefaultReportEntry( this.getClass().getName(), testSet.getName(), rawString );
 
         reporterManager.testSetStarting( report );
 
@@ -135,7 +136,7 @@ public abstract class AbstractDirectoryT
 
         rawString = bundle.getString( "testSetCompletedNormally" );
 
-        report = new ReportEntry( this.getClass().getName(), testSet.getName(), rawString );
+        report = new DefaultReportEntry( this.getClass().getName(), testSet.getName(), rawString );
 
         reporterManager.testSetCompleted( report );
 

Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/PojoTestSet.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/PojoTestSet.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/PojoTestSet.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/PojoTestSet.java Sat Dec 11 13:28:38 2010
@@ -20,6 +20,7 @@ package org.apache.maven.surefire.testse
  */
 
 import org.apache.maven.surefire.Surefire;
+import org.apache.maven.surefire.report.DefaultReportEntry;
 import org.apache.maven.surefire.report.PojoStackTraceWriter;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.ReporterManager;
@@ -96,7 +97,7 @@ public class PojoTestSet
     }
 
     /**
-     * @noinspection CatchGenericClass,OverlyBroadCatchBlock,MethodWithMultipleReturnPoints
+     * @noinspection CatchGenericClass, OverlyBroadCatchBlock, MethodWithMultipleReturnPoints
      */
     protected boolean executeTestMethod( Method method, Object[] args, ReporterManager reportManager )
     {
@@ -114,8 +115,8 @@ public class PojoTestSet
 
         userFriendlyMethodName += ')';
 
-        ReportEntry report = new ReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
-                                              getName() );
+        ReportEntry report =
+            new DefaultReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ), getName() );
 
         reportManager.testStarting( report );
 
@@ -130,13 +131,13 @@ public class PojoTestSet
 
             MessageFormat msgFmt = new MessageFormat( rawString );
 
-            Object[] stringArgs = {method.getName()};
+            Object[] stringArgs = { method.getName() };
 
             String stringToPrint = msgFmt.format( stringArgs );
 
-            report = new ReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
-                                      stringToPrint, new PojoStackTraceWriter( testObject.getClass().getName(),
-                                                                               method.getName(), e ) );
+            report = new DefaultReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
+                                             stringToPrint, new PojoStackTraceWriter( testObject.getClass().getName(),
+                                                                                      method.getName(), e ) );
 
             reportManager.testFailed( report );
 
@@ -153,8 +154,8 @@ public class PojoTestSet
         {
             method.invoke( testObject, args );
 
-            report = new ReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
-                                      getName() );
+            report = new DefaultReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
+                                             getName() );
 
             reportManager.testSucceeded( report );
         }
@@ -169,8 +170,10 @@ public class PojoTestSet
                 msg = t.toString();
             }
 
-            report = new ReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ), msg,
-                new PojoStackTraceWriter( testObject.getClass().getName(), method.getName(), t ) );
+            report =
+                new DefaultReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ), msg,
+                                        new PojoStackTraceWriter( testObject.getClass().getName(), method.getName(),
+                                                                  t ) );
 
             reportManager.testFailed( report );
             // Don't return  here, because tearDownFixture should be called even
@@ -185,8 +188,10 @@ public class PojoTestSet
                 msg = t.toString();
             }
 
-            report = new ReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ), msg,
-                new PojoStackTraceWriter( testObject.getClass().getName(), method.getName(), t ) );
+            report =
+                new DefaultReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ), msg,
+                                        new PojoStackTraceWriter( testObject.getClass().getName(), method.getName(),
+                                                                  t ) );
 
             reportManager.testFailed( report );
             // Don't return  here, because tearDownFixture should be called even
@@ -204,13 +209,13 @@ public class PojoTestSet
 
             MessageFormat msgFmt = new MessageFormat( rawString );
 
-            Object[] stringArgs = {method.getName()};
+            Object[] stringArgs = { method.getName() };
 
             String stringToPrint = msgFmt.format( stringArgs );
 
-            report = new ReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
-                                      stringToPrint, new PojoStackTraceWriter( testObject.getClass().getName(),
-                                                                               method.getName(), t ) );
+            report = new DefaultReportEntry( testObject.getClass().getName(), getTestName( userFriendlyMethodName ),
+                                             stringToPrint, new PojoStackTraceWriter( testObject.getClass().getName(),
+                                                                                      method.getName(), t ) );
 
             reportManager.testFailed( report );
 

Added: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireConfigurationException.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireConfigurationException.java?rev=1044651&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireConfigurationException.java (added)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireConfigurationException.java Sat Dec 11 13:28:38 2010
@@ -0,0 +1,59 @@
+package org.apache.maven.surefire.testset;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import org.apache.maven.surefire.util.NestedRuntimeException;
+
+/**
+ * Exception indicating that surefire cannot be set up properly. This may be due
+ * to incorrect configuration or incorrect dependencies.
+ *
+ * @author Kristian Rosenvold
+ */
+public class SurefireConfigurationException
+    extends NestedRuntimeException
+{
+    /**
+     * Create a <code>SurefireConfigurationException</code> with the specified detail
+     * message and cause.
+     * <p/>
+     * <p>Note that the detail message associated with cause is
+     * <em>not</em> automatically incorporated in this throwable's detail
+     * message.
+     *
+     * @param message A detail message for this <code>SurefireConfigurationException</code>, or <code>null</code>.
+     * @param cause   the cause, which is saved for later retrieval by the <code>getCause</code> method.
+     *                (A null value is permitted, and indicates that the cause is nonexistent or unknown.)
+     */
+    public SurefireConfigurationException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    /**
+     * Create a <code>SurefireConfigurationException</code> with the specified cause.  The
+     * <code>getMessage</code> method of this exception object will return
+     * <code>(cause == null ? "" : cause.toString())</code>.
+     */
+    public SurefireConfigurationException( Throwable cause )
+    {
+        super( cause == null ? "" : cause.toString(), cause );
+    }
+}

Propchange: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireConfigurationException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTestCase.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTestCase.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTestCase.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/AbstractConsoleReporterTestCase.java Sat Dec 11 13:28:38 2010
@@ -39,9 +39,7 @@ public abstract class AbstractConsoleRep
         throws Exception
     {
         super.setUp();
-        report = new ReportEntry();
-        report.setGroup( "group" );
-        report.setName( "name" );
+        report = DefaultReportEntry.nameGroup( "name", "group" );
     }
 
     protected void setConsoleReporter( AbstractConsoleReporter consoleReporter )
@@ -66,7 +64,8 @@ public abstract class AbstractConsoleRep
         String message = AbstractConsoleReporter.getTestSetStartingMessage( report );
         assertEquals( "Running name (of group)", message );
 
-        report.setGroup( null );
+        report = DefaultReportEntry.nameGroup( "name", null );
+
         message = AbstractConsoleReporter.getTestSetStartingMessage( report );
         assertEquals( "Running name", message );
     }
@@ -77,11 +76,6 @@ public abstract class AbstractConsoleRep
         String message = "Running name (of group)";
         ReportEntry actualReport = AbstractConsoleReporter.parseTestSetStartingMessage( message );
         assertEquals( report, actualReport );
-
-        report.setGroup( null );
-        message = "Running name";
-        actualReport = AbstractConsoleReporter.parseTestSetStartingMessage( message );
-        assertEquals( report, actualReport );
     }
 
     public void testIsTestSetStartingMessage()

Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/report/XMLReporterTest.java Sat Dec 11 13:28:38 2010
@@ -37,10 +37,10 @@ public class XMLReporterTest
         throws Exception
     {
         super.setUp();
-        reporter = new XMLReporter( ForkingConsoleReporterTest.getTestReporterConfiguration());
+        reporter = new XMLReporter( ForkingConsoleReporterTest.getTestReporterConfiguration() );
         message = "junit.framework.AssertionFailedError";
-        reportEntry = new ReportEntry( this.getClass().getName(), "XMLReporterTest", message,
-                                       new PojoStackTraceWriter( "", "", new AssertionFailedError() ) );
+        reportEntry = new DefaultReportEntry( this.getClass().getName(), "XMLReporterTest", message,
+                                              new PojoStackTraceWriter( "", "", new AssertionFailedError() ) );
     }
 
     /*

Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireStarter.java Sat Dec 11 13:28:38 2010
@@ -24,6 +24,7 @@ import org.apache.maven.surefire.report.
 import org.apache.maven.surefire.suite.RunResult;
 import org.apache.maven.surefire.testset.TestSetFailedException;
 
+import java.io.PrintStream;
 import java.util.Properties;
 
 /**
@@ -72,8 +73,7 @@ public class SurefireStarter
         // separate the TestNG classloader
         ClassLoader testsClassLoader = createInProcessTestClassLoader();
 
-        final ClasspathConfiguration classpathConfiguration =
-            startupConfiguration.getClasspathConfiguration();
+        final ClasspathConfiguration classpathConfiguration = startupConfiguration.getClasspathConfiguration();
 
         ClassLoader surefireClassLoader = classpathConfiguration.createSurefireClassLoader( testsClassLoader );
 
@@ -124,8 +124,12 @@ public class SurefireStarter
 
     private RunResult invokeProvider( Object testSet, ClassLoader testsClassLoader, ClassLoader surefireClassLoader )
     {
-        ProviderFactory providerFactory = new ProviderFactory( startupConfiguration, providerConfiguration,
-                                                               surefireClassLoader );
+        final PrintStream orgSystemOut = System.out;
+        final PrintStream orgSystemErr = System.err;
+        // Note that System.out/System.err are also read in the "ReporterConfiguration" instatiation
+        // in createProvider below. These are the same values as here.
+        ProviderFactory providerFactory =
+            new ProviderFactory( startupConfiguration, providerConfiguration, surefireClassLoader );
         final SurefireProvider provider = providerFactory.createProvider( testsClassLoader );
 
         try
@@ -140,6 +144,11 @@ public class SurefireStarter
         {
             throw new RuntimeException( e );
         }
+        finally
+        {
+            System.setOut( orgSystemOut );
+            System.setErr( orgSystemErr );
+        }
     }
 
     /**

Modified: maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java Sat Dec 11 13:28:38 2010
@@ -63,9 +63,6 @@ public class JUnit3Provider
         {
             suite.execute( (ReporterManagerFactory) reporterFactory, testClassLoader );
         }
-
-        reporterFactory.warnIfNoTests();
-
         return reporterFactory.close();
     }
 

Modified: maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/TestListenerInvocationHandler.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/TestListenerInvocationHandler.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/TestListenerInvocationHandler.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/TestListenerInvocationHandler.java Sat Dec 11 13:28:38 2010
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.junit;
  * under the License.
  */
 
+import org.apache.maven.surefire.report.DefaultReportEntry;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.ReporterManager;
 
@@ -44,9 +45,9 @@ public class TestListenerInvocationHandl
 
     private ReporterManager reportManager;
 
-    private static final Class[] EMPTY_CLASS_ARRAY = new Class[]{};
+    private static final Class[] EMPTY_CLASS_ARRAY = new Class[]{ };
 
-    private static final String[] EMPTY_STRING_ARRAY = new String[]{};
+    private static final String[] EMPTY_STRING_ARRAY = new String[]{ };
 
     private static class FailedTest
     {
@@ -151,7 +152,8 @@ public class TestListenerInvocationHandl
     // Handler for TestListener.startTest(Test)
     public void handleStartTest( Object[] args )
     {
-        ReportEntry report = new ReportEntry( args[0].getClass().getName(), args[0].toString(), args[0].getClass().getName() );
+        ReportEntry report =
+            new DefaultReportEntry( args[0].getClass().getName(), args[0].toString(), args[0].getClass().getName() );
 
         reportManager.testStarting( report );
     }
@@ -161,7 +163,8 @@ public class TestListenerInvocationHandl
         throws IllegalAccessException, InvocationTargetException
     {
         ReportEntry report =
-            new ReportEntry( args[0].getClass().getName(), args[0].toString(), args[1].toString(), getStackTraceWriter( args ) );
+            new DefaultReportEntry( args[0].getClass().getName(), args[0].toString(), args[1].toString(),
+                                    getStackTraceWriter( args ) );
 
         reportManager.testError( report );
 
@@ -190,7 +193,8 @@ public class TestListenerInvocationHandl
         throws IllegalAccessException, InvocationTargetException
     {
         ReportEntry report =
-            new ReportEntry( args[0].getClass().getName(), args[0].toString(), args[1].toString(), getStackTraceWriter( args ) );
+            new DefaultReportEntry( args[0].getClass().getName(), args[0].toString(), args[1].toString(),
+                                    getStackTraceWriter( args ) );
 
         reportManager.testFailed( report );
 
@@ -203,7 +207,8 @@ public class TestListenerInvocationHandl
 
         if ( !testHadFailed )
         {
-            ReportEntry report = new ReportEntry( args[0].getClass().getName(), args[0].toString(), args[0].getClass().getName() );
+            ReportEntry report = new DefaultReportEntry( args[0].getClass().getName(), args[0].toString(),
+                                                         args[0].getClass().getName() );
 
             reportManager.testSucceeded( report );
         }

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=1044651&r1=1044650&r2=1044651&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 Sat Dec 11 13:28:38 2010
@@ -59,14 +59,12 @@ public class JUnit4Provider
         suite.locateTestSets( testClassLoader );
         if ( forkTestSet != null )
         {
-            suite.execute( (String) forkTestSet, ( ReporterManagerFactory)reporterFactory, testClassLoader );
+            suite.execute( (String) forkTestSet, (ReporterManagerFactory) reporterFactory, testClassLoader );
         }
         else
         {
-            suite.execute( ( ReporterManagerFactory)reporterFactory, testClassLoader );
+            suite.execute( (ReporterManagerFactory) reporterFactory, testClassLoader );
         }
-        reporterFactory.warnIfNoTests();
-
         return reporterFactory.close();
     }
 

Modified: 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?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4TestSetReporter.java Sat Dec 11 13:28:38 2010
@@ -24,6 +24,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.maven.surefire.Surefire;
+import org.apache.maven.surefire.report.DefaultReportEntry;
 import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.ReporterManager;
 import org.junit.runner.Description;
@@ -69,7 +70,7 @@ public class JUnit4TestSetReporter
         throws Exception
     {
         String rawString = bundle.getString( "testSetStarting" );
-        ReportEntry report = new ReportEntry( testSet.getName(), testSet.getName(), rawString );
+        ReportEntry report = new DefaultReportEntry( testSet.getName(), testSet.getName(), rawString );
 
         this.reportMgr.testSetStarting( report );
     }
@@ -83,7 +84,7 @@ public class JUnit4TestSetReporter
         throws Exception
     {
         String rawString = bundle.getString( "testSetCompletedNormally" );
-        ReportEntry report = new ReportEntry( testSet.getName(), testSet.getName(), rawString );
+        ReportEntry report = new DefaultReportEntry( testSet.getName(), testSet.getName(), rawString );
 
         this.reportMgr.testSetCompleted( report );
         this.reportMgr.reset();
@@ -98,7 +99,8 @@ public class JUnit4TestSetReporter
         throws Exception
     {
         String rawString = bundle.getString( "testSkipped" );
-        ReportEntry report = new ReportEntry( extractClassName( description ), description.getDisplayName(), rawString );
+        ReportEntry report =
+            new DefaultReportEntry( extractClassName( description ), description.getDisplayName(), rawString );
 
         this.reportMgr.testSkipped( report );
     }
@@ -112,7 +114,8 @@ public class JUnit4TestSetReporter
         throws Exception
     {
         String rawString = bundle.getString( "testStarting" );
-        ReportEntry report = new ReportEntry( extractClassName( description ), description.getDisplayName(), rawString );
+        ReportEntry report =
+            new DefaultReportEntry( extractClassName( description ), description.getDisplayName(), rawString );
 
         this.reportMgr.testStarting( report );
 
@@ -124,12 +127,14 @@ public class JUnit4TestSetReporter
      *
      * @see org.junit.runner.notification.RunListener#testFailure(org.junit.runner.notification.Failure)
      */
+    @SuppressWarnings( { "ThrowableResultOfMethodCallIgnored" } )
     public void testFailure( Failure failure )
         throws Exception
     {
         String rawString = bundle.getString( "executeException" );
         ReportEntry report =
-            new ReportEntry( extractClassName( failure.getDescription() ), failure.getTestHeader(), rawString, new JUnit4StackTraceWriter( failure ) );
+            new DefaultReportEntry( extractClassName( failure.getDescription() ), failure.getTestHeader(), rawString,
+                                    new JUnit4StackTraceWriter( failure ) );
 
         if ( failure.getException() instanceof AssertionError )
         {
@@ -151,27 +156,28 @@ public class JUnit4TestSetReporter
     public void testFinished( Description description )
         throws Exception
     {
-        if ( failureFlag == false )
+        if ( !failureFlag )
         {
             String rawString = bundle.getString( "testSuccessful" );
-            ReportEntry report = new ReportEntry( extractClassName( description ), description.getDisplayName(), rawString );
+            ReportEntry report =
+                new DefaultReportEntry( extractClassName( description ), description.getDisplayName(), rawString );
 
             this.reportMgr.testSucceeded( report );
         }
     }
-    
+
     private String extractClassName( Description description )
     {
         String displayName = description.getDisplayName();
-        final Pattern PARENS = Pattern.compile(
-                "^" +
-                "[^\\(\\)]+" + //non-parens
-        		"\\((" + // then an open-paren (start matching a group)
-        		"[^\\\\(\\\\)]+" + //non-parens
-        		")\\)" +
-        		"$" ); // then a close-paren (end group match)
+        final Pattern PARENS = Pattern.compile( "^" + "[^\\(\\)]+" + //non-parens
+                                                    "\\((" + // then an open-paren (start matching a group)
+                                                    "[^\\\\(\\\\)]+" + //non-parens
+                                                    ")\\)" + "$" ); // then a close-paren (end group match)
         Matcher m = PARENS.matcher( displayName );
-        if (!m.find()) return displayName;
+        if ( !m.find() )
+        {
+            return displayName;
+        }
         return m.group( 1 );
     }
 }

Modified: maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ClassesParallelRunListener.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ClassesParallelRunListener.java?rev=1044651&r1=1044650&r2=1044651&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ClassesParallelRunListener.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ClassesParallelRunListener.java Sat Dec 11 13:28:38 2010
@@ -18,19 +18,20 @@ package org.apache.maven.surefire.junitc
  * under the License.
  */
 
-import org.apache.maven.surefire.report.ReporterManagerFactory;
+import org.apache.maven.surefire.report.ReporterConfiguration;
+import org.apache.maven.surefire.report.ReporterFactory;
 import org.apache.maven.surefire.testset.TestSetFailedException;
 
 /**
-* @author Kristian Rosenvold
-*/
+ * @author Kristian Rosenvold
+ */
 public class ClassesParallelRunListener
     extends ConcurrentReportingRunListener
 {
-    public ClassesParallelRunListener( ReporterManagerFactory reporterFactory )
+    public ClassesParallelRunListener( ReporterFactory reporterFactory, ReporterConfiguration reporterConfiguration )
         throws TestSetFailedException
     {
-        super( reporterFactory, false );
+        super( reporterFactory, false, reporterConfiguration );
     }
 
     @Override