Repository: maven-surefire
Updated Branches:
  refs/heads/master d4135dd77 -> bb99b232d


Added close in finally-blocks to avoid resource leakage on non-forced kills


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/bb99b232
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/bb99b232
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/bb99b232

Branch: refs/heads/master
Commit: bb99b232da0e93f2772be6945a410ea9ba666c4f
Parents: d4135dd
Author: Kristian Rosenvold <krosenv...@apache.org>
Authored: Sun Oct 25 11:47:41 2015 +0100
Committer: Kristian Rosenvold <krosenv...@apache.org>
Committed: Sun Oct 25 11:47:41 2015 +0100

----------------------------------------------------------------------
 .../booterclient/ForkConfiguration.java         |  60 ++++++-----
 .../plugin/surefire/report/FileReporter.java    |  29 +++---
 .../runorder/RunEntryStatisticsMap.java         |  16 ++-
 .../report/LegacyPojoStackTraceWriter.java      |  13 ++-
 .../apache/maven/surefire/suite/RunResult.java  |  23 +++--
 .../surefire/report/PojoStackTraceWriter.java   |  10 +-
 .../maven/surefire/junit/JUnit3Provider.java    |  36 ++++---
 .../maven/surefire/junit4/JUnit4Provider.java   | 102 ++++++++++---------
 .../surefire/junitcore/JUnitCoreProvider.java   |  21 ++--
 .../maven/surefire/junitcore/pc/Scheduler.java  |  10 +-
 .../junitcore/pc/SchedulingStrategy.java        |  10 +-
 .../surefire/junitcore/JUnitCoreTester.java     |  41 ++++----
 .../maven/surefire/testng/TestNGProvider.java   |  83 ++++++++-------
 13 files changed, 269 insertions(+), 185 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java
index e5c8a42..1477e87 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ForkConfiguration.java
@@ -19,6 +19,16 @@ package org.apache.maven.plugin.surefire.booterclient;
  * under the License.
  */
 
+import org.apache.maven.plugin.surefire.AbstractSurefireMojo;
+import 
org.apache.maven.plugin.surefire.booterclient.lazytestprovider.OutputStreamFlushableCommandline;
+import org.apache.maven.plugin.surefire.util.Relocator;
+import org.apache.maven.shared.utils.StringUtils;
+import org.apache.maven.surefire.booter.Classpath;
+import org.apache.maven.surefire.booter.ForkedBooter;
+import org.apache.maven.surefire.booter.StartupConfiguration;
+import org.apache.maven.surefire.booter.SurefireBooterForkException;
+import org.apache.maven.surefire.util.UrlUtils;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -30,16 +40,6 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
 
-import org.apache.maven.plugin.surefire.AbstractSurefireMojo;
-import 
org.apache.maven.plugin.surefire.booterclient.lazytestprovider.OutputStreamFlushableCommandline;
-import org.apache.maven.plugin.surefire.util.Relocator;
-import org.apache.maven.shared.utils.StringUtils;
-import org.apache.maven.surefire.booter.Classpath;
-import org.apache.maven.surefire.booter.ForkedBooter;
-import org.apache.maven.surefire.booter.StartupConfiguration;
-import org.apache.maven.surefire.booter.SurefireBooterForkException;
-import org.apache.maven.surefire.util.UrlUtils;
-
 /**
  * Configuration for forking tests.
  *
@@ -275,27 +275,33 @@ public class ForkConfiguration
         }
         FileOutputStream fos = new FileOutputStream( file );
         JarOutputStream jos = new JarOutputStream( fos );
-        jos.setLevel( JarOutputStream.STORED );
-        JarEntry je = new JarEntry( "META-INF/MANIFEST.MF" );
-        jos.putNextEntry( je );
+        try
+        {
+            jos.setLevel( JarOutputStream.STORED );
+            JarEntry je = new JarEntry( "META-INF/MANIFEST.MF" );
+            jos.putNextEntry( je );
 
-        Manifest man = new Manifest();
+            Manifest man = new Manifest();
 
-        // we can't use StringUtils.join here since we need to add a '/' to
-        // the end of directory entries - otherwise the jvm will ignore them.
-        String cp = "";
-        for ( String el : classPath )
-        {
-            // NOTE: if File points to a directory, this entry MUST end in '/'.
-            cp += UrlUtils.getURL( new File( el ) ).toExternalForm() + " ";
-        }
+            // we can't use StringUtils.join here since we need to add a '/' to
+            // the end of directory entries - otherwise the jvm will ignore 
them.
+            String cp = "";
+            for ( String el : classPath )
+            {
+                // NOTE: if File points to a directory, this entry MUST end in 
'/'.
+                cp += UrlUtils.getURL( new File( el ) ).toExternalForm() + " ";
+            }
 
-        man.getMainAttributes().putValue( "Manifest-Version", "1.0" );
-        man.getMainAttributes().putValue( "Class-Path", cp.trim() );
-        man.getMainAttributes().putValue( "Main-Class", startClassName );
+            man.getMainAttributes().putValue( "Manifest-Version", "1.0" );
+            man.getMainAttributes().putValue( "Class-Path", cp.trim() );
+            man.getMainAttributes().putValue( "Main-Class", startClassName );
 
-        man.write( jos );
-        jos.close();
+            man.write( jos );
+        }
+        finally
+        {
+            jos.close();
+        }
 
         return file;
     }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/FileReporter.java
----------------------------------------------------------------------
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/FileReporter.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/FileReporter.java
index fddb00f..2e862cf 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/FileReporter.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/FileReporter.java
@@ -19,15 +19,15 @@ package org.apache.maven.plugin.surefire.report;
  * under the License.
  */
 
+import org.apache.maven.surefire.report.ReportEntry;
+import org.apache.maven.surefire.report.ReporterException;
+
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.List;
 
-import org.apache.maven.surefire.report.ReportEntry;
-import org.apache.maven.surefire.report.ReporterException;
-
 import static 
org.apache.maven.plugin.surefire.report.FileReporterUtils.stripIllegalFilenameChars;
 
 /**
@@ -105,18 +105,23 @@ public class FileReporter
     public void testSetCompleted( WrappedReportEntry report, TestSetStats 
testSetStats, List<String> testResults )
     {
         PrintWriter writer = testSetStarting( report );
-        writer.print( testSetStats.getTestSetSummary( report ) );
-
-        if ( testResults != null )
+        try
         {
-            for ( String testResult : testResults )
+            writer.print( testSetStats.getTestSetSummary( report ) );
+
+            if ( testResults != null )
             {
-                writer.println( testResult );
+                for ( String testResult : testResults )
+                {
+                    writer.println( testResult );
+                }
             }
-        }
-
-        writer.flush();
 
-        writer.close();
+            writer.flush();
+        }
+        finally
+        {
+            writer.close();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
----------------------------------------------------------------------
diff --git 
a/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
 
b/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
index 9e9bf10..9c110a5 100644
--- 
a/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
+++ 
b/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
@@ -103,13 +103,19 @@ public class RunEntryStatisticsMap
     {
         FileOutputStream fos = new FileOutputStream( file );
         PrintWriter printWriter = new PrintWriter( fos );
-        List<RunEntryStatistics> items = new ArrayList<RunEntryStatistics>( 
runEntryStatistics.values() );
-        Collections.sort( items, new RunCountComparator() );
-        for ( RunEntryStatistics item : items )
+        try
         {
-            printWriter.println( item.toString() );
+            List<RunEntryStatistics> items = new 
ArrayList<RunEntryStatistics>( runEntryStatistics.values() );
+            Collections.sort( items, new RunCountComparator() );
+            for ( RunEntryStatistics item : items )
+            {
+                printWriter.println( item.toString() );
+            }
+        }
+        finally
+        {
+            printWriter.close();
         }
-        printWriter.close();
     }
 
     public RunEntryStatistics findOrCreate( ReportEntry reportEntry )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java
----------------------------------------------------------------------
diff --git 
a/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java
 
b/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java
index d19c618..dc9c984 100644
--- 
a/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java
+++ 
b/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java
@@ -20,9 +20,10 @@ package org.apache.maven.surefire.report;
  */
 
 
+import org.apache.maven.surefire.util.internal.StringUtils;
+
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import org.apache.maven.surefire.util.internal.StringUtils;
 
 /**
  * Write the trace out for a POJO test. Java 1.5 compatible.
@@ -54,8 +55,14 @@ public class LegacyPojoStackTraceWriter
         {
             StringWriter w = new StringWriter();
             PrintWriter stackTrace = new PrintWriter( w );
-            t.printStackTrace( stackTrace );
-            stackTrace.close();
+            try
+            {
+                t.printStackTrace( stackTrace );
+            }
+            finally
+            {
+                stackTrace.close();
+            }
             w.flush();
             StringBuffer builder = w.getBuffer();
             if ( isMultiLineExceptionMessage( t ) )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-api/src/main/java/org/apache/maven/surefire/suite/RunResult.java
----------------------------------------------------------------------
diff --git 
a/surefire-api/src/main/java/org/apache/maven/surefire/suite/RunResult.java 
b/surefire-api/src/main/java/org/apache/maven/surefire/suite/RunResult.java
index 793c5db..ceff77a 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/suite/RunResult.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/suite/RunResult.java
@@ -19,6 +19,13 @@ package org.apache.maven.surefire.suite;
  * under the License.
  */
 
+import org.apache.maven.shared.utils.StringUtils;
+import org.apache.maven.shared.utils.io.IOUtil;
+import org.apache.maven.shared.utils.xml.PrettyPrintXMLWriter;
+import org.apache.maven.shared.utils.xml.Xpp3Dom;
+import org.apache.maven.shared.utils.xml.Xpp3DomBuilder;
+import org.apache.maven.shared.utils.xml.Xpp3DomWriter;
+
 import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -28,12 +35,6 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
-import org.apache.maven.shared.utils.StringUtils;
-import org.apache.maven.shared.utils.io.IOUtil;
-import org.apache.maven.shared.utils.xml.PrettyPrintXMLWriter;
-import org.apache.maven.shared.utils.xml.Xpp3Dom;
-import org.apache.maven.shared.utils.xml.Xpp3DomBuilder;
-import org.apache.maven.shared.utils.xml.Xpp3DomWriter;
 
 /**
  * Represents a test-run-result; this may be from a single test run or an 
aggregated result.
@@ -117,8 +118,14 @@ public class RunResult
         }
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         PrintWriter pw = new PrintWriter( out );
-        e.printStackTrace( pw );
-        pw.close();
+        try
+        {
+            e.printStackTrace( pw );
+        }
+        finally
+        {
+            pw.close();
+        }
         return new String( out.toByteArray() );
     }
 

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java
 
b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java
index baef627..a4646c6 100644
--- 
a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java
+++ 
b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java
@@ -50,8 +50,14 @@ public class PojoStackTraceWriter
         {
             StringWriter w = new StringWriter();
             PrintWriter stackTrace = new PrintWriter( w );
-            t.printStackTrace( stackTrace );
-            stackTrace.close();
+            try
+            {
+                t.printStackTrace( stackTrace );
+            }
+            finally
+            {
+                stackTrace.close();
+            }
             w.flush();
             StringBuffer builder = w.getBuffer();
             if ( isMultiLineExceptionMessage( t ) )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
 
b/surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
index 01bd54b..55f89be 100644
--- 
a/surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
+++ 
b/surefire-providers/surefire-junit3/src/main/java/org/apache/maven/surefire/junit/JUnit3Provider.java
@@ -89,24 +89,32 @@ public class JUnit3Provider
         }
 
         ReporterFactory reporterFactory = 
providerParameters.getReporterFactory();
-        final RunListener reporter = reporterFactory.createReporter();
-        ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) reporter );
-
-        final String smClassName = System.getProperty( 
"surefire.security.manager" );
-        if ( smClassName != null )
+        RunResult runResult;
+        try
         {
-            SecurityManager securityManager =
-                ReflectionUtils.instantiate( getClass().getClassLoader(), 
smClassName, SecurityManager.class );
-            System.setSecurityManager( securityManager );
-        }
+            final RunListener reporter = reporterFactory.createReporter();
+            ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) 
reporter );
+
+            final String smClassName = System.getProperty( 
"surefire.security.manager" );
+            if ( smClassName != null )
+            {
+                SecurityManager securityManager =
+                    ReflectionUtils.instantiate( getClass().getClassLoader(), 
smClassName, SecurityManager.class );
+                System.setSecurityManager( securityManager );
+            }
 
-        for ( Class<?> clazz : testsToRun )
+            for ( Class<?> clazz : testsToRun )
+            {
+                SurefireTestSet surefireTestSet = createTestSet( clazz );
+                executeTestSet( surefireTestSet, reporter, testClassLoader );
+            }
+
+        }
+        finally
         {
-            SurefireTestSet surefireTestSet = createTestSet( clazz );
-            executeTestSet( surefireTestSet, reporter, testClassLoader );
+            runResult = reporterFactory.close();
         }
-
-        return reporterFactory.close();
+        return runResult;
     }
 
     private SurefireTestSet createTestSet( Class<?> clazz )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
 
b/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
index 493369d..5a3bdf6 100644
--- 
a/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
+++ 
b/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java
@@ -19,9 +19,6 @@ package org.apache.maven.surefire.junit4;
  * under the License.
  */
 
-import java.util.Collection;
-import java.util.Set;
-
 import org.apache.maven.surefire.booter.Command;
 import org.apache.maven.surefire.booter.MasterProcessListener;
 import org.apache.maven.surefire.booter.MasterProcessReader;
@@ -51,6 +48,12 @@ import org.junit.runner.Runner;
 import org.junit.runner.manipulation.Filter;
 import org.junit.runner.notification.StoppedByUserException;
 
+import java.util.Collection;
+import java.util.Set;
+
+import static java.lang.reflect.Modifier.isAbstract;
+import static java.lang.reflect.Modifier.isInterface;
+import static java.util.Collections.unmodifiableCollection;
 import static 
org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.cutTestClassAndMethod;
 import static 
org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.generateFailingTests;
 import static 
org.apache.maven.surefire.common.junit4.JUnit4Reflector.createDescription;
@@ -63,9 +66,6 @@ import static 
org.apache.maven.surefire.testset.TestListResolver.toClassFileName
 import static org.apache.maven.surefire.util.TestsToRun.fromClass;
 import static org.junit.runner.Request.aClass;
 import static org.junit.runner.Request.method;
-import static java.lang.reflect.Modifier.isAbstract;
-import static java.lang.reflect.Modifier.isInterface;
-import static java.util.Collections.unmodifiableCollection;
 
 /**
  * @author Kristian Rosenvold
@@ -98,9 +98,8 @@ public class JUnit4Provider
     public JUnit4Provider( ProviderParameters booterParameters )
     {
         // don't start a thread in MasterProcessReader while we are in 
in-plugin process
-        commandsReader = booterParameters.isInsideFork()
-            ? MasterProcessReader.getReader().setShutdown( 
booterParameters.getShutdown() )
-            : null;
+        commandsReader = booterParameters.isInsideFork() ? 
MasterProcessReader.getReader().setShutdown(
+            booterParameters.getShutdown() ) : null;
         providerParameters = booterParameters;
         testClassLoader = booterParameters.getTestClassLoader();
         scanResult = booterParameters.getScanResult();
@@ -141,56 +140,64 @@ public class JUnit4Provider
 
         ReporterFactory reporterFactory = 
providerParameters.getReporterFactory();
 
-        RunListener reporter = reporterFactory.createReporter();
+        RunResult runResult;
+        try
+        {
 
-        startCapture( (ConsoleOutputReceiver) reporter );
+            RunListener reporter = reporterFactory.createReporter();
 
-        Notifier notifier = new Notifier( new JUnit4RunListener( reporter ), 
getSkipAfterFailureCount() );
-        if ( isFailFast() )
-        {
-            notifier.addListener( new JUnit4FailFastListener( notifier ) );
-        }
-        Result result = new Result();
-        notifier.addListeners( customRunListeners )
-            .addListener( result.createListener() );
+            startCapture( (ConsoleOutputReceiver) reporter );
 
-        if ( isFailFast() && commandsReader != null )
-        {
-            registerPleaseStopJunitListener( notifier );
-        }
+            Notifier notifier = new Notifier( new JUnit4RunListener( reporter 
), getSkipAfterFailureCount() );
+            if ( isFailFast() )
+            {
+                notifier.addListener( new JUnit4FailFastListener( notifier ) );
+            }
+            Result result = new Result();
+            notifier.addListeners( customRunListeners ).addListener( 
result.createListener() );
 
-        try
-        {
-            notifier.fireTestRunStarted( testsToRun.allowEagerReading()
-                                                ? createTestsDescription( 
testsToRun )
-                                                : createDescription( 
UNDETERMINED_TESTS_DESCRIPTION ) );
+            if ( isFailFast() && commandsReader != null )
+            {
+                registerPleaseStopJunitListener( notifier );
+            }
 
-            if ( commandsReader != null )
+            try
             {
-                commandsReader.addShutdownListener( new MasterProcessListener()
+                notifier.fireTestRunStarted( testsToRun.allowEagerReading()
+                                                 ? createTestsDescription( 
testsToRun )
+                                                 : createDescription( 
UNDETERMINED_TESTS_DESCRIPTION ) );
+
+                if ( commandsReader != null )
                 {
-                    public void update( Command command )
+                    commandsReader.addShutdownListener( new 
MasterProcessListener()
                     {
-                        testsToRun.markTestSetFinished();
-                    }
-                } );
-                commandsReader.awaitStarted();
-            }
+                        public void update( Command command )
+                        {
+                            testsToRun.markTestSetFinished();
+                        }
+                    } );
+                    commandsReader.awaitStarted();
+                }
 
-            for ( Class<?> aTestsToRun : testsToRun )
+                for ( Class<?> aTestsToRun : testsToRun )
+                {
+                    executeTestSet( aTestsToRun, reporter, notifier );
+                }
+            }
+            finally
             {
-                executeTestSet( aTestsToRun, reporter, notifier );
+                notifier.fireTestRunFinished( result );
+                notifier.removeListeners();
+                closeCommandsReader();
             }
+
+            rethrowAnyTestMechanismFailures( result );
         }
         finally
         {
-            notifier.fireTestRunFinished( result );
-            notifier.removeListeners();
-            closeCommandsReader();
+            runResult = reporterFactory.close();
         }
-
-        rethrowAnyTestMechanismFailures( result );
-        return reporterFactory.close();
+        return runResult;
     }
 
     private boolean isRerunFailingTests()
@@ -259,7 +266,8 @@ public class JUnit4Provider
         }
     }
 
-    private void executeWithRerun( Class<?> clazz, Notifier notifier ) throws 
TestSetFailedException
+    private void executeWithRerun( Class<?> clazz, Notifier notifier )
+        throws TestSetFailedException
     {
         JUnitTestFailureListener failureListener = new 
JUnitTestFailureListener();
         notifier.addListener( failureListener );
@@ -405,8 +413,8 @@ public class JUnit4Provider
         else
         {
             name = name.trim();
-            return name.startsWith( 
"initializationError0(org.junit.runner.manipulation.Filter)" )
-                || name.startsWith( 
"initializationError(org.junit.runner.manipulation.Filter)" );
+            return name.startsWith( 
"initializationError0(org.junit.runner.manipulation.Filter)" ) || 
name.startsWith(
+                "initializationError(org.junit.runner.manipulation.Filter)" );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
index ba63f7e..9d03a85 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
@@ -19,12 +19,6 @@ package org.apache.maven.surefire.junitcore;
  * under the License.
  */
 
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.maven.surefire.booter.Command;
 import org.apache.maven.surefire.booter.MasterProcessListener;
 import org.apache.maven.surefire.booter.MasterProcessReader;
@@ -50,10 +44,16 @@ import org.junit.runner.manipulation.Filter;
 import org.junit.runner.notification.Failure;
 import org.junit.runner.notification.RunListener;
 
-import static 
org.apache.maven.surefire.junitcore.ConcurrentRunListener.createInstance;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static java.util.Collections.unmodifiableCollection;
 import static 
org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.generateFailingTests;
 import static 
org.apache.maven.surefire.common.junit4.JUnit4RunListenerFactory.createCustomListeners;
-import static java.util.Collections.unmodifiableCollection;
+import static 
org.apache.maven.surefire.junitcore.ConcurrentRunListener.createInstance;
 
 /**
  * @author Kristian Rosenvold
@@ -125,6 +125,8 @@ public class JUnitCoreProvider
 
         final ReporterFactory reporterFactory = 
providerParameters.getReporterFactory();
 
+        RunResult runResult;
+
         final ConsoleLogger consoleLogger = 
providerParameters.getConsoleLogger();
 
         Filter filter = jUnit48Reflector.isJUnit48Available() ? 
createJUnit48Filter() : null;
@@ -189,13 +191,14 @@ public class JUnitCoreProvider
                     core.execute( testsToRun, failingMethodsFilter );
                 }
             }
-            return reporterFactory.close();
         }
         finally
         {
+            runResult = reporterFactory.close();
             notifier.removeListeners();
             closeCommandsReader();
         }
+        return runResult;
     }
 
     private boolean isRerunFailingTests()

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/Scheduler.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/Scheduler.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/Scheduler.java
index 9fa1e40..a957340 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/Scheduler.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/Scheduler.java
@@ -207,8 +207,14 @@ public class Scheduler
     {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         PrintStream stream = new PrintStream( out );
-        t.printStackTrace( stream );
-        stream.close();
+        try
+        {
+            t.printStackTrace( stream );
+        }
+        finally
+        {
+            stream.close();
+        }
         logger.info( out.toString() );
     }
 

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/SchedulingStrategy.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/SchedulingStrategy.java
 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/SchedulingStrategy.java
index 02e2be3..3d015a3 100644
--- 
a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/SchedulingStrategy.java
+++ 
b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/pc/SchedulingStrategy.java
@@ -136,8 +136,14 @@ public abstract class SchedulingStrategy
     {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         PrintStream stream = new PrintStream( out );
-        t.printStackTrace( stream );
-        stream.close();
+        try
+        {
+            t.printStackTrace( stream );
+        }
+        finally
+        {
+            stream.close();
+        }
         logger.info( out.toString() );
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreTester.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreTester.java
 
b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreTester.java
index c805037..e021647 100644
--- 
a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreTester.java
+++ 
b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreTester.java
@@ -19,8 +19,6 @@ package org.apache.maven.surefire.junitcore;
  * under the License.
  */
 
-import java.util.HashMap;
-import java.util.concurrent.ExecutionException;
 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
 import org.apache.maven.surefire.report.ConsoleOutputCapture;
 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
@@ -28,11 +26,13 @@ import 
org.apache.maven.surefire.report.DefaultConsoleReporter;
 import org.apache.maven.surefire.report.ReporterFactory;
 import org.apache.maven.surefire.report.RunListener;
 import org.apache.maven.surefire.testset.TestSetFailedException;
-
 import org.junit.runner.Computer;
 import org.junit.runner.JUnitCore;
 import org.junit.runner.Result;
 
+import java.util.HashMap;
+import java.util.concurrent.ExecutionException;
+
 /**
  * @author Kristian Rosenvold
  */
@@ -56,24 +56,31 @@ public class JUnitCoreTester
     {
         ReporterFactory reporterManagerFactory = 
DefaultReporterFactory.defaultNoXml();
 
-        final HashMap<String, TestSet> classMethodCounts = new HashMap<String, 
TestSet>();
-        RunListener reporter =
-            ConcurrentRunListener.createInstance( classMethodCounts, 
reporterManagerFactory, parallelClasses, false,
-                                                  new DefaultConsoleReporter( 
System.out ) );
-        ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) reporter );
+        try
+        {
+
+            final HashMap<String, TestSet> classMethodCounts = new 
HashMap<String, TestSet>();
+            RunListener reporter =
+                ConcurrentRunListener.createInstance( classMethodCounts, 
reporterManagerFactory, parallelClasses, false,
+                                                      new 
DefaultConsoleReporter( System.out ) );
+            ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) 
reporter );
 
-        JUnitCoreRunListener runListener = new JUnitCoreRunListener( reporter, 
classMethodCounts );
-        JUnitCore junitCore = new JUnitCore();
+            JUnitCoreRunListener runListener = new JUnitCoreRunListener( 
reporter, classMethodCounts );
+            JUnitCore junitCore = new JUnitCore();
 
-        junitCore.addListener( runListener );
-        final Result run = junitCore.run( computer, classes );
-        junitCore.removeListener( runListener );
-        reporterManagerFactory.close();
-        if ( computer instanceof ConfigurableParallelComputer )
+            junitCore.addListener( runListener );
+            final Result run = junitCore.run( computer, classes );
+            junitCore.removeListener( runListener );
+            return run;
+        }
+        finally
         {
-            ( (ConfigurableParallelComputer) computer ).close();
+            reporterManagerFactory.close();
+            if ( computer instanceof ConfigurableParallelComputer )
+            {
+                ( (ConfigurableParallelComputer) computer ).close();
+            }
         }
