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 br...@apache.org on 2006/03/03 08:09:43 UTC

svn commit: r382699 - in /maven/surefire/branches/surefire-testng: surefire-api/src/main/java/org/apache/maven/surefire/ surefire-api/src/main/java/org/apache/maven/surefire/report/ surefire-api/src/main/java/org/apache/maven/surefire/suite/ surefire-a...

Author: brett
Date: Thu Mar  2 23:09:40 2006
New Revision: 382699

URL: http://svn.apache.org/viewcvs?rev=382699&view=rev
Log:
[MSUREFIRE-23] exception handling cleanup

Added:
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java   (with props)
    maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java   (with props)
Modified:
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/Surefire.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractFileReporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractReporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/SurefireTestSuite.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireTestSet.java
    maven/surefire/branches/surefire-testng/surefire-api/src/test/java/org/apache/maven/surefire/TestReport.java
    maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
    maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitDirectoryTestSuite.java
    maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java
    maven/surefire/branches/surefire-testng/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/Surefire.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/Surefire.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/Surefire.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/Surefire.java Thu Mar  2 23:09:40 2006
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.surefire.report.Reporter;
+import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.ReporterManager;
 import org.apache.maven.surefire.suite.SurefireTestSuite;
 import org.apache.maven.surefire.testset.TestSetFailedException;
@@ -38,6 +39,7 @@
 
     public boolean run( List reportDefinitions, Object[] testSuiteDefinition, String testSetName,
                         ClassLoader surefireClassLoader, ClassLoader testsClassLoader )
