You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2022/02/12 20:30:49 UTC

[maven-surefire] 01/01: [SUREFIRE-2011] Updated abstractions which helps associating standard out/err with a test

This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch test-run-id2
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 7f92897c458251fc730d3c66bfddd01340e7f3b9
Author: tibor.digana <ti...@apache.org>
AuthorDate: Sat Feb 12 21:30:30 2022 +0100

    [SUREFIRE-2011] Updated abstractions which helps associating standard out/err with a test
---
 .../surefire/booterclient/output/ForkClient.java   | 11 ++++----
 .../surefire/report/DefaultReporterFactory.java    |  4 +--
 .../plugin/surefire/report/TestSetRunListener.java | 19 +++++++------
 .../report/TestcycleConsoleOutputReceiver.java     |  4 +--
 .../booterclient/ForkingRunListenerTest.java       |  9 ++++---
 .../plugin/surefire/booterclient/MockReporter.java |  5 ++--
 .../booterclient/TestSetMockReporterFactory.java   |  4 +--
 .../maven/plugin/surefire/extensions/E2ETest.java  |  4 +--
 .../api/booter/ForkingReporterFactory.java         |  4 +--
 .../surefire/api/booter/ForkingRunListener.java    |  5 ++--
 .../surefire/api/report/ConsoleOutputCapture.java  |  6 ++---
 .../ConsoleOutputReceiverForCurrentThread.java     |  8 +++---
 .../maven/surefire/api/report/ReporterFactory.java |  2 +-
 ...OutputReceiver.java => TestOutputReceiver.java} |  2 +-
 .../{ReporterFactory.java => TestRunListener.java} | 21 ++-------------
 .../surefire/booter/SurefireReflectorTest.java     |  8 +++---
 .../surefire/common/junit4/JUnit4RunListener.java  | 22 ++++++++++-----
 .../maven/surefire/common/junit4/MockReporter.java |  9 +++++--
 .../junitplatform/JUnitPlatformProvider.java       | 15 +++++------
 .../surefire/junitplatform/RunListenerAdapter.java | 15 ++++++++---
 .../junitplatform/JUnitPlatformProviderTest.java   | 31 +++++++++++-----------
 .../junitplatform/RunListenerAdapterTest.java      |  6 ++---
 .../maven/surefire/junit/JUnit3Provider.java       |  6 ++---
 .../maven/surefire/junit4/JUnit4Provider.java      |  9 ++++---
 .../surefire/junitcore/ConcurrentRunListener.java  | 17 ++++++------
 .../surefire/junitcore/JUnitCoreProvider.java      |  3 ++-
 .../surefire/junitcore/JUnitCoreRunListener.java   |  4 +--
 .../maven/surefire/junitcore/LogicalStream.java    |  4 +--
 .../junitcore/NonConcurrentRunListener.java        | 10 +++----
 .../maven/surefire/junitcore/TestMethod.java       | 10 +++----
 .../apache/maven/surefire/junitcore/TestSet.java   |  8 +++---
 .../junitcore/ConcurrentRunListenerTest.java       |  4 +--
 .../maven/surefire/junitcore/JUnitCoreTester.java  |  9 +++----
 .../maven/surefire/junitcore/MockReporter.java     | 10 +++++--
 .../maven/surefire/junitcore/Surefire746Test.java  |  8 +++---
 .../maven/surefire/testng/TestNGProvider.java      |  7 +++--
 36 files changed, 165 insertions(+), 158 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
index 9a2065b..7963980 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ForkClient.java
@@ -23,9 +23,10 @@ import org.apache.maven.plugin.surefire.booterclient.lazytestprovider.Notifiable
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
 import org.apache.maven.surefire.api.event.Event;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.extensions.EventHandler;
 import org.apache.maven.surefire.api.booter.MasterProcessChannelEncoder;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.api.report.ReportEntry;
 import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.RunMode;
@@ -78,7 +79,7 @@ public class ForkClient
 
     private final int forkNumber;
 
-    private volatile RunListener testSetReporter;
+    private volatile TestRunListener testSetReporter;
 
     /**
      * Written by one Thread and read by another: Main Thread and ForkStarter's Thread.
@@ -379,7 +380,7 @@ public class ForkClient
     /**
      * Only {@link #getConsoleOutputReceiver()} may call this method in another Thread.
      */
-    private RunListener getTestSetReporter()
+    private TestRunListener getTestSetReporter()
     {
         if ( testSetReporter == null )
         {
@@ -423,9 +424,9 @@ public class ForkClient
         return getTestSetReporter();
     }
 
-    public ConsoleOutputReceiver getConsoleOutputReceiver()
+    public TestOutputReceiver getConsoleOutputReceiver()
     {
-        return (ConsoleOutputReceiver) getTestSetReporter();
+        return getTestSetReporter();
     }
 
     private ConsoleLogger getOrCreateConsoleLogger()
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
index 693e63d..39dd86c 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
@@ -29,7 +29,7 @@ import org.apache.maven.surefire.extensions.StatelessReportEventListener;
 import org.apache.maven.surefire.extensions.StatelessTestsetInfoConsoleReportEventListener;
 import org.apache.maven.surefire.extensions.StatelessTestsetInfoFileReportEventListener;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.report.RunStatistics;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
 import org.apache.maven.surefire.api.suite.RunResult;
@@ -97,7 +97,7 @@ public class DefaultReporterFactory
     }
 
     @Override
-    public RunListener createReporter()
+    public TestRunListener createReporter()
     {
         TestSetRunListener testSetRunListener =
             new TestSetRunListener( createConsoleReporter(),
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
index 9ab198c..4e6e461 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestSetRunListener.java
@@ -31,10 +31,9 @@ import org.apache.maven.surefire.extensions.ConsoleOutputReportEventListener;
 import org.apache.maven.surefire.extensions.StatelessReportEventListener;
 import org.apache.maven.surefire.extensions.StatelessTestsetInfoConsoleReportEventListener;
 import org.apache.maven.surefire.extensions.StatelessTestsetInfoFileReportEventListener;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.RunMode;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 
 import static org.apache.maven.plugin.surefire.report.ReportEntryType.ERROR;
@@ -51,13 +50,13 @@ import static java.util.Objects.requireNonNull;
  * @author Kristian Rosenvold
  */
 public class TestSetRunListener
-    implements RunListener, ConsoleOutputReceiver, ConsoleLogger
+    implements TestRunListener, ConsoleLogger
 {
     private final Queue<TestMethodStats> testMethodStats = new ConcurrentLinkedQueue<>();
 
     private final TestSetStats detailsForThis;
 
-    private final ConsoleOutputReportEventListener consoleOutputReceiver;
+    private final ConsoleOutputReportEventListener testOutputReceiver;
 
     private final boolean briefOrPlainFormat;
 
@@ -83,7 +82,7 @@ public class TestSetRunListener
                                StatelessTestsetInfoFileReportEventListener<WrappedReportEntry, TestSetStats>
                                        fileReporter,
                                StatelessReportEventListener<WrappedReportEntry, TestSetStats> simpleXMLReporter,
-                               ConsoleOutputReportEventListener consoleOutputReceiver,
+                               ConsoleOutputReportEventListener testOutputReceiver,
                                StatisticsReporter statisticsReporter, boolean trimStackTrace,
                                boolean isPlainFormat, boolean briefOrPlainFormat, Object lock )
     {
@@ -91,7 +90,7 @@ public class TestSetRunListener
         this.fileReporter = fileReporter;
         this.statisticsReporter = statisticsReporter;
         this.simpleXMLReporter = simpleXMLReporter;
-        this.consoleOutputReceiver = consoleOutputReceiver;
+        this.testOutputReceiver = testOutputReceiver;
         this.briefOrPlainFormat = briefOrPlainFormat;
         detailsForThis = new TestSetStats( trimStackTrace, isPlainFormat );
         this.lock = lock;
@@ -184,7 +183,7 @@ public class TestSetRunListener
             {
                 Utf8RecodingDeferredFileOutputStream stream = stdout ? testStdOut : testStdErr;
                 stream.write( output, newLine );
-                consoleOutputReceiver.writeTestOutput( output, newLine, stdout );
+                testOutputReceiver.writeTestOutput( output, newLine, stdout );
             }
         }
         catch ( IOException e )
@@ -198,7 +197,7 @@ public class TestSetRunListener
     {
         detailsForThis.testSetStart();
         consoleReporter.testSetStarting( report );
-        consoleOutputReceiver.testSetStarting( report );
+        testOutputReceiver.testSetStarting( report );
     }
 
     private void clearCapture()
@@ -217,7 +216,7 @@ public class TestSetRunListener
         simpleXMLReporter.testSetCompleted( wrap, detailsForThis );
         statisticsReporter.testSetCompleted();
         consoleReporter.testSetCompleted( wrap, detailsForThis, testResults );
-        consoleOutputReceiver.testSetCompleted( wrap );
+        testOutputReceiver.testSetCompleted( wrap );
         consoleReporter.reset();
 
         wrap.getStdout().free();
@@ -317,7 +316,7 @@ public class TestSetRunListener
 
     public void close()
     {
-        consoleOutputReceiver.close();
+        testOutputReceiver.close();
     }
 
     private void addTestMethodStats()
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestcycleConsoleOutputReceiver.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestcycleConsoleOutputReceiver.java
index 3d32073..90cef51 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestcycleConsoleOutputReceiver.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/TestcycleConsoleOutputReceiver.java
@@ -19,15 +19,15 @@ package org.apache.maven.plugin.surefire.report;
  * under the License.
  */
 
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.extensions.ConsoleOutputReportEventListener;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 
 /**
  * @author Kristian Rosenvold
  */
 public interface TestcycleConsoleOutputReceiver
-    extends ConsoleOutputReceiver, ConsoleOutputReportEventListener
+    extends TestOutputReceiver, ConsoleOutputReportEventListener
 {
     void testSetStarting( TestSetReportEntry reportEntry );
 
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
index 9853825..1e7a067 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ForkingRunListenerTest.java
@@ -31,14 +31,15 @@ import org.apache.maven.surefire.extensions.EventHandler;
 import org.apache.maven.surefire.api.fork.ForkNodeArguments;
 import org.apache.maven.surefire.extensions.util.CountdownCloseable;
 import org.apache.maven.surefire.api.report.CategorizedReportEntry;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.LegacyPojoStackTraceWriter;
 import org.apache.maven.surefire.api.report.ReportEntry;
 import org.apache.maven.surefire.api.report.ReporterException;
 import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel;
 
 import javax.annotation.Nonnull;
@@ -180,7 +181,7 @@ public class ForkingRunListenerTest
     public void testConsoleOutput() throws Exception
     {
         final StandardTestRun standardTestRun = new StandardTestRun();
-        ConsoleOutputReceiver directConsoleReporter = (ConsoleOutputReceiver) standardTestRun.run();
+        TestOutputReceiver directConsoleReporter = standardTestRun.run();
         directConsoleReporter.writeTestOutput( "HeyYou", false, true );
         standardTestRun.assertExpected( MockReporter.STDOUT, "HeyYou" );
     }
@@ -461,7 +462,7 @@ public class ForkingRunListenerTest
         }
     }
 
-    private RunListener createForkingRunListener()
+    private TestRunListener createForkingRunListener()
     {
         WritableBufferedByteChannel channel = (WritableBufferedByteChannel) newChannel( printStream );
         return new ForkingRunListener( new EventChannelEncoder( channel ), false );
@@ -471,7 +472,7 @@ public class ForkingRunListenerTest
     {
         private MockReporter reporter;
 
-        public RunListener run()
+        public TestRunListener run()
             throws ReporterException
         {
             reset();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MockReporter.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MockReporter.java
index aab5731..337131d 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MockReporter.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/MockReporter.java
@@ -20,9 +20,8 @@ package org.apache.maven.plugin.surefire.booterclient;
  */
 
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 import org.apache.maven.surefire.api.report.RunMode;
 
@@ -34,7 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * Internal tests use only.
  */
 public class MockReporter
-    implements RunListener, ConsoleLogger, ConsoleOutputReceiver
+    implements TestRunListener, ConsoleLogger
 {
     private final List<String> events = new ArrayList<>();
 
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java
index ace0e5d..7b05fb0 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java
@@ -25,7 +25,7 @@ import org.apache.maven.plugin.surefire.extensions.SurefireStatelessReporter;
 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessTestsetInfoReporter;
 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
 import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 
 import java.io.File;
 
@@ -43,7 +43,7 @@ public class TestSetMockReporterFactory
     }
 
     @Override
-    public RunListener createReporter()
+    public TestRunListener createReporter()
     {
         return new MockReporter();
     }
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/E2ETest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/E2ETest.java
index d2a9c20..d059dd2 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/E2ETest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/extensions/E2ETest.java
@@ -25,7 +25,7 @@ import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
 import org.apache.maven.surefire.api.booter.Command;
 import org.apache.maven.surefire.api.event.Event;
 import org.apache.maven.surefire.api.fork.ForkNodeArguments;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.booter.spi.EventChannelEncoder;
 import org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory;
 import org.apache.maven.surefire.extensions.CommandReader;
@@ -133,7 +133,7 @@ public class E2ETest
             @Override
             public void run()
             {
-                ConsoleOutputReceiver target = new ConsoleOutputReceiver()
+                TestOutputReceiver target = new TestOutputReceiver()
                 {
                     @Override
                     public void writeTestOutput( String output, boolean newLine, boolean stdout )
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingReporterFactory.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingReporterFactory.java
index 31bbfa5..e53eeb4 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingReporterFactory.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingReporterFactory.java
@@ -20,7 +20,7 @@ package org.apache.maven.surefire.api.booter;
  */
 
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.suite.RunResult;
 
 /**
@@ -43,7 +43,7 @@ public class ForkingReporterFactory
     }
 
     @Override
-    public RunListener createReporter()
+    public TestRunListener createReporter()
     {
         return new ForkingRunListener( eventChannel, trimstackTrace );
     }
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java
index 169f358..0a44cfc 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/booter/ForkingRunListener.java
@@ -20,10 +20,9 @@ package org.apache.maven.surefire.api.booter;
  */
 
 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.ConsoleStream;
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.RunMode;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 
@@ -48,7 +47,7 @@ import static java.util.Objects.requireNonNull;
  * @author Kristian Rosenvold
  */
 public class ForkingRunListener
-    implements RunListener, ConsoleLogger, ConsoleOutputReceiver, ConsoleStream
+    implements TestRunListener, ConsoleLogger, ConsoleStream
 {
     private final MasterProcessChannelEncoder target;
 
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputCapture.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputCapture.java
index 2298e7f..96a8eff 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputCapture.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputCapture.java
@@ -32,7 +32,7 @@ import static java.lang.System.setOut;
  */
 public final class ConsoleOutputCapture
 {
-    public static void startCapture( ConsoleOutputReceiver target )
+    public static void startCapture( TestOutputReceiver target )
     {
         setOut( new ForwardingPrintStream( true, target ) );
         setErr( new ForwardingPrintStream( false, target ) );
@@ -42,9 +42,9 @@ public final class ConsoleOutputCapture
         extends PrintStream
     {
         private final boolean isStdout;
-        private final ConsoleOutputReceiver target;
+        private final TestOutputReceiver target;
 
-        ForwardingPrintStream( boolean stdout, ConsoleOutputReceiver target )
+        ForwardingPrintStream( boolean stdout, TestOutputReceiver target )
         {
             super( new NullOutputStream() );
             isStdout = stdout;
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiverForCurrentThread.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiverForCurrentThread.java
index 4843630..0874b2b 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiverForCurrentThread.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiverForCurrentThread.java
@@ -24,21 +24,21 @@ package org.apache.maven.surefire.api.report;
  */
 public final class ConsoleOutputReceiverForCurrentThread
 {
-    private static final ThreadLocal<ConsoleOutputReceiver> CURRENT
+    private static final ThreadLocal<TestOutputReceiver> CURRENT
         = new InheritableThreadLocal<>();
 
     private ConsoleOutputReceiverForCurrentThread()
     {
     }
 
-    public static ConsoleOutputReceiver get()
+    public static TestOutputReceiver get()
     {
         return CURRENT.get();
     }
 
-    public static void set( ConsoleOutputReceiver consoleOutputReceiver )
+    public static void set( TestOutputReceiver testOutputReceiver )
     {
-        CURRENT.set( consoleOutputReceiver );
+        CURRENT.set( testOutputReceiver );
     }
 
     public static void remove()
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java
index af9057e..1e21236 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java
@@ -33,7 +33,7 @@ public interface ReporterFactory
      *
      * @return A reporter instance
      */
-    RunListener createReporter();
+    TestRunListener createReporter();
 
     /**
      * Closes the factory, freeing resources allocated in the factory.
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiver.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestOutputReceiver.java
similarity index 97%
rename from surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiver.java
rename to surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestOutputReceiver.java
index 99e47f4..1bd7279 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ConsoleOutputReceiver.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestOutputReceiver.java
@@ -23,7 +23,7 @@ package org.apache.maven.surefire.api.report;
  * A receiver of stdout/sterr output from running tests. This receiver knows how to associate
  * the output with a given testset.
  */
-public interface ConsoleOutputReceiver
+public interface TestOutputReceiver
 {
 
     /**
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestRunListener.java
similarity index 65%
copy from surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java
copy to surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestRunListener.java
index af9057e..29eaf35 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/report/ReporterFactory.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/report/TestRunListener.java
@@ -19,27 +19,10 @@ package org.apache.maven.surefire.api.report;
  * under the License.
  */
 
-import org.apache.maven.surefire.api.suite.RunResult;
-
 /**
- * Used by the providers to request (per-thread) run listeners.
  *
- * @author Kristian Rosenvold
  */
-public interface ReporterFactory
+public interface TestRunListener
+    extends RunListener, TestOutputReceiver
 {
-    /**
-     * Creates a reporter.
-     *
-     * @return A reporter instance
-     */
-    RunListener createReporter();
-
-    /**
-     * Closes the factory, freeing resources allocated in the factory.
-     *
-     * @return The run result
-     */
-    RunResult close();
-
 }
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java
index b4290a7..1f275b5 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java
@@ -25,7 +25,7 @@ import org.apache.maven.surefire.api.provider.ProviderParameters;
 import org.apache.maven.surefire.api.provider.SurefireProvider;
 import org.apache.maven.surefire.api.report.ReporterConfiguration;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.suite.RunResult;
 import org.apache.maven.surefire.api.testset.DirectoryScannerParameters;
 import org.apache.maven.surefire.api.testset.RunOrderParameters;
@@ -55,7 +55,7 @@ public class SurefireReflectorTest
         ReporterFactory factory = new ReporterFactory()
         {
             @Override
-            public RunListener createReporter()
+            public TestRunListener createReporter()
             {
                 return null;
             }
@@ -255,7 +255,7 @@ public class SurefireReflectorTest
         ReporterFactory reporterFactory = new ReporterFactory()
         {
             @Override
-            public RunListener createReporter()
+            public TestRunListener createReporter()
             {
                 return null;
             }
@@ -279,7 +279,7 @@ public class SurefireReflectorTest
         ReporterFactory reporterFactory = new ReporterFactory()
         {
             @Override
-            public RunListener createReporter()
+            public TestRunListener createReporter()
             {
                 return null;
             }
diff --git a/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java b/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java
index 7f4e97e..d316395 100644
--- a/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java
+++ b/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4RunListener.java
@@ -20,14 +20,16 @@ package org.apache.maven.surefire.common.junit4;
  */
 
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
 import org.apache.maven.surefire.api.util.internal.ClassMethod;
 import org.junit.runner.Description;
 import org.junit.runner.Result;
 import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunListener;
 
 import static org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.isFailureInsideJUnitItself;
 import static org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.toClassMethod;
@@ -41,12 +43,14 @@ import static org.apache.maven.surefire.api.report.SimpleReportEntry.withExcepti
  *
  */
 public class JUnit4RunListener
-    extends org.junit.runner.notification.RunListener
+    extends RunListener
+    implements TestOutputReceiver
 {
-    protected final RunListener reporter;
+    protected final TestRunListener reporter;
 
     /**
-     * This flag is set after a failure has occurred so that a {@link RunListener#testSucceeded} event is not fired.
+     * This flag is set after a failure has occurred so that a
+     * {@link org.apache.maven.surefire.api.report.RunListener#testSucceeded} event is not fired.
      * This is necessary because JUnit4 always fires a
      * {@link org.junit.runner.notification.RunListener#testRunFinished(Result)}
      * event-- even if there was a failure.
@@ -58,7 +62,7 @@ public class JUnit4RunListener
      *
      * @param reporter the reporter to log testing events to
      */
-    public JUnit4RunListener( RunListener reporter )
+    public JUnit4RunListener( TestRunListener reporter )
     {
         this.reporter = reporter;
     }
@@ -163,7 +167,7 @@ public class JUnit4RunListener
     }
 
     /**
-     * Delegates to {@link RunListener#testExecutionSkippedByUser()}.
+     * Delegates to {@link org.apache.maven.surefire.api.report.RunListener#testExecutionSkippedByUser()}.
      */
     public void testExecutionSkippedByUser()
     {
@@ -193,4 +197,10 @@ public class JUnit4RunListener
             }
         }
     }
+
+    @Override
+    public void writeTestOutput( String output, boolean newLine, boolean stdout )
+    {
+        reporter.writeTestOutput( output, newLine, stdout );
+    }
 }
diff --git a/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/MockReporter.java b/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/MockReporter.java
index 39947fc..cf543b3 100644
--- a/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/MockReporter.java
+++ b/surefire-providers/common-junit4/src/test/java/org/apache/maven/surefire/common/junit4/MockReporter.java
@@ -20,8 +20,8 @@ package org.apache.maven.surefire.common.junit4;
  */
 
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.RunMode;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 
 import java.util.ArrayList;
@@ -32,7 +32,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * Internal tests use only.
  */
 final class MockReporter
-    implements RunListener
+    implements TestRunListener
 {
     private final List<String> events = new ArrayList<>();
 
@@ -127,4 +127,9 @@ final class MockReporter
     public void testAssumptionFailure( ReportEntry report )
     {
     }
+
+    @Override
+    public void writeTestOutput( String output, boolean newLine, boolean stdout )
+    {
+    }
 }
diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
index 8ff29c3..6c4e9ed 100644
--- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
+++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
@@ -50,10 +50,8 @@ import java.util.logging.Logger;
 
 import org.apache.maven.surefire.api.provider.AbstractProvider;
 import org.apache.maven.surefire.api.provider.ProviderParameters;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.ReporterException;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.suite.RunResult;
 import org.apache.maven.surefire.api.testset.TestListResolver;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
@@ -122,20 +120,20 @@ public class JUnitPlatformProvider
         final RunResult runResult;
         try
         {
-            RunListener runListener = reporterFactory.createReporter();
-            startCapture( ( ConsoleOutputReceiver ) runListener );
+            RunListenerAdapter adapter = new RunListenerAdapter( reporterFactory.createReporter() );
+            startCapture( adapter );
             setupJunitLogger();
             if ( forkTestSet instanceof TestsToRun )
             {
-                invokeAllTests( (TestsToRun) forkTestSet, runListener );
+                invokeAllTests( (TestsToRun) forkTestSet, adapter );
             }
             else if ( forkTestSet instanceof Class )
             {
-                invokeAllTests( fromClass( ( Class<?> ) forkTestSet ), runListener );
+                invokeAllTests( fromClass( ( Class<?> ) forkTestSet ), adapter );
             }
             else if ( forkTestSet == null )
             {
-                invokeAllTests( scanClasspath(), runListener );
+                invokeAllTests( scanClasspath(), adapter );
             }
             else
             {
@@ -167,9 +165,8 @@ public class JUnitPlatformProvider
         return parameters.getRunOrderCalculator().orderTestClasses( scannedClasses );
     }
 
-    private void invokeAllTests( TestsToRun testsToRun, RunListener runListener )
+    private void invokeAllTests( TestsToRun testsToRun, RunListenerAdapter adapter )
     {
-        RunListenerAdapter adapter = new RunListenerAdapter( runListener );
         try
         {
             execute( testsToRun, adapter );
diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java
index 101c6b8..59f6787 100644
--- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java
+++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/RunListenerAdapter.java
@@ -34,11 +34,12 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.report.PojoStackTraceWriter;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SafeThrowable;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.junit.platform.engine.TestExecutionResult;
 import org.junit.platform.engine.TestSource;
 import org.junit.platform.engine.support.descriptor.ClassSource;
@@ -51,17 +52,17 @@ import org.junit.platform.launcher.TestPlan;
  * @since 2.22.0
  */
 final class RunListenerAdapter
-    implements TestExecutionListener
+    implements TestExecutionListener, TestOutputReceiver
 {
     private static final Pattern COMMA_PATTERN = Pattern.compile( "," );
 
     private final ConcurrentMap<TestIdentifier, Long> testStartTime = new ConcurrentHashMap<>();
     private final ConcurrentMap<TestIdentifier, TestExecutionResult> failures = new ConcurrentHashMap<>();
     private final ConcurrentMap<String, TestIdentifier> runningTestIdentifiersByUniqueId = new ConcurrentHashMap<>();
-    private final RunListener runListener;
+    private final TestRunListener runListener;
     private volatile TestPlan testPlan;
 
-    RunListenerAdapter( RunListener runListener )
+    RunListenerAdapter( TestRunListener runListener )
     {
         this.runListener = runListener;
     }
@@ -358,4 +359,10 @@ final class RunListenerAdapter
         getFailures().clear();
         testPlan = null;
     }
+
+    @Override
+    public void writeTestOutput( String output, boolean newLine, boolean stdout )
+    {
+        runListener.writeTestOutput( output, newLine, stdout );
+    }
 }
diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
index f7a9a42..a6ad81b 100644
--- a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
+++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProviderTest.java
@@ -55,11 +55,12 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.maven.surefire.api.provider.ProviderParameters;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.api.report.ReportEntry;
 import org.apache.maven.surefire.api.report.ReporterFactory;
 import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 import org.apache.maven.surefire.api.testset.TestListResolver;
 import org.apache.maven.surefire.api.testset.TestRequest;
@@ -95,7 +96,7 @@ public class JUnitPlatformProviderTest
     {
         Launcher launcher = LauncherFactory.create();
         JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock(), launcher );
-        RunListener listener = mock( RunListener.class );
+        TestRunListener listener = mock( TestRunListener.class );
 
         ArgumentCaptor<ReportEntry> testCaptor = ArgumentCaptor.forClass( ReportEntry.class );
         ArgumentCaptor<TestSetReportEntry> testSetCaptor = ArgumentCaptor.forClass( TestSetReportEntry.class );
@@ -142,7 +143,7 @@ public class JUnitPlatformProviderTest
     {
         Launcher launcher = LauncherFactory.create();
         JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock(), launcher );
-        RunListener listener = mock( RunListener.class );
+        TestRunListener listener = mock( TestRunListener.class );
 
         ArgumentCaptor<ReportEntry> testCaptor = ArgumentCaptor.forClass( ReportEntry.class );
         ArgumentCaptor<TestSetReportEntry> testSetCaptor = ArgumentCaptor.forClass( TestSetReportEntry.class );
@@ -426,7 +427,7 @@ public class JUnitPlatformProviderTest
         ProviderParameters parameters = providerParametersMock();
         JUnitPlatformProvider provider = new JUnitPlatformProvider( parameters, launcher );
 
-        RunListener listener = mock( RunListener.class );
+        TestRunListener listener = mock( TestRunListener.class );
         ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
         RunListenerAdapter adapter = new RunListenerAdapter( listener );
 
@@ -456,7 +457,7 @@ public class JUnitPlatformProviderTest
 
         TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
 
-        RunListener listener = mock( RunListener.class );
+        TestRunListener listener = mock( TestRunListener.class );
         ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
         RunListenerAdapter adapter = new RunListenerAdapter( listener );
 
@@ -494,7 +495,7 @@ public class JUnitPlatformProviderTest
 
         TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
 
-        RunListener listener = mock( RunListener.class );
+        TestRunListener listener = mock( TestRunListener.class );
         ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
         RunListenerAdapter adapter = new RunListenerAdapter( listener );
 
@@ -537,7 +538,7 @@ public class JUnitPlatformProviderTest
 
         TestPlanSummaryListener executionListener = new TestPlanSummaryListener();
 
-        RunListener listener = mock( RunListener.class );
+        TestRunListener listener = mock( TestRunListener.class );
         ArgumentCaptor<ReportEntry> entryCaptor = ArgumentCaptor.forClass( ReportEntry.class );
         RunListenerAdapter adapter = new RunListenerAdapter( listener );
 
@@ -597,7 +598,7 @@ public class JUnitPlatformProviderTest
     public void allDiscoveredTestsAreInvokedForNullArgument()
                     throws Exception
     {
-        RunListener runListener = runListenerMock();
+        TestRunListener runListener = runListenerMock();
         ProviderParameters providerParameters =
                         providerParametersMock( runListener, TestClass1.class, TestClass2.class );
         Launcher launcher = LauncherFactory.create();
@@ -661,15 +662,15 @@ public class JUnitPlatformProviderTest
                     throws Exception
     {
         Launcher launcher = LauncherFactory.create();
-        RunListener runListener = runListenerMock();
+        TestRunListener runListener = runListenerMock();
         JUnitPlatformProvider provider = new JUnitPlatformProvider( providerParametersMock( runListener ), launcher );
 
         invokeProvider( provider, VerboseTestClass.class );
 
         ArgumentCaptor<String> captor = ArgumentCaptor.forClass( String.class );
-        verify( (ConsoleOutputReceiver) runListener )
+        verify( runListener )
                         .writeTestOutput( captor.capture(), eq( true ), eq( true ) );
-        verify( (ConsoleOutputReceiver) runListener )
+        verify( runListener )
                         .writeTestOutput( captor.capture(), eq( true ), eq( false ) );
         assertThat( captor.getAllValues() )
                 .hasSize( 2 )
@@ -985,7 +986,7 @@ public class JUnitPlatformProviderTest
     }
 
     private static ProviderParameters providerParametersMock(
-                    RunListener runListener, Class<?>... testClasses )
+        TestRunListener runListener, Class<?>... testClasses )
     {
         TestListResolver testListResolver = new TestListResolver( "" );
         return providerParametersMock( runListener, testListResolver, testClasses );
@@ -998,7 +999,7 @@ public class JUnitPlatformProviderTest
     }
 
     private static ProviderParameters providerParametersMock(
-                    RunListener runListener, TestListResolver testListResolver, Class<?>... testClasses )
+        TestRunListener runListener, TestListResolver testListResolver, Class<?>... testClasses )
     {
         TestsToRun testsToRun = newTestsToRun( testClasses );
 
@@ -1023,9 +1024,9 @@ public class JUnitPlatformProviderTest
         return providerParameters;
     }
 
-    private static RunListener runListenerMock()
+    private static TestRunListener runListenerMock()
     {
-        return mock( RunListener.class, withSettings().extraInterfaces( ConsoleOutputReceiver.class ) );
+        return mock( TestRunListener.class, withSettings().extraInterfaces( TestOutputReceiver.class ) );
     }
 
     private static Set<String> failedTestDisplayNames( TestExecutionSummary summary )
diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java
index d13176d..10c488d 100644
--- a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java
+++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/RunListenerAdapterTest.java
@@ -45,9 +45,9 @@ import java.lang.reflect.Method;
 import java.util.Map;
 import java.util.Optional;
 
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.report.PojoStackTraceWriter;
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
 import org.junit.Before;
@@ -79,14 +79,14 @@ public class RunListenerAdapterTest
 {
     private static final ConfigurationParameters CONFIG_PARAMS = mock( ConfigurationParameters.class );
 
-    private RunListener listener;
+    private TestRunListener listener;
 
     private RunListenerAdapter adapter;
 
     @Before
     public void setUp()
     {
-        listener = mock( RunListener.class );
+        listener = mock( TestRunListener.class );
         adapter = new RunListenerAdapter( listener );
         adapter.testPlanExecutionStarted( TestPlan.from( emptyList() ) );
     }
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 3c9825d..1291e01 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
@@ -19,11 +19,11 @@ package org.apache.maven.surefire.junit;
  * under the License.
  */
 
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.common.junit3.JUnit3Reflector;
 import org.apache.maven.surefire.common.junit3.JUnit3TestChecker;
 import org.apache.maven.surefire.api.provider.AbstractProvider;
 import org.apache.maven.surefire.api.provider.ProviderParameters;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.ReporterFactory;
 import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
@@ -95,8 +95,8 @@ public class JUnit3Provider
         RunResult runResult;
         try
         {
-            RunListener reporter = reporterFactory.createReporter();
-            startCapture( (ConsoleOutputReceiver) reporter );
+            TestRunListener reporter = reporterFactory.createReporter();
+            startCapture( reporter );
             Map<String, String> systemProperties = systemProps();
             setSystemManager( System.getProperty( "surefire.security.manager" ) );
 
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 3f4b095..9db1cd8 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
@@ -22,13 +22,13 @@ package org.apache.maven.surefire.junit4;
 import org.apache.maven.surefire.api.booter.Command;
 import org.apache.maven.surefire.api.provider.CommandChainReader;
 import org.apache.maven.surefire.api.provider.CommandListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
 import org.apache.maven.surefire.common.junit4.JUnit4TestChecker;
 import org.apache.maven.surefire.common.junit4.JUnitTestFailureListener;
 import org.apache.maven.surefire.common.junit4.Notifier;
 import org.apache.maven.surefire.api.provider.AbstractProvider;
 import org.apache.maven.surefire.api.provider.ProviderParameters;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.report.PojoStackTraceWriter;
 import org.apache.maven.surefire.api.report.ReporterFactory;
 import org.apache.maven.surefire.api.report.RunListener;
@@ -121,9 +121,10 @@ public class JUnit4Provider
         RunResult runResult;
         try
         {
-            RunListener reporter = reporterFactory.createReporter();
+            TestRunListener reporter = reporterFactory.createReporter();
+            JUnit4RunListener listener = new JUnit4RunListener( reporter );
 
-            startCapture( (ConsoleOutputReceiver) reporter );
+            startCapture( listener );
             // startCapture() called in prior to setTestsToRun()
 
             if ( testsToRun == null )
@@ -131,7 +132,7 @@ public class JUnit4Provider
                 setTestsToRun( forkTestSet );
             }
 
-            Notifier notifier = new Notifier( new JUnit4RunListener( reporter ), getSkipAfterFailureCount() );
+            Notifier notifier = new Notifier( listener, getSkipAfterFailureCount() );
             Result result = new Result();
             notifier.addListeners( createCustomListeners( customRunListeners ) )
                 .addListener( result.createListener() );
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ConcurrentRunListener.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ConcurrentRunListener.java
index ce8ad88..550edf1 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ConcurrentRunListener.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/ConcurrentRunListener.java
@@ -20,13 +20,12 @@ package org.apache.maven.surefire.junitcore;
  */
 
 import java.util.Map;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.ConsoleStream;
 import org.apache.maven.surefire.api.report.ReportEntry;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.RunMode;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
 
@@ -44,11 +43,11 @@ import static org.apache.maven.surefire.junitcore.TestMethod.getThreadTestMethod
  * @author Kristian Rosenvold
  */
 public abstract class ConcurrentRunListener
-    implements RunListener, ConsoleOutputReceiver
+    implements TestRunListener
 {
     private final Map<String, TestSet> classMethodCounts;
 
-    private final ThreadLocal<RunListener> reporterManagerThreadLocal;
+    private final ThreadLocal<TestRunListener> reporterManagerThreadLocal;
 
     private final boolean reportImmediately;
 
@@ -61,10 +60,10 @@ public abstract class ConcurrentRunListener
         this.reportImmediately = reportImmediately;
         this.classMethodCounts = classMethodCounts;
         this.consoleStream = consoleStream;
-        reporterManagerThreadLocal = new ThreadLocal<RunListener>()
+        reporterManagerThreadLocal = new ThreadLocal<TestRunListener>()
         {
             @Override
-            protected RunListener initialValue()
+            protected TestRunListener initialValue()
             {
                 return reporterFactory.createReporter();
             }
@@ -81,7 +80,7 @@ public abstract class ConcurrentRunListener
     {
         try
         {
-            final RunListener reporterManager = getRunListener();
+            final TestRunListener reporterManager = getRunListener();
             for ( TestSet testSet : classMethodCounts.values() )
             {
                 testSet.replay( reporterManager );
@@ -201,12 +200,12 @@ public abstract class ConcurrentRunListener
         return classMethodCounts.get( description.getSourceName() );
     }
 
-    RunListener getRunListener()
+    TestRunListener getRunListener()
     {
         return reporterManagerThreadLocal.get();
     }
 
-    public static ConcurrentRunListener createInstance( Map<String, TestSet> classMethodCounts,
+    public static TestRunListener createInstance( Map<String, TestSet> classMethodCounts,
                                                             ReporterFactory reporterFactory,
                                                             boolean parallelClasses, boolean parallelBoth,
                                                             ConsoleStream consoleStream )
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 6877b00..a575281 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
@@ -22,6 +22,7 @@ package org.apache.maven.surefire.junitcore;
 import org.apache.maven.surefire.api.booter.Command;
 import org.apache.maven.surefire.api.provider.CommandChainReader;
 import org.apache.maven.surefire.api.provider.CommandListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
 import org.apache.maven.surefire.common.junit4.JUnitTestFailureListener;
 import org.apache.maven.surefire.common.junit4.Notifier;
@@ -251,7 +252,7 @@ public class JUnitCoreProvider
         {
             final Map<String, TestSet> testSetMap = new ConcurrentHashMap<>();
 
-            ConcurrentRunListener listener = createInstance( testSetMap, reporterFactory, isParallelTypes(),
+            TestRunListener listener = createInstance( testSetMap, reporterFactory, isParallelTypes(),
                                                              isParallelMethodsAndTypes(), consoleStream );
             startCapture( listener );
 
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreRunListener.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreRunListener.java
index 37f3759..f272c21 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreRunListener.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreRunListener.java
@@ -19,9 +19,9 @@ package org.apache.maven.surefire.junitcore;
  * under the License.
  */
 
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
 import org.apache.maven.surefire.common.junit4.JUnit4StackTraceWriter;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.StackTraceWriter;
 import org.junit.runner.Description;
 import org.junit.runner.Result;
@@ -49,7 +49,7 @@ public class JUnitCoreRunListener
      * @param reporter          the report manager to log testing events to
      * @param classMethodCounts A map of methods
      */
-    public JUnitCoreRunListener( RunListener reporter, Map<String, TestSet> classMethodCounts )
+    public JUnitCoreRunListener( TestRunListener reporter, Map<String, TestSet> classMethodCounts )
     {
         super( reporter );
         this.classMethodCounts = classMethodCounts;
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/LogicalStream.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/LogicalStream.java
index cf70d17..db1840b 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/LogicalStream.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/LogicalStream.java
@@ -19,7 +19,7 @@ package org.apache.maven.surefire.junitcore;
  * under the License.
  */
 
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -50,7 +50,7 @@ final class LogicalStream
         output.add( new Entry( stdout, text, newLine ) );
     }
 
-    void writeDetails( ConsoleOutputReceiver outputReceiver )
+    void writeDetails( TestOutputReceiver outputReceiver )
     {
         for ( Entry entry = output.poll(); entry != null; entry = output.poll() )
         {
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
index 262a4ee..c8f3d68 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/NonConcurrentRunListener.java
@@ -19,10 +19,10 @@ package org.apache.maven.surefire.junitcore;
  * under the License.
  */
 
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.util.internal.ClassMethod;
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
@@ -43,13 +43,13 @@ import static org.apache.maven.surefire.api.util.internal.ObjectUtils.systemProp
  */
 public class NonConcurrentRunListener
     extends JUnit4RunListener
-    implements ConsoleOutputReceiver
+    implements TestOutputReceiver
 {
     private Description currentTestSetDescription;
 
     private Description lastFinishedDescription;
 
-    public NonConcurrentRunListener( RunListener reporter )
+    public NonConcurrentRunListener( TestRunListener reporter )
         throws TestSetFailedException
     {
         super( reporter );
@@ -58,7 +58,7 @@ public class NonConcurrentRunListener
     public synchronized void writeTestOutput( String output, boolean newLine, boolean stdout )
     {
         // We can write immediately: no parallelism and a single class.
-        ( (ConsoleOutputReceiver) reporter ).writeTestOutput( output, newLine, stdout );
+        reporter.writeTestOutput( output, newLine, stdout );
     }
 
     @Override
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
index ae38976..164c71d 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
@@ -20,10 +20,10 @@ package org.apache.maven.surefire.junitcore;
  */
 
 import org.apache.maven.surefire.api.report.CategorizedReportEntry;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
+import org.apache.maven.surefire.api.report.TestOutputReceiver;
 import org.apache.maven.surefire.api.report.ConsoleOutputReceiverForCurrentThread;
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -34,7 +34,7 @@ import java.util.concurrent.atomic.AtomicReference;
  * without any actual parallel access
  */
 class TestMethod
-    implements ConsoleOutputReceiver
+    implements TestOutputReceiver
 {
     private static final InheritableThreadLocal<TestMethod> TEST_METHOD = new InheritableThreadLocal<>();
 
@@ -112,7 +112,7 @@ class TestMethod
         return endTime;
     }
 
-    void replay( RunListener reporter )
+    void replay( TestRunListener reporter )
     {
         if ( testIgnored != null )
         {
@@ -125,7 +125,7 @@ class TestMethod
             LogicalStream ls = output.get();
             if ( ls != null )
             {
-                ls.writeDetails( (ConsoleOutputReceiver) reporter );
+                ls.writeDetails( reporter );
             }
 
             if ( testFailure != null )
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestSet.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestSet.java
index 694257e..8f30186 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestSet.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestSet.java
@@ -20,8 +20,8 @@ package org.apache.maven.surefire.junitcore;
  */
 
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.report.SimpleReportEntry;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 
 import java.util.Collection;
@@ -60,7 +60,7 @@ public class TestSet
         this.testClassName = testClassName;
     }
 
-    public void replay( RunListener target )
+    public void replay( TestRunListener target )
     {
         if ( played.compareAndSet( false, true ) )
         {
@@ -133,7 +133,7 @@ public class TestSet
         testMethods.add( testMethod );
     }
 
-    public void incrementFinishedTests( RunListener reporterManager, boolean reportImmediately )
+    public void incrementFinishedTests( TestRunListener reporterManager, boolean reportImmediately )
     {
         numberOfCompletedChildren.incrementAndGet();
         if ( allScheduled && isAllTestsDone() && reportImmediately )
@@ -142,7 +142,7 @@ public class TestSet
         }
     }
 
-    public void setAllScheduled( RunListener reporterManager )
+    public void setAllScheduled( TestRunListener reporterManager )
     {
         allScheduled = true;
         if ( isAllTestsDone() )
diff --git a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/ConcurrentRunListenerTest.java b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/ConcurrentRunListenerTest.java
index 8940b51..c512a51 100644
--- a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/ConcurrentRunListenerTest.java
+++ b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/ConcurrentRunListenerTest.java
@@ -27,7 +27,7 @@ import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
 import org.apache.maven.surefire.api.report.ConsoleStream;
 import org.apache.maven.surefire.api.report.DefaultDirectConsoleReporter;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.report.RunStatistics;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
 
@@ -149,7 +149,7 @@ public class ConcurrentRunListenerTest
         DefaultReporterFactory reporterFactory = createReporterFactory();
         HashMap<String, TestSet> classMethodCounts = new HashMap<>();
         final ConsoleStream defaultConsoleReporter = new DefaultDirectConsoleReporter( System.out );
-        RunListener reporter =
+        TestRunListener reporter =
             new ClassesParallelRunListener( classMethodCounts, reporterFactory, defaultConsoleReporter );
         JUnitCoreRunListener runListener = new JUnitCoreRunListener( reporter, classMethodCounts );
         RunStatistics result = runClasses( reporterFactory, runListener, classes );
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 defc3a9..6a36bdc 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
@@ -25,10 +25,9 @@ import org.apache.maven.plugin.surefire.extensions.SurefireStatelessReporter;
 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessTestsetInfoReporter;
 import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.DefaultDirectConsoleReporter;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
 import org.junit.runner.Computer;
 import org.junit.runner.JUnitCore;
@@ -66,9 +65,9 @@ public class JUnitCoreTester
         try
         {
             final HashMap<String, TestSet> classMethodCounts = new HashMap<>();
-            RunListener reporter = createInstance( classMethodCounts, reporterManagerFactory, parallelClasses, false,
-                                                         new DefaultDirectConsoleReporter( System.out ) );
-            startCapture( (ConsoleOutputReceiver) reporter );
+            TestRunListener reporter = createInstance( classMethodCounts, reporterManagerFactory, parallelClasses,
+                false, new DefaultDirectConsoleReporter( System.out ) );
+            startCapture( reporter );
 
             JUnitCoreRunListener runListener = new JUnitCoreRunListener( reporter, classMethodCounts );
             JUnitCore junitCore = new JUnitCore();
diff --git a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/MockReporter.java b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/MockReporter.java
index 3694f92..e533bf6 100644
--- a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/MockReporter.java
+++ b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/MockReporter.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.maven.surefire.api.report.ReportEntry;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.report.TestSetReportEntry;
 import org.apache.maven.surefire.api.report.RunMode;
 
@@ -31,7 +31,7 @@ import org.apache.maven.surefire.api.report.RunMode;
  * Internal tests use only.
  */
 final class MockReporter
-    implements RunListener
+    implements TestRunListener
 {
     private final List<String> events = new ArrayList<>();
 
@@ -136,4 +136,10 @@ final class MockReporter
     {
         return events.contains( event );
     }
+
+    @Override
+    public void writeTestOutput( String output, boolean newLine, boolean stdout )
+    {
+
+    }
 }
diff --git a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/Surefire746Test.java b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/Surefire746Test.java
index 38690ae..eb8f736 100644
--- a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/Surefire746Test.java
+++ b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/Surefire746Test.java
@@ -46,12 +46,12 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.maven.surefire.api.booter.BaseProviderFactory;
 import org.apache.maven.surefire.api.booter.ProviderParameterNames;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.common.junit4.JUnit4RunListener;
 import org.apache.maven.surefire.common.junit4.Notifier;
 import org.apache.maven.surefire.api.report.DefaultDirectConsoleReporter;
 import org.apache.maven.surefire.api.report.ReporterConfiguration;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
 import org.apache.maven.surefire.api.suite.RunResult;
 import org.apache.maven.surefire.api.testset.TestSetFailedException;
 import org.apache.maven.surefire.api.util.TestsToRun;
@@ -120,7 +120,7 @@ public class Surefire746Test
 
         final Map<String, TestSet> testSetMap = new ConcurrentHashMap<>();
 
-        RunListener listener = ConcurrentRunListener.createInstance( testSetMap, reporterFactory, false, false,
+        TestRunListener listener = ConcurrentRunListener.createInstance( testSetMap, reporterFactory, false, false,
                 new DefaultDirectConsoleReporter( System.out ) );
 
         TestsToRun testsToRun = new TestsToRun( Collections.<Class<?>>singleton( TestClassTest.class ) );
@@ -172,13 +172,13 @@ public class Surefire746Test
         @Override
         public void run( RunNotifier notifier )
         {
-            notifier.addListener( new TestRunListener() );
+            notifier.addListener( new Listener() );
             super.run( notifier );
         }
 
     }
 
-    private static class TestRunListener extends org.junit.runner.notification.RunListener
+    private static class Listener extends org.junit.runner.notification.RunListener
     {
         @Override
         public void testFinished( Description description ) throws Exception
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 5878248..583ebd7 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
@@ -25,10 +25,9 @@ import org.apache.maven.surefire.api.provider.CommandListener;
 import org.apache.maven.surefire.api.cli.CommandLineOption;
 import org.apache.maven.surefire.api.provider.AbstractProvider;
 import org.apache.maven.surefire.api.provider.ProviderParameters;
-import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.api.report.ReporterConfiguration;
 import org.apache.maven.surefire.api.report.ReporterFactory;
-import org.apache.maven.surefire.api.report.RunListener;
+import org.apache.maven.surefire.api.report.TestRunListener;
 import org.apache.maven.surefire.api.suite.RunResult;
 import org.apache.maven.surefire.testng.utils.FailFastEventsSingleton;
 import org.apache.maven.surefire.api.testset.TestListResolver;
@@ -98,12 +97,12 @@ public class TestNGProvider
         }
 
         final ReporterFactory reporterFactory = providerParameters.getReporterFactory();
-        final RunListener reporter = reporterFactory.createReporter();
+        final TestRunListener reporter = reporterFactory.createReporter();
         /*
          * {@link org.apache.maven.surefire.api.report.ConsoleOutputCapture#startCapture(ConsoleOutputReceiver)}
          * called in prior to initializing variable {@link #testsToRun}
          */
-        startCapture( (ConsoleOutputReceiver) reporter );
+        startCapture( reporter );
 
         RunResult runResult;
         try