-        return run;
     }
 
 

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bb99b232/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
----------------------------------------------------------------------
diff --git 
a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
 
b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
index 88b3d64..3c27b24 100644
--- 
a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
+++ 
b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
@@ -19,11 +19,6 @@ package org.apache.maven.surefire.testng;
  * under the License.
  */
 
-import java.io.File;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.maven.surefire.booter.Command;
 import org.apache.maven.surefire.booter.MasterProcessListener;
 import org.apache.maven.surefire.booter.MasterProcessReader;
@@ -41,6 +36,11 @@ import org.apache.maven.surefire.util.RunOrderCalculator;
 import org.apache.maven.surefire.util.ScanResult;
 import org.apache.maven.surefire.util.TestsToRun;
 
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author Kristian Rosenvold
  * @noinspection UnusedDeclaration
@@ -87,6 +87,7 @@ public class TestNGProvider
     public RunResult invoke( Object forkTestSet )
         throws TestSetFailedException
     {
+        RunResult runResult;
         try
         {
             if ( isFailFast() && commandsReader != null )
@@ -101,57 +102,65 @@ public class TestNGProvider
 
             final ReporterFactory reporterFactory = 
providerParameters.getReporterFactory();
 
-            if ( isTestNGXmlTestSuite( testRequest ) )
-            {
-                TestNGXmlTestSuite testNGXmlTestSuite = newXmlSuite();
-                testNGXmlTestSuite.locateTestSets( testClassLoader );
-                if ( forkTestSet != null && testRequest == null )
-                {
-                    testNGXmlTestSuite.execute( (String) forkTestSet, 
reporterFactory );
-                }
-                else
-                {
-                    testNGXmlTestSuite.execute( reporterFactory );
-                }
-            }
-            else
+            try
             {
-                if ( testsToRun == null )
+
+                if ( isTestNGXmlTestSuite( testRequest ) )
                 {
-                    if ( forkTestSet instanceof TestsToRun )
-                    {
-                        testsToRun = (TestsToRun) forkTestSet;
-                    }
-                    else if ( forkTestSet instanceof Class )
+                    TestNGXmlTestSuite testNGXmlTestSuite = newXmlSuite();
+                    testNGXmlTestSuite.locateTestSets( testClassLoader );
+                    if ( forkTestSet != null && testRequest == null )
                     {
-                        testsToRun = TestsToRun.fromClass( (Class<?>) 
forkTestSet );
+                        testNGXmlTestSuite.execute( (String) forkTestSet, 
reporterFactory );
                     }
                     else
                     {
-                        testsToRun = scanClassPath();
+                        testNGXmlTestSuite.execute( reporterFactory );
                     }
                 }
-
-                if ( commandsReader != null )
+                else
                 {
-                    commandsReader.addShutdownListener( new 
MasterProcessListener()
+                    if ( testsToRun == null )
                     {
-                        public void update( Command command )
+                        if ( forkTestSet instanceof TestsToRun )
+                        {
+                            testsToRun = (TestsToRun) forkTestSet;
+                        }
+                        else if ( forkTestSet instanceof Class )
+                        {
+                            testsToRun = TestsToRun.fromClass( (Class<?>) 
forkTestSet );
+                        }
+                        else
                         {
-                            testsToRun.markTestSetFinished();
+                            testsToRun = scanClassPath();
                         }
-                    } );
+                    }
+
+                    if ( commandsReader != null )
+                    {
+                        commandsReader.addShutdownListener( new 
MasterProcessListener()
+                        {
+                            public void update( Command command )
+                            {
+                                testsToRun.markTestSetFinished();
+                            }
+                        } );
+                    }
+                    TestNGDirectoryTestSuite suite = newDirectorySuite();
+                    suite.execute( testsToRun, reporterFactory );
                 }
-                TestNGDirectoryTestSuite suite = newDirectorySuite();
-                suite.execute( testsToRun, reporterFactory );
-            }
 
-            return reporterFactory.close();
+            }
+            finally
+            {
+                runResult = reporterFactory.close();
+            }
         }
         finally
         {
             closeCommandsReader();
         }
+        return runResult;
     }
 
     boolean isTestNGXmlTestSuite( TestRequest testSuiteDefinition )

Reply via email to