+        throws ReporterException, TestSetFailedException
     {
         ReporterManager reporterManager =
             new ReporterManager( instantiateReports( reportDefinitions, surefireClassLoader ) );
@@ -71,6 +73,7 @@
 
     public boolean run( List reportDefinitions, List testSuiteDefinitions, ClassLoader surefireClassLoader,
                         ClassLoader testsClassLoader )
+        throws ReporterException, TestSetFailedException
     {
         ReporterManager reporterManager =
             new ReporterManager( instantiateReports( reportDefinitions, surefireClassLoader ) );
@@ -114,26 +117,15 @@
 
     private SurefireTestSuite createSuiteFromDefinition( Object[] definition, ClassLoader surefireClassLoader,
                                                          ClassLoader testsClassLoader )
+        throws TestSetFailedException
     {
         String suiteClass = (String) definition[0];
         Object[] params = (Object[]) definition[1];
 
         SurefireTestSuite suite = instantiateSuite( suiteClass, params, surefireClassLoader );
 
-        try
-        {
-            suite.locateTestSets( testsClassLoader );
-        }
-        catch ( ClassNotFoundException e )
-        {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
-        catch ( TestSetFailedException e )
-        {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
+        suite.locateTestSets( testsClassLoader );
+
         return suite;
     }
 
@@ -150,6 +142,7 @@
     }
 */
     private List instantiateReports( List reportDefinitions, ClassLoader classLoader )
+        throws TestSetFailedException
     {
         List reports = new ArrayList();
 
@@ -169,17 +162,31 @@
     }
 
     private static Reporter instantiateReport( String className, Object[] params, ClassLoader classLoader )
+        throws TestSetFailedException
     {
-        return (Reporter) instantiateObject( className, params, classLoader );
+        try
+        {
+            return (Reporter) instantiateObject( className, params, classLoader );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new TestSetFailedException( "Unable to find class to create report '" + className + "'", e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            throw new TestSetFailedException(
+                "Unable to find appropriate constructor to create report: " + e.getMessage(), e );
+        }
     }
 
     public static Object instantiateObject( String className, Object[] params, ClassLoader classLoader )
+        throws TestSetFailedException, ClassNotFoundException, NoSuchMethodException
     {
-        Object object = null;
+        Class clazz = classLoader.loadClass( className );
+
+        Object object;
         try
         {
-            Class clazz = classLoader.loadClass( className );
-
             if ( params != null )
             {
                 Class[] paramTypes = new Class[params.length];
@@ -205,37 +212,37 @@
                 object = clazz.newInstance();
             }
         }
-        catch ( ClassNotFoundException e )
+        catch ( IllegalAccessException e )
         {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            throw new TestSetFailedException( "Unable to instantiate object: " + e.getMessage(), e );
         }
-        catch ( NoSuchMethodException e )
+        catch ( InvocationTargetException e )
         {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            throw new TestSetFailedException( e.getTargetException().getMessage(), e.getTargetException() );
         }
         catch ( InstantiationException e )
         {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
-        catch ( IllegalAccessException e )
-        {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
-        catch ( InvocationTargetException e )
-        {
-            // TODO
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            throw new TestSetFailedException( "Unable to instantiate object: " + e.getMessage(), e );
         }
         return object;
     }
 
     private static SurefireTestSuite instantiateSuite( String suiteClass, Object[] params, ClassLoader classLoader )
+        throws TestSetFailedException
     {
-        return (SurefireTestSuite) instantiateObject( suiteClass, params, classLoader );
+        try
+        {
+            return (SurefireTestSuite) instantiateObject( suiteClass, params, classLoader );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new TestSetFailedException( "Unable to find class to create suite '" + suiteClass + "'", e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            throw new TestSetFailedException(
+                "Unable to find appropriate constructor to create suite: " + e.getMessage(), e );
+        }
     }
 
     public String getResourceString( String key )

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractConsoleReporter.java Thu Mar  2 23:09:40 2006
@@ -17,7 +17,6 @@
  */
 
 import java.io.BufferedOutputStream;
-import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 
@@ -39,7 +38,7 @@
     }
 
     public void testSetStarting( ReportEntry report )
-        throws IOException
+        throws ReporterException
     {
         super.testSetStarting( report );
 

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractFileReporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractFileReporter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractFileReporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractFileReporter.java Thu Mar  2 23:09:40 2006
@@ -39,7 +39,7 @@
     }
 
     public void testSetStarting( ReportEntry report )
-        throws IOException
+        throws ReporterException
     {
         super.testSetStarting( report );
 
@@ -49,15 +49,22 @@
 
         reportDir.mkdirs();
 
-        PrintWriter writer = new PrintWriter( new FileWriter( reportFile ) );
-
-        writer.println( "-------------------------------------------------------------------------------" );
-
-        writer.println( "Test set: " + report.getName() );
-
-        writer.println( "-------------------------------------------------------------------------------" );
-
-        setWriter( writer );
+        try
+        {
+            PrintWriter writer = new PrintWriter( new FileWriter( reportFile ) );
+
+            writer.println( "-------------------------------------------------------------------------------" );
+
+            writer.println( "Test set: " + report.getName() );
+
+            writer.println( "-------------------------------------------------------------------------------" );
+
+            setWriter( writer );
+        }
+        catch ( IOException e )
+        {
+            throw new ReporterException( "Unable to create file for report: " + e.getMessage(), e );
+        }
     }
 
     public void testSetCompleted( ReportEntry report )

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractReporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractReporter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractReporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractReporter.java Thu Mar  2 23:09:40 2006
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.text.NumberFormat;
@@ -67,7 +66,7 @@
     }
 
     public void testSetStarting( ReportEntry report )
-        throws IOException
+        throws ReporterException
     {
         testSetStartTime = System.currentTimeMillis();
     }
@@ -129,7 +128,7 @@
         return failures;
     }
 
-    public int getNbTests()
+    public int getNumTests()
     {
         return completedCount;
     }

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/AbstractTextReporter.java Thu Mar  2 23:09:40 2006
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -94,7 +93,7 @@
     }
 
     public void testSetStarting( ReportEntry report )
-        throws IOException
+        throws ReporterException
     {
         super.testSetStarting( report );
 

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/Reporter.java Thu Mar  2 23:09:40 2006
@@ -31,7 +31,7 @@
 
     // Test Sets
     void testSetStarting( ReportEntry report )
-        throws Exception;
+        throws ReporterException;
 
     void testSetCompleted( ReportEntry report );
 
@@ -46,12 +46,12 @@
 
     void testFailed( ReportEntry report, String stdOut, String stdErr );
 
+    // Counters
     void reset();
 
-    // Counters... TODO (remove?)
     int getNumErrors();
 
     int getNumFailures();
 
-    int getNbTests();
+    int getNumTests();
 }

Added: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java?rev=382699&view=auto
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java (added)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java Thu Mar  2 23:09:40 2006
@@ -0,0 +1,31 @@
+package org.apache.maven.surefire.report;
+
+/*
+ * 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.
+ */
+
+/**
+ * Exception occurring during report generation.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ReporterException
+    extends Exception
+{
+    public ReporterException( String message, Exception nested )
+    {
+        super( message, nested );
+    }
+}

Propchange: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterException.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ReporterManager.java Thu Mar  2 23:09:40 2006
@@ -102,14 +102,7 @@
         {
             Reporter report = (Reporter) i.next();
 
-            try
-            {
-                report.runStarting( testCount );
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "runStarting", e );
-            }
+            report.runStarting( testCount );
         }
     }
 
@@ -119,14 +112,7 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.runStopped();
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "runStopped", e );
-            }
+            reporter.runStopped();
         }
     }
 
@@ -141,14 +127,7 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.runAborted( report );
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "runAborted", e );
-            }
+            reporter.runAborted( report );
         }
 
         ++errors;
@@ -160,14 +139,7 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.runCompleted();
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "runCompleted", e );
-            }
+            reporter.runCompleted();
         }
 
         writeMessage( "" );
@@ -181,19 +153,13 @@
     private ByteArrayOutputStream stdErr;
 
     public void testSetStarting( ReportEntry report )
+        throws ReporterException
     {
         for ( Iterator it = reports.iterator(); it.hasNext(); )
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.testSetStarting( report );
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "suiteStarting", e );
-            }
+            reporter.testSetStarting( report );
         }
     }
 
@@ -207,7 +173,7 @@
 
             failures += reporter.getNumFailures();
 
-            completedCount += reporter.getNbTests();
+            completedCount += reporter.getNumTests();
         }
 
         for ( Iterator it = reports.iterator(); it.hasNext(); )
@@ -230,14 +196,7 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.testSetAborted( report );
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "suiteAborted", e );
-            }
+            reporter.testSetAborted( report );
         }
 
         ++errors;
@@ -271,14 +230,7 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.testStarting( report );
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "testStarting", e );
-            }
+            reporter.testStarting( report );
         }
     }
 
@@ -290,14 +242,7 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
-            {
-                reporter.testSucceeded( report );
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "testSucceeded", e );
-            }
+            reporter.testSucceeded( report );
         }
     }
 
@@ -323,20 +268,13 @@
         {
             Reporter reporter = (Reporter) it.next();
 
-            try
+            if ( "failure".equals( typeError ) )
             {
-                if ( "failure".equals( typeError ) )
-                {
-                    reporter.testFailed( reportEntry, stdOutLog, stdErrLog );
-                }
-                else
-                {
-                    reporter.testError( reportEntry, stdOutLog, stdErrLog );
-                }
+                reporter.testFailed( reportEntry, stdOutLog, stdErrLog );
             }
-            catch ( Exception e )
+            else
             {
-                handleReporterException( "testFailed", e );
+                reporter.testError( reportEntry, stdOutLog, stdErrLog );
             }
         }
     }
@@ -356,14 +294,7 @@
         {
             Reporter report = (Reporter) it.next();
 
-            try
-            {
-                report.reset();
-            }
-            catch ( Exception e )
-            {
-                handleReporterException( "reset", e );
-            }
+            report.reset();
         }
     }
 
@@ -384,26 +315,6 @@
     public int getNbTests()
     {
         return completedCount;
-    }
-
-    /**
-     * @todo is this here for throwables? most of these don't throw any checked exceptions
-     */
-    private void handleReporterException( String reporterMethod, Exception e )
-    {
-/*
-        String reporterThrewException = Surefire.getResourceString( "reporterThrew" );
-
-        MessageFormat msgFmt = new MessageFormat( reporterThrewException );
-
-        Object[] args = {reporterMethod};
-
-        String stringToPrint = msgFmt.format( args );
-
-        System.err.println( stringToPrint );
-
-        e.printStackTrace( System.err );
-*/
     }
 
 }

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/XMLReporter.java Thu Mar  2 23:09:40 2006
@@ -22,8 +22,8 @@
 
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
@@ -69,7 +69,7 @@
     }
 
     public void testSetStarting( ReportEntry report )
-        throws IOException, UnsupportedEncodingException
+        throws ReporterException
     {
         super.testSetStarting( report );
 
@@ -79,8 +79,19 @@
 
         reportDir.mkdirs();
 
-        writer = new PrintWriter(
-            new BufferedWriter( new OutputStreamWriter( new FileOutputStream( reportFile ), "UTF-8" ) ) );
+        try
+        {
+            writer = new PrintWriter(
+                new BufferedWriter( new OutputStreamWriter( new FileOutputStream( reportFile ), "UTF-8" ) ) );
+        }
+        catch ( UnsupportedEncodingException e )
+        {
+            throw new ReporterException( "Unable to use UTF-8 encoding", e );
+        }
+        catch ( FileNotFoundException e )
+        {
+            throw new ReporterException( "Unable to create file: " + e.getMessage(), e );
+        }
 
         writer.write( "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" );
 
@@ -92,7 +103,7 @@
     {
         super.testSetCompleted( report );
 
-        testSuite.setAttribute( "tests", String.valueOf( this.getNbTests() ) );
+        testSuite.setAttribute( "tests", String.valueOf( this.getNumTests() ) );
 
         testSuite.setAttribute( "errors", String.valueOf( this.getNumErrors() ) );
 

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/AbstractDirectoryTestSuite.java Thu Mar  2 23:09:40 2006
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.surefire.report.ReportEntry;
+import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.ReporterManager;
 import org.apache.maven.surefire.testset.SurefireTestSet;
 import org.apache.maven.surefire.testset.TestSetFailedException;
@@ -61,7 +62,7 @@
     }
 
     public Map locateTestSets( ClassLoader classLoader )
-        throws ClassNotFoundException, TestSetFailedException
+        throws TestSetFailedException
     {
         if ( testSets != null )
         {
@@ -75,11 +76,18 @@
         {
             String className = tests[i];
 
-            SurefireTestSet testSet = createTestSet( className, classLoader );
+            SurefireTestSet testSet;
+            try
+            {
+                testSet = createTestSet( className, classLoader );
+            }
+            catch ( ClassNotFoundException e )
+            {
+                throw new TestSetFailedException( "Unable to create test class '" + className + "'", e );
+            }
 
             if ( testSets.containsKey( testSet.getName() ) )
             {
-                // TODO: better error
                 throw new TestSetFailedException( "Duplicate test set '" + testSet.getName() + "'" );
             }
 
@@ -97,6 +105,7 @@
         throws ClassNotFoundException;
 
     public void execute( ReporterManager reporterManager, ClassLoader classLoader )
+        throws ReporterException, TestSetFailedException
     {
         if ( testSets == null )
         {
@@ -111,34 +120,28 @@
     }
 
     private void executeTestSet( SurefireTestSet testSet, ReporterManager reporterManager, ClassLoader classLoader )
+        throws ReporterException, TestSetFailedException
     {
-        try
-        {
-            // TODO: fix all these messages, and improve bundle resolution
-            String rawString = bundle.getString( "testSetStarting" );
+        // TODO: fix all these messages, and improve bundle resolution
+        String rawString = bundle.getString( "testSetStarting" );
 
-            ReportEntry report = new ReportEntry( this, testSet.getName(), rawString );
+        ReportEntry report = new ReportEntry( this, testSet.getName(), rawString );
 
-            reporterManager.testSetStarting( report );
+        reporterManager.testSetStarting( report );
 
-            testSet.execute( reporterManager, classLoader );
+        testSet.execute( reporterManager, classLoader );
 
-            rawString = bundle.getString( "testSetCompletedNormally" );
+        rawString = bundle.getString( "testSetCompletedNormally" );
 
-            report = new ReportEntry( this, testSet.getName(), rawString );
+        report = new ReportEntry( this, testSet.getName(), rawString );
 
-            reporterManager.testSetCompleted( report );
+        reporterManager.testSetCompleted( report );
 
-            reporterManager.reset();
-        }
-        catch ( Exception e )
-        {
-            // TODO
-            e.printStackTrace();
-        }
+        reporterManager.reset();
     }
 
     public void execute( String testSetName, ReporterManager reporterManager, ClassLoader classLoader )
+        throws ReporterException, TestSetFailedException
     {
         if ( testSets == null )
         {
@@ -148,7 +151,7 @@
 
         if ( testSet == null )
         {
-            // TODO: throw exception
+            throw new TestSetFailedException( "Unable to find test set '" + testSetName + "' in suite" );
         }
 
         executeTestSet( testSet, reporterManager, classLoader );

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/SurefireTestSuite.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/SurefireTestSuite.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/SurefireTestSuite.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/suite/SurefireTestSuite.java Thu Mar  2 23:09:40 2006
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.ReporterManager;
 import org.apache.maven.surefire.testset.TestSetFailedException;
 
@@ -28,14 +29,16 @@
  */
 public interface SurefireTestSuite
 {
-    void execute( ReporterManager reporterManager, ClassLoader classLoader );
+    void execute( ReporterManager reporterManager, ClassLoader classLoader )
+        throws ReporterException, TestSetFailedException;
 
-    void execute( String testSetName, ReporterManager reporterManager, ClassLoader classLoader );
+    void execute( String testSetName, ReporterManager reporterManager, ClassLoader classLoader )
+        throws ReporterException, TestSetFailedException;
 
     int getNumTests();
 
     int getNumTestSets();
 
     Map locateTestSets( ClassLoader classLoader )
-        throws ClassNotFoundException, TestSetFailedException;
+        throws TestSetFailedException;
 }

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireTestSet.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireTestSet.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireTestSet.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/testset/SurefireTestSet.java Thu Mar  2 23:09:40 2006
@@ -21,9 +21,8 @@
 public interface SurefireTestSet
 {
     void execute( ReporterManager reportManager, ClassLoader loader )
-        throws Exception;
+        throws TestSetFailedException;
 
-    // TODO: fix exception and its propogation
     int getTestCount()
         throws TestSetFailedException;
 

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/test/java/org/apache/maven/surefire/TestReport.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/test/java/org/apache/maven/surefire/TestReport.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/test/java/org/apache/maven/surefire/TestReport.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/test/java/org/apache/maven/surefire/TestReport.java Thu Mar  2 23:09:40 2006
@@ -108,9 +108,9 @@
         return 0;
     }
 
-    public int getNbTests()
+    public int getNumTests()
     {
-        System.out.println( "TestReport::getNbTests" );
+        System.out.println( "TestReport::getNumTests" );
         return 0;
     }
 }

Modified: maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java Thu Mar  2 23:09:40 2006
@@ -17,6 +17,7 @@
  */
 
 import org.apache.maven.surefire.Surefire;
+import org.apache.maven.surefire.testset.TestSetFailedException;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.cli.CommandLineException;
 import org.codehaus.plexus.util.cli.CommandLineUtils;
@@ -107,10 +108,8 @@
         this.forkConfiguration = forkConfiguration;
     }
 
-    // TODO: fix error handling
     public boolean run()
-        throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException,
-        InvocationTargetException, MalformedURLException, SurefireBooterForkException
+        throws SurefireBooterForkException, SurefireExecutionException
     {
         boolean result = false;
 
@@ -130,8 +129,7 @@
     }
 
     private boolean runSuitesInProcess( String testSet, boolean childDelegation )
-        throws MalformedURLException, ClassNotFoundException, IllegalAccessException, InstantiationException,
-        NoSuchMethodException, InvocationTargetException
+        throws SurefireExecutionException
     {
         if ( testSuites.size() != 1 )
         {
@@ -140,56 +138,79 @@
 
         // TODO: replace with plexus
 
-        ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, getClass().getClassLoader() );
+        //noinspection CatchGenericClass,OverlyBroadCatchBlock
+        try
+        {
+            ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, getClass().getClassLoader() );
 
-        ClassLoader testsClassLoader = createClassLoader( classPathUrls, childDelegation );
+            ClassLoader testsClassLoader = createClassLoader( classPathUrls, childDelegation );
 
-        Class surefireClass = surefireClassLoader.loadClass( Surefire.class.getName() );
+            Class surefireClass = surefireClassLoader.loadClass( Surefire.class.getName() );
 
-        Object surefire = surefireClass.newInstance();
+            Object surefire = surefireClass.newInstance();
 
-        Method run = surefireClass.getMethod( "run", new Class[]{List.class, Object[].class, String.class,
-            ClassLoader.class, ClassLoader.class} );
+            Method run = surefireClass.getMethod( "run", new Class[]{List.class, Object[].class, String.class,
+                ClassLoader.class, ClassLoader.class} );
 
-        ClassLoader oldContextClassLoader = Thread.currentThread() .getContextClassLoader();
+            ClassLoader oldContextClassLoader = Thread.currentThread() .getContextClassLoader();
 
-        Thread.currentThread().setContextClassLoader( testsClassLoader );
+            Thread.currentThread().setContextClassLoader( testsClassLoader );
 
-        Boolean result = (Boolean) run.invoke( surefire, new Object[]{reports, testSuites.get( 0 ), testSet,
-            surefireClassLoader, testsClassLoader} );
+            Boolean result = (Boolean) run.invoke( surefire, new Object[]{reports, testSuites.get( 0 ), testSet,
+                surefireClassLoader, testsClassLoader} );
 
-        Thread.currentThread().setContextClassLoader( oldContextClassLoader );
+            Thread.currentThread().setContextClassLoader( oldContextClassLoader );
 
-        return result.booleanValue();
+            return result.booleanValue();
+        }
+        catch ( InvocationTargetException e )
+        {
+            throw new SurefireExecutionException( e.getTargetException().getMessage(), e.getTargetException() );
+        }
+        catch ( Exception e )
+        {
+            throw new SurefireExecutionException( "Unable to instantiate and execute Surefire", e );
+        }
     }
 
     private boolean runSuitesInProcess( boolean childDelegation )
-        throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException,
-        InvocationTargetException, MalformedURLException
+        throws SurefireExecutionException
     {
         // TODO: replace with plexus
 
-        ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, getClass().getClassLoader() );
+        //noinspection CatchGenericClass,OverlyBroadCatchBlock
+        try
+        {
+            ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, getClass().getClassLoader() );
 
-        ClassLoader testsClassLoader = createClassLoader( classPathUrls, childDelegation );
+            ClassLoader testsClassLoader = createClassLoader( classPathUrls, childDelegation );
 
-        Class surefireClass = surefireClassLoader.loadClass( Surefire.class.getName() );
+            Class surefireClass = surefireClassLoader.loadClass( Surefire.class.getName() );
 
-        Object surefire = surefireClass.newInstance();
+            Object surefire = surefireClass.newInstance();
 
-        Method run =
-            surefireClass.getMethod( "run", new Class[]{List.class, List.class, ClassLoader.class, ClassLoader.class} );
+            Method run = surefireClass.getMethod( "run", new Class[]{List.class, List.class, ClassLoader.class,
+                ClassLoader.class} );
 
-        ClassLoader oldContextClassLoader = Thread.currentThread() .getContextClassLoader();
+            ClassLoader oldContextClassLoader = Thread.currentThread() .getContextClassLoader();
 
-        Thread.currentThread().setContextClassLoader( testsClassLoader );
+            Thread.currentThread().setContextClassLoader( testsClassLoader );
 
-        Boolean result =
-            (Boolean) run.invoke( surefire, new Object[]{reports, testSuites, surefireClassLoader, testsClassLoader} );
+            Boolean result = (Boolean) run.invoke( surefire, new Object[]{reports, testSuites, surefireClassLoader,
+                testsClassLoader} );
 
-        Thread.currentThread().setContextClassLoader( oldContextClassLoader );
+            Thread.currentThread().setContextClassLoader( oldContextClassLoader );
 
-        return result.booleanValue();
+            return result.booleanValue();
+        }
+        catch ( InvocationTargetException e )
+        {
+            throw new SurefireExecutionException( e.getTargetException().getMessage(), e.getTargetException() );
+        }
+        catch ( Exception e )
+        {
+            throw new SurefireExecutionException( "Unable to instantiate and execute Surefire", e );
+        }
     }
 
     private boolean runSuitesForkOnce()
@@ -244,7 +265,24 @@
 
         Object[] params = (Object[]) testSuite[1];
 
-        Object suite = Surefire.instantiateObject( className, params, surefireClassLoader );
+        Object suite;
+        try
+        {
+            suite = Surefire.instantiateObject( className, params, surefireClassLoader );
+        }
+        catch ( TestSetFailedException e )
+        {
+            throw new SurefireBooterForkException( e.getMessage(), e.getCause() );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new SurefireBooterForkException( "Unable to find class for test suite '" + className + "'", e );
+        }
+        catch ( NoSuchMethodException e )
+        {
+            throw new SurefireBooterForkException(
+                "Unable to find appropriate constructor for test suite '" + className + "': " + e.getMessage(), e );
+        }
 
         Map testSets;
         try
@@ -263,7 +301,7 @@
         }
         catch ( InvocationTargetException e )
         {
-            throw new SurefireBooterForkException( "Error obtaining test sets", e );
+            throw new SurefireBooterForkException( e.getTargetException().getMessage(), e.getTargetException() );
         }
         return testSets;
     }
@@ -553,8 +591,7 @@
      * @param args
      */
     public static void main( String[] args )
-        throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException,
-        NoSuchMethodException, IOException
+        throws SurefireExecutionException, IOException
     {
         if ( args.length > 1 )
         {

Added: maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java?rev=382699&view=auto
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java (added)
+++ maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java Thu Mar  2 23:09:40 2006
@@ -0,0 +1,31 @@
+package org.apache.maven.surefire.booter;
+
+/*
+ * 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.
+ */
+
+/**
+ * An error occurring during the invocation of Surefire via an alternate class loader.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class SurefireExecutionException
+    extends Exception
+{
+    public SurefireExecutionException( String message, Throwable nested )
+    {
+        super( message, nested );
+    }
+}

Propchange: maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireExecutionException.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitDirectoryTestSuite.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitDirectoryTestSuite.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitDirectoryTestSuite.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitDirectoryTestSuite.java Thu Mar  2 23:09:40 2006
@@ -23,7 +23,7 @@
 import java.util.ArrayList;
 
 /**
- * TODO: Description.
+ * Test suite for JUnit tests based on a directory of Java test classes.
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */

Modified: maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java Thu Mar  2 23:09:40 2006
@@ -273,7 +273,7 @@
         }
         catch ( InvocationTargetException e )
         {
-            throw new TestSetFailedException( testObject.getClass().getName(), e );
+            throw new TestSetFailedException( testObject.getClass().getName(), e.getTargetException() );
         }
     }
 
@@ -305,7 +305,7 @@
         }
         catch ( InvocationTargetException e )
         {
-            throw new TestSetFailedException( testObject.getClass().getName(), e );
+            throw new TestSetFailedException( testObject.getClass().getName(), e.getTargetException() );
         }
     }
 

Modified: maven/surefire/branches/surefire-testng/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java?rev=382699&r1=382698&r2=382699&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java Thu Mar  2 23:09:40 2006
@@ -23,7 +23,7 @@
 import java.util.ArrayList;
 
 /**
- * Test suite for TestNG based on a directory of Java test classes.
+ * Test suite for TestNG based on a directory of Java test classes. Can also execute JUnit tests.
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */