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/04 16:23:41 UTC

svn commit: r383136 - 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-booter/src/main/java/org/apache/maven/surefire/booter/

Author: brett
Date: Sat Mar  4 07:23:41 2006
New Revision: 383136

URL: http://svn.apache.org/viewcvs?rev=383136&view=rev
Log:
[MSUREFIRE-62] only write results after all tests completed

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/AbstractReporter.java
    maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.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-booter/src/main/java/org/apache/maven/surefire/booter/ForkingWriterStreamConsumer.java
    maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.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=383136&r1=383135&r2=383136&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 Sat Mar  4 07:23:41 2006
@@ -27,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 import java.util.ResourceBundle;
 
 /**
@@ -43,9 +44,21 @@
                         ClassLoader surefireClassLoader, ClassLoader testsClassLoader )
         throws ReporterException, TestSetFailedException
     {
+        return run( reportDefinitions, testSuiteDefinition, testSetName, surefireClassLoader, testsClassLoader, null );
+    }
+
+    public boolean run( List reportDefinitions, Object[] testSuiteDefinition, String testSetName,
+                        ClassLoader surefireClassLoader, ClassLoader testsClassLoader, Properties results )
+        throws ReporterException, TestSetFailedException
+    {
         ReporterManager reporterManager =
             new ReporterManager( instantiateReports( reportDefinitions, surefireClassLoader ) );
 
+        if ( results != null )
+        {
+            reporterManager.initResultsFromProperties( results );
+        }
+
         int totalTests = 0;
 
         SurefireTestSuite suite =
@@ -69,6 +82,8 @@
         }
 
         reporterManager.runCompleted();
+
+        reporterManager.updateResultsProperties( results );
 
         return reporterManager.getNumErrors() == 0 && reporterManager.getNumFailures() == 0;
     }

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=383136&r1=383135&r2=383136&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 Sat Mar  4 07:23:41 2006
@@ -58,6 +58,11 @@
         writeHeading( "-------------------------------------------------------" );
     }
 
+    public void runCompleted()
+    {
+        super.runCompleted();    //To change body of overridden methods use File | Settings | File Templates.
+    }
+
     public void writeHeading( String message )
     {
         writer.println( message );

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=383136&r1=383135&r2=383136&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 Sat Mar  4 07:23:41 2006
@@ -51,6 +51,11 @@
     // Report interface
     // ----------------------------------------------------------------------
 
+    public void writeFooter( String footer )
+    {
+        writeMessage( footer );
+    }
+
     public void runStarting( int testCount )
     {
     }

Modified: maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java?rev=383136&r1=383135&r2=383136&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-api/src/main/java/org/apache/maven/surefire/report/ForkingConsoleReporter.java Sat Mar  4 07:23:41 2006
@@ -23,11 +23,21 @@
 
     public static final String FORKING_PREFIX_HEADING = "@HL";
 
+    public static final String FORKING_PREFIX_FOOTER = "@FL";
+
     public void writeHeading( String message )
     {
         writer.print( FORKING_PREFIX_HEADING );
 
         super.writeHeading( message );
+    }
+
+    public void writeFooter( String footer )
+    {
+        writer.print( FORKING_PREFIX_FOOTER );
+
+        // Deliberately set to writeMessage
+        super.writeMessage( footer );
     }
 
     public void writeMessage( String message )

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=383136&r1=383135&r2=383136&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 Sat Mar  4 07:23:41 2006
@@ -20,6 +20,8 @@
 {
     void writeMessage( String message );
 
+    void writeFooter( String footer );
+
     // The entire run
     void runStarting( int testCount );
 

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=383136&r1=383135&r2=383136&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 Sat Mar  4 07:23:41 2006
@@ -22,6 +22,7 @@
 import java.io.PrintStream;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 
 public class ReporterManager
 {
@@ -43,6 +44,14 @@
 
     private int skipped;
 
+    private static final String RESULTS_ERRORS = "errors";
+
+    private static final String RESULTS_COMPLETED_COUNT = "completedCount";
+
+    private static final String RESULTS_FAILURES = "failures";
+
+    private static final String RESULTS_SKIPPED = "skipped";
+
     public ReporterManager( List reports )
     {
         this.reports = reports;
@@ -144,11 +153,21 @@
             reporter.runCompleted();
         }
 
-        writeMessage( "" );
-        writeMessage( "Results :" );
-        writeMessage( "Tests run: " + completedCount + ", Failures: " + failures + ", Errors: " + errors +
+        writeFooter( "" );
+        writeFooter( "Results :" );
+        writeFooter( "Tests run: " + completedCount + ", Failures: " + failures + ", Errors: " + errors +
             ", Skipped: " + skipped );
-        writeMessage( "" );
+        writeFooter( "" );
+    }
+
+    private void writeFooter( String footer )
+    {
+        for ( Iterator i = reports.iterator(); i.hasNext(); )
+        {
+            Reporter report = (Reporter) i.next();
+
+            report.writeFooter( footer );
+        }
     }
 
     private ByteArrayOutputStream stdOut;
@@ -332,5 +351,21 @@
 
             reporter.testSkipped( report );
         }
+    }
+
+    public void initResultsFromProperties( Properties results )
+    {
+        errors = Integer.valueOf( results.getProperty( RESULTS_ERRORS, "0" ) ).intValue();
+        skipped = Integer.valueOf( results.getProperty( RESULTS_SKIPPED, "0" ) ).intValue();
+        failures = Integer.valueOf( results.getProperty( RESULTS_FAILURES, "0" ) ).intValue();
+        completedCount = Integer.valueOf( results.getProperty( RESULTS_COMPLETED_COUNT, "0" ) ).intValue();
+    }
+
+    public void updateResultsProperties( Properties results )
+    {
+        results.setProperty( RESULTS_ERRORS, String.valueOf( errors ) );
+        results.setProperty( RESULTS_COMPLETED_COUNT, String.valueOf( completedCount ) );
+        results.setProperty( RESULTS_FAILURES, String.valueOf( failures ) );
+        results.setProperty( RESULTS_SKIPPED, String.valueOf( skipped ) );
     }
 }

Modified: maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkingWriterStreamConsumer.java
URL: http://svn.apache.org/viewcvs/maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkingWriterStreamConsumer.java?rev=383136&r1=383135&r2=383136&view=diff
==============================================================================
--- maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkingWriterStreamConsumer.java (original)
+++ maven/surefire/branches/surefire-testng/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkingWriterStreamConsumer.java Sat Mar  4 07:23:41 2006
@@ -37,15 +37,23 @@
 
     private boolean showHeading;
 
-    public ForkingWriterStreamConsumer( Writer writer, boolean showHeading )
+    private int footerPrefixLength;
+
+    private boolean showFooter;
+
+    public ForkingWriterStreamConsumer( Writer writer, boolean showHeading, boolean showFooter )
     {
         this.showHeading = showHeading;
 
+        this.showFooter = showFooter;
+
         printWriter = new PrintWriter( writer );
 
         standardPrefixLength = ForkingConsoleReporter.FORKING_PREFIX_STANDARD.length();
 
         headingPrefixLength = ForkingConsoleReporter.FORKING_PREFIX_HEADING.length();
+
+        footerPrefixLength = ForkingConsoleReporter.FORKING_PREFIX_FOOTER.length();
     }
 
     public void consumeLine( String line )
@@ -60,6 +68,13 @@
         else if ( line.startsWith( ForkingConsoleReporter.FORKING_PREFIX_STANDARD ) )
         {
             printWriter.println( line.substring( standardPrefixLength ) );
+        }
+        else if ( line.startsWith( ForkingConsoleReporter.FORKING_PREFIX_FOOTER ) )
+        {
+            if ( showFooter )
+            {
+                printWriter.println( line.substring( footerPrefixLength ) );
+            }
         }
         else
         {

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=383136&r1=383135&r2=383136&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 Sat Mar  4 07:23:41 2006
@@ -26,6 +26,7 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
@@ -127,7 +128,7 @@
         return result;
     }
 
-    private boolean runSuitesInProcess( String testSet, boolean childDelegation )
+    private boolean runSuitesInProcess( String testSet, boolean childDelegation, Properties results )
         throws SurefireExecutionException
     {
         if ( testSuites.size() != 1 )
@@ -151,14 +152,14 @@
             Object surefire = surefireClass.newInstance();
 
             Method run = surefireClass.getMethod( "run", new Class[]{List.class, Object[].class, String.class,
-                ClassLoader.class, ClassLoader.class} );
+                ClassLoader.class, ClassLoader.class, Properties.class} );
 
             ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
 
             Thread.currentThread().setContextClassLoader( testsClassLoader );
 
             Boolean result = (Boolean) run.invoke( surefire, new Object[]{reports, testSuites.get( 0 ), testSet,
-                surefireClassLoader, testsClassLoader} );
+                surefireClassLoader, testsClassLoader, results} );
 
             Thread.currentThread().setContextClassLoader( oldContextClassLoader );
 
@@ -218,7 +219,7 @@
     private boolean runSuitesForkOnce()
         throws SurefireBooterForkException
     {
-        return forkSuites( testSuites, true );
+        return forkSuites( testSuites, true, true );
     }
 
     private boolean runSuitesForkPerTestSet()
@@ -240,6 +241,7 @@
         boolean failed = false;
 
         boolean showHeading = true;
+        Properties properties = new Properties();
         for ( Iterator i = testSuites.iterator(); i.hasNext(); )
         {
             Object[] testSuite = (Object[]) i.next();
@@ -249,7 +251,8 @@
             for ( Iterator j = testSets.keySet().iterator(); j.hasNext(); )
             {
                 String testSet = (String) j.next();
-                boolean result = forkSuite( testSuite, testSet, showHeading );
+                boolean showFooter = !j.hasNext() && !i.hasNext();
+                boolean result = forkSuite( testSuite, testSet, showHeading, showFooter, properties );
                 if ( !result )
                 {
                     failed = true;
@@ -309,28 +312,29 @@
         return testSets;
     }
 
-    private boolean forkSuites( List testSuites, boolean showHeading )
+    private boolean forkSuites( List testSuites, boolean showHeading, boolean showFooter )
         throws SurefireBooterForkException
     {
-        Properties properties = createForkProperties( testSuites );
+        Properties properties = new Properties();
 
-        return fork( properties, showHeading );
+        setForkProperties( testSuites, properties );
+
+        return fork( properties, showHeading, showFooter );
     }
 
-    private boolean forkSuite( Object[] testSuite, String testSet, boolean showHeading )
+    private boolean forkSuite( Object[] testSuite, String testSet, boolean showHeading, boolean showFooter,
+                               Properties properties )
         throws SurefireBooterForkException
     {
-        Properties properties = createForkProperties( Collections.singletonList( testSuite ) );
+        setForkProperties( Collections.singletonList( testSuite ), properties );
 
         properties.setProperty( "testSet", testSet );
 
-        return fork( properties, showHeading );
+        return fork( properties, showHeading, showFooter );
     }
 
-    private Properties createForkProperties( List testSuites )
+    private void setForkProperties( List testSuites, Properties properties )
     {
-        Properties properties = new Properties();
-
         addPropertiesForTypeHolder( reports, properties, "report." );
         addPropertiesForTypeHolder( testSuites, properties, "testSuite." );
 
@@ -347,7 +351,6 @@
         }
 
         properties.setProperty( "childDelegation", String.valueOf( forkConfiguration.isChildDelegation() ) );
-        return properties;
     }
 
     private File writePropertiesFile( String name, Properties properties )
@@ -356,6 +359,14 @@
         File file = File.createTempFile( name, "tmp" );
         file.deleteOnExit();
 
+        writePropertiesFile( file, name, properties );
+
+        return file;
+    }
+
+    private void writePropertiesFile( File file, String name, Properties properties )
+        throws IOException
+    {
         FileOutputStream out = new FileOutputStream( file );
 
         try
@@ -366,8 +377,6 @@
         {
             IOUtil.close( out );
         }
-
-        return file;
     }
 
     private void addPropertiesForTypeHolder( List typeHolderList, Properties properties, String propertyPrefix )
@@ -401,7 +410,7 @@
         }
     }
 
-    private boolean fork( Properties properties, boolean showHeading )
+    private boolean fork( Properties properties, boolean showHeading, boolean showFooter )
         throws SurefireBooterForkException
     {
         File surefireProperties;
@@ -430,9 +439,9 @@
 
         Writer consoleWriter = new OutputStreamWriter( System.out );
 
-        StreamConsumer out = new ForkingWriterStreamConsumer( consoleWriter, showHeading );
+        StreamConsumer out = new ForkingWriterStreamConsumer( consoleWriter, showHeading, showFooter );
 
-        StreamConsumer err = new ForkingWriterStreamConsumer( consoleWriter, showHeading );
+        StreamConsumer err = new ForkingWriterStreamConsumer( consoleWriter, showHeading, showFooter );
 
         if ( forkConfiguration.isDebug() )
         {
@@ -450,6 +459,29 @@
             throw new SurefireBooterForkException( "Error while executing forked tests.", e );
         }
 
+        if ( surefireProperties != null && surefireProperties.exists() )
+        {
+            FileInputStream inStream = null;
+            try
+            {
+                inStream = new FileInputStream( surefireProperties );
+
+                properties.load( inStream );
+            }
+            catch ( FileNotFoundException e )
+            {
+                throw new SurefireBooterForkException( "Unable to reload properties file from forked process", e );
+            }
+            catch ( IOException e )
+            {
+                throw new SurefireBooterForkException( "Unable to reload properties file from forked process", e );
+            }
+            finally
+            {
+                IOUtil.close( inStream );
+            }
+        }
+
         return returnCode == 0;
     }
 
@@ -614,7 +646,8 @@
             setSystemProperties( new File( args[1] ) );
         }
 
-        Properties p = loadProperties( new File( args[0] ) );
+        File surefirePropertiesFile = new File( args[0] );
+        Properties p = loadProperties( surefirePropertiesFile );
 
         SurefireBooter surefireBooter = new SurefireBooter();
 
@@ -653,12 +686,14 @@
         boolean result;
         if ( testSet != null )
         {
-            result = surefireBooter.runSuitesInProcess( testSet, childDelegation );
+            result = surefireBooter.runSuitesInProcess( testSet, childDelegation, p );
         }
         else
         {
             result = surefireBooter.runSuitesInProcess( childDelegation );
         }
+
+        surefireBooter.writePropertiesFile( surefirePropertiesFile, "surefire", p );
 
         //noinspection CallToSystemExit
         System.exit( result ? TESTS_SUCCEEDED_EXIT_CODE : TESTS_FAILED_EXIT_CODE );