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 2019/04/13 04:58:57 UTC

[maven-surefire] branch 1546-1222 updated: used default DisplayName (useFileName, useTestCaseClassName, useTestCaseMethodName) in StatelessXmlReporter

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

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


The following commit(s) were added to refs/heads/1546-1222 by this push:
     new 05e5a51  used default DisplayName (useFileName, useTestCaseClassName, useTestCaseMethodName) in StatelessXmlReporter
05e5a51 is described below

commit 05e5a5146e67b79280104a1915cdfef4b12fe871
Author: tibordigana <ti...@apache.org>
AuthorDate: Sat Apr 13 06:58:45 2019 +0200

    used default DisplayName (useFileName, useTestCaseClassName, useTestCaseMethodName) in StatelessXmlReporter
---
 .../plugin/surefire/AbstractSurefireMojo.java      | 16 ++++--
 .../surefire/StartupReportConfiguration.java       |  4 +-
 .../surefire/SurefireDependencyResolver.java       |  9 +---
 .../extensions/DefaultStatelessReporter.java       | 60 ++++++++++++++++++++--
 .../surefire/report/NullStatelessXmlReporter.java  |  2 +-
 .../surefire/report/StatelessXmlReporter.java      | 30 ++++++++---
 .../plugin/surefire/report/WrappedReportEntry.java |  5 ++
 .../AbstractSurefireMojoJava7PlusTest.java         | 10 ++--
 .../plugin/surefire/AbstractSurefireMojoTest.java  |  9 +++-
 .../surefire/SurefireDependencyResolverTest.java   |  2 +-
 .../surefire/report/StatelessXmlReporterTest.java  |  7 +--
 .../surefire/report/WrappedReportEntryTest.java    |  4 ++
 .../maven/surefire/extensions/SourceNameType.java  |  2 +-
 .../surefire/extensions/StatelessReporter.java     |  8 +--
 14 files changed, 131 insertions(+), 37 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 6fc4c87..d5a36e5 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -674,9 +674,10 @@ public abstract class AbstractSurefireMojo
 
     /**
      * Flag to disable the generation of report files in xml format.
-     *
+     * Deprecated since 3.0.0-M4. Use this parameter within {@code statelessReporter}.
      * @since 2.2
      */
+    @Deprecated
     @Parameter( property = "disableXmlReport", defaultValue = "false" )
     private boolean disableXmlReport;
 
@@ -1785,7 +1786,8 @@ public abstract class AbstractSurefireMojo
         getConsoleLogger().debug( testClasspath.getCompactLogMessage( "test(compact) classpath:" ) );
         getConsoleLogger().debug( providerClasspath.getCompactLogMessage( "provider(compact) classpath:" ) );
 
-        Artifact[] additionalInProcArtifacts = { getCommonArtifact(), getApiArtifact(), getLoggerApiArtifact() };
+        Artifact[] additionalInProcArtifacts =
+                { getCommonArtifact(), getExtensionsArtifact(), getApiArtifact(), getLoggerApiArtifact() };
         Set<Artifact> inProcArtifacts = retainInProcArtifactsUnique( providerArtifacts, additionalInProcArtifacts );
         Classpath inProcClasspath = createInProcClasspath( providerClasspath, inProcArtifacts );
         getConsoleLogger().debug( inProcClasspath.getLogMessage( "in-process classpath:" ) );
@@ -1885,7 +1887,8 @@ public abstract class AbstractSurefireMojo
         ModularClasspath modularClasspath = new ModularClasspath( moduleDescriptor, testModulepath.getClassPath(),
                 packages, getTestClassesDirectory() );
 
-        Artifact[] additionalInProcArtifacts = { getCommonArtifact(), getApiArtifact(), getLoggerApiArtifact() };
+        Artifact[] additionalInProcArtifacts =
+                { getCommonArtifact(), getExtensionsArtifact(), getApiArtifact(), getLoggerApiArtifact() };
         Set<Artifact> inProcArtifacts = retainInProcArtifactsUnique( providerArtifacts, additionalInProcArtifacts );
         Classpath inProcClasspath = createInProcClasspath( providerClasspath, inProcArtifacts );
 
@@ -1910,6 +1913,11 @@ public abstract class AbstractSurefireMojo
         return getPluginArtifactMap().get( "org.apache.maven.surefire:maven-surefire-common" );
     }
 
+    private Artifact getExtensionsArtifact()
+    {
+        return getPluginArtifactMap().get( "org.apache.maven.surefire:surefire-extensions-api" );
+    }
+
     private Artifact getApiArtifact()
     {
         return getPluginArtifactMap().get( "org.apache.maven.surefire:surefire-api" );
@@ -3163,7 +3171,7 @@ public abstract class AbstractSurefireMojo
         public Set<Artifact> getProviderClasspath()
         {
             return surefireDependencyResolver.addProviderToClasspath( getPluginArtifactMap(), getMojoArtifact(),
-                    getCommonArtifact(), getApiArtifact(), getLoggerApiArtifact() );
+                    getApiArtifact(), getLoggerApiArtifact() );
         }
     }
 
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/StartupReportConfiguration.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/StartupReportConfiguration.java
index 932eecd..962b7c3 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/StartupReportConfiguration.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/StartupReportConfiguration.java
@@ -39,6 +39,7 @@ import static org.apache.maven.plugin.surefire.SurefireHelper.replaceForkThreads
 import static org.apache.maven.plugin.surefire.report.ConsoleReporter.BRIEF;
 import static org.apache.maven.plugin.surefire.report.ConsoleReporter.PLAIN;
 import static org.apache.commons.lang3.StringUtils.trimToNull;
+import static org.apache.maven.surefire.extensions.SourceNameType.DEFAULT;
 
 /**
  * All the parameters used to construct reporters
@@ -151,7 +152,6 @@ public final class StartupReportConfiguration
         return rerunFailingTestsCount;
     }
 
-    @Deprecated // rename to stateful
     public StatelessXmlReporter instantiateStatelessXmlReporter( Integer forkNumber )
     {
         assert forkNumber == null || isForkMode;
@@ -168,7 +168,7 @@ public final class StartupReportConfiguration
         return isDisableXmlReport()
             ? null
             : new StatelessXmlReporter( resolveReportsDirectory( forkNumber ), reportNameSuffix, trimStackTrace,
-                rerunFailingTestsCount, testClassMethodRunHistory, xsdSchemaLocation );
+                rerunFailingTestsCount, testClassMethodRunHistory, xsdSchemaLocation, DEFAULT, DEFAULT, DEFAULT );
     }
 
     public FileReporter instantiateFileReporter( Integer forkNumber )
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
index 170107c..16cb6c8 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
@@ -205,7 +205,7 @@ final class SurefireDependencyResolver
     }
 
     Set<Artifact> addProviderToClasspath( Map<String, Artifact> pluginArtifactMap, Artifact mojoPluginArtifact,
-                                          Artifact surefireCommon, Artifact surefireApi, Artifact surefireLoggerApi )
+                                          Artifact surefireApi, Artifact surefireLoggerApi )
     {
         Set<Artifact> providerArtifacts = new LinkedHashSet<>();
         ArtifactResolutionResult artifactResolutionResult = resolvePluginArtifact( mojoPluginArtifact );
@@ -218,12 +218,7 @@ final class SurefireDependencyResolver
                 {
                     String groupId = dependency.getGroupId();
                     String artifactId = dependency.getArtifactId();
-                    if ( groupId.equals( surefireCommon.getGroupId() )
-                            && artifactId.equals( surefireCommon.getArtifactId() ) )
-                    {
-                        providerArtifacts.add( surefireCommon );
-                    }
-                    else if ( groupId.equals( surefireApi.getGroupId() )
+                    if ( groupId.equals( surefireApi.getGroupId() )
                             && artifactId.equals( surefireApi.getArtifactId() ) )
                     {
                         providerArtifacts.add( surefireApi );
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/DefaultStatelessReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/DefaultStatelessReporter.java
index a2e59a4..0a96052 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/DefaultStatelessReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/DefaultStatelessReporter.java
@@ -20,9 +20,13 @@ package org.apache.maven.plugin.surefire.extensions;
  */
 
 import org.apache.maven.plugin.surefire.report.StatelessXmlReporter;
+import org.apache.maven.surefire.extensions.SourceNameType;
 import org.apache.maven.surefire.extensions.StatelessReportEventListener;
 import org.apache.maven.surefire.extensions.StatelessReporter;
 
+import static org.apache.maven.surefire.extensions.SourceNameType.DEFAULT;
+import static org.apache.maven.surefire.extensions.SourceNameType.PHRASED;
+
 /**
  * Default implementation for extension of {@link StatelessXmlReporter} in plugin.
  *
@@ -37,8 +41,58 @@ public class DefaultStatelessReporter
     public StatelessReportEventListener<StatelessReporterEvent> createStatelessReportEventListener(
             DefaultStatelessReportMojoConfiguration configuration )
     {
-        return new StatelessXmlReporter( configuration.getReportsDirectory(), configuration.getReportNameSuffix(),
-                configuration.isTrimStackTrace(), configuration.getRerunFailingTestsCount(),
-                configuration.getTestClassMethodRunHistory(), configuration.getXsdSchemaLocation() );
+        return new StatelessXmlReporter( configuration.getReportsDirectory(),
+                configuration.getReportNameSuffix(),
+                configuration.isTrimStackTrace(),
+                configuration.getRerunFailingTestsCount(),
+                configuration.getTestClassMethodRunHistory(),
+                configuration.getXsdSchemaLocation(),
+                getUseFileName(),
+                getUseTestCaseClassName(),
+                getUseTestCaseMethodName() );
+    }
+
+    @Override
+    public Object clone( ClassLoader target )
+    {
+        try
+        {
+            Class<?> cls = target.loadClass( getClass().getName() );
+            Object clone = cls.newInstance();
+
+            cls.getMethod( "setDisableXmlReport", boolean.class )
+                    .invoke( clone, isDisableXmlReport() );
+
+            Class<?> enumCls = target.loadClass( SourceNameType.class.getName() );
+            Object[] enums = enumCls.getEnumConstants();
+            assert enums.length == 2 : "'SourceNameType' should have two enum constants {DEFAULT, PHRASED}.";
+            Enum<?> defaultSourceName = findEnumByName( enums, DEFAULT.name() );
+            Enum<?> phrasedSourceName = findEnumByName( enums, PHRASED.name() );
+            cls.getMethod( "setUseFileName", enumCls )
+                    .invoke( clone, getUseFileName() == DEFAULT ? defaultSourceName : phrasedSourceName );
+            cls.getMethod( "setUseTestCaseClassName", enumCls )
+                    .invoke( clone, getUseTestCaseClassName() == DEFAULT ? defaultSourceName : phrasedSourceName );
+            cls.getMethod( "setUseTestCaseMethodName", enumCls )
+                    .invoke( clone, getUseTestCaseMethodName() == DEFAULT ? defaultSourceName : phrasedSourceName );
+
+            return clone;
+        }
+        catch ( ReflectiveOperationException e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage() );
+        }
+    }
+
+    private static Enum<?> findEnumByName( Object[] enums, String name )
+    {
+        for ( Object e : enums )
+        {
+            Enum<?> foundEnum = (Enum<?>) e;
+            if ( name.equals( foundEnum.name() ) )
+            {
+                return foundEnum;
+            }
+        }
+        throw new IllegalStateException( "Could not find enum " + name );
     }
 }
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java
index 7f5d202..a6b3b23 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/NullStatelessXmlReporter.java
@@ -33,7 +33,7 @@ class NullStatelessXmlReporter
 
     private NullStatelessXmlReporter()
     {
-        super( null, null, false, 0, null, null );
+        super( null, null, false, 0, null, null, null, null, null );
     }
 
     @Override
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
index c5f7842..dec75f8 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
@@ -23,8 +23,8 @@ import org.apache.maven.plugin.surefire.booterclient.output.InPluginProcessDumpS
 import org.apache.maven.plugin.surefire.extensions.StatelessReporterEvent;
 import org.apache.maven.shared.utils.xml.PrettyPrintXMLWriter;
 import org.apache.maven.shared.utils.xml.XMLWriter;
+import org.apache.maven.surefire.extensions.SourceNameType;
 import org.apache.maven.surefire.extensions.StatelessReportEventListener;
-import org.apache.maven.surefire.report.ReportEntry;
 import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.SafeThrowable;
 
@@ -48,6 +48,7 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.TestResultType;
 import static org.apache.maven.plugin.surefire.report.FileReporterUtils.stripIllegalFilenameChars;
 import static org.apache.maven.plugin.surefire.report.ReportEntryType.SUCCESS;
+import static org.apache.maven.surefire.extensions.SourceNameType.DEFAULT;
 import static org.apache.maven.surefire.util.internal.StringUtils.isBlank;
 
 @SuppressWarnings( { "javadoc", "checkstyle:javadoctype" } )
@@ -101,10 +102,17 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Statel
     // and the list of runs for each test method
     private final Map<String, Deque<WrappedReportEntry>> testClassMethodRunHistoryMap;
 
+    private final SourceNameType fileName;
+
+    private final SourceNameType className;
+
+    private final SourceNameType methodName;
+
     public StatelessXmlReporter( File reportsDirectory, String reportNameSuffix, boolean trimStackTrace,
                                  int rerunFailingTestsCount,
                                  Map<String, Deque<WrappedReportEntry>> testClassMethodRunHistoryMap,
-                                 String xsdSchemaLocation )
+                                 String xsdSchemaLocation,
+                                 SourceNameType fileName, SourceNameType className, SourceNameType methodName )
     {
         this.reportsDirectory = reportsDirectory;
         this.reportNameSuffix = reportNameSuffix;
@@ -112,6 +120,9 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Statel
         this.rerunFailingTestsCount = rerunFailingTestsCount;
         this.testClassMethodRunHistoryMap = testClassMethodRunHistoryMap;
         this.xsdSchemaLocation = xsdSchemaLocation;
+        this.fileName = fileName;
+        this.className = className;
+        this.methodName = methodName;
     }
 
     @Override
@@ -352,9 +363,9 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Statel
         return new OutputStreamWriter( fos, UTF_8 );
     }
 
-    private File getReportFile( ReportEntry report )
+    private File getReportFile( WrappedReportEntry report )
     {
-        String reportName = "TEST-" + report.getSourceName();
+        String reportName = "TEST-" + ( fileName == DEFAULT ? report.getSourceName() : report.getReportSourceName() );
         String customizedReportName = isBlank( reportNameSuffix ) ? reportName : reportName + "-" + reportNameSuffix;
         return new File( reportsDirectory, stripIllegalFilenameChars( customizedReportName + ".xml" ) );
     }
@@ -362,14 +373,17 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Statel
     private void startTestElement( XMLWriter ppw, WrappedReportEntry report )
     {
         ppw.startElement( "testcase" );
-        ppw.addAttribute( "name", report.getReportName() == null ? "" : extraEscape( report.getReportName(), true ) );
+        String name = methodName == DEFAULT ? report.getName() : report.getReportName();
+        ppw.addAttribute( "name", name == null ? "" : extraEscape( name, true ) );
 
         if ( report.getGroup() != null )
         {
             ppw.addAttribute( "group", report.getGroup() );
         }
 
-        String className = report.getReportSourceName( reportNameSuffix );
+        String className = this.className == DEFAULT
+                ? report.getSourceName( reportNameSuffix )
+                : report.getReportSourceName( reportNameSuffix );
         if ( className != null )
         {
             ppw.addAttribute( "classname", extraEscape( className, true ) );
@@ -386,7 +400,9 @@ public class StatelessXmlReporter implements StatelessReportEventListener<Statel
         ppw.addAttribute( "xsi:noNamespaceSchemaLocation", xsdSchemaLocation );
         ppw.addAttribute( "version", "3.0" );
 
-        String reportName = report.getReportSourceName( reportNameSuffix );
+        String reportName = this.className == DEFAULT
+                ? report.getSourceName( reportNameSuffix )
+                : report.getReportSourceName( reportNameSuffix );
         ppw.addAttribute( "name", reportName == null ? "" : extraEscape( reportName, true ) );
 
         if ( report.getGroup() != null )
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
index c1912a5..fd4bba3 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/WrappedReportEntry.java
@@ -167,6 +167,11 @@ public class WrappedReportEntry
         return isBlank( suffix ) ? getReportSourceName() : getReportSourceName() + "(" + suffix + ")";
     }
 
+    String getSourceName( String suffix )
+    {
+        return isBlank( suffix ) ? getSourceName() : getSourceName() + "(" + suffix + ")";
+    }
+
     String getReportName()
     {
         String name = getName();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
index 2d268bc..7770ab1 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
@@ -60,7 +60,6 @@ import static org.powermock.api.mockito.PowerMockito.doNothing;
 import static org.powermock.api.mockito.PowerMockito.mock;
 import static org.powermock.api.mockito.PowerMockito.mockStatic;
 import static org.powermock.api.mockito.PowerMockito.spy;
-import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
 import static org.powermock.api.mockito.PowerMockito.verifyStatic;
 import static org.powermock.reflect.Whitebox.invokeMethod;
 
@@ -155,6 +154,10 @@ public class AbstractSurefireMojoJava7PlusTest
                 "jar", "", handler );
         common.setFile( mockFile( "maven-surefire-common.jar" ) );
 
+        Artifact ext = new DefaultArtifact( "org.apache.maven.surefire", "surefire-extensions-api", v5, "runtime",
+                "jar", "", handler );
+        ext.setFile( mockFile( "surefire-extensions-api.jar" ) );
+
         Artifact api = new DefaultArtifact( "org.apache.maven.surefire", "surefire-api", v5, "runtime",
                 "jar", "", handler );
         api.setFile( mockFile( "surefire-api.jar" ) );
@@ -165,6 +168,7 @@ public class AbstractSurefireMojoJava7PlusTest
 
         Map<String, Artifact> artifacts = new HashMap<>();
         artifacts.put( "org.apache.maven.surefire:maven-surefire-common", common );
+        artifacts.put( "org.apache.maven.surefire:surefire-extensions-api", ext );
         artifacts.put( "org.apache.maven.surefire:surefire-api", api );
         artifacts.put( "org.apache.maven.surefire:surefire-logger-api", loggerApi );
         when( mojo.getPluginArtifactMap() ).thenReturn( artifacts );
@@ -200,8 +204,8 @@ public class AbstractSurefireMojoJava7PlusTest
                         "test(compact) classpath:  non-modular.jar  junit.jar  hamcrest.jar",
                         "test(compact) modulepath:  modular.jar  classes",
                         "provider(compact) classpath:  surefire-provider.jar",
-                        "in-process classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-api.jar  surefire-logger-api.jar",
-                        "in-process(compact) classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-api.jar  surefire-logger-api.jar"
+                        "in-process classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-extensions-api.jar  surefire-api.jar  surefire-logger-api.jar",
+                        "in-process(compact) classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-extensions-api.jar  surefire-api.jar  surefire-logger-api.jar"
                 );
 
         assertThat( conf ).isNotNull();
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
index 080f2b5..c71001b 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
@@ -236,6 +236,10 @@ public class AbstractSurefireMojoTest
                 createFromVersion( "1" ), "runtime", "jar", "", handler );
         common.setFile( mockFile( "maven-surefire-common.jar" ) );
 
+        Artifact ext = new DefaultArtifact( "org.apache.maven.surefire", "surefire-extensions-api",
+                createFromVersion( "1" ), "runtime", "jar", "", handler );
+        ext.setFile( mockFile( "surefire-extensions-api.jar" ) );
+
         Artifact api = new DefaultArtifact( "org.apache.maven.surefire", "surefire-api",
                 createFromVersion( "1" ), "runtime", "jar", "", handler );
         api.setFile( mockFile( "surefire-api.jar" ) );
@@ -246,6 +250,7 @@ public class AbstractSurefireMojoTest
 
         Map<String, Artifact> providerArtifactsMap = new HashMap<>();
         providerArtifactsMap.put( "org.apache.maven.surefire:maven-surefire-common", common );
+        providerArtifactsMap.put( "org.apache.maven.surefire:surefire-extensions-api", ext );
         providerArtifactsMap.put( "org.apache.maven.surefire:surefire-api", api );
         providerArtifactsMap.put( "org.apache.maven.surefire:surefire-logger-api", loggerApi );
 
@@ -297,8 +302,8 @@ public class AbstractSurefireMojoTest
                 "provider classpath:  surefire-provider.jar",
                 "test(compact) classpath:  test-classes  classes  junit.jar  hamcrest.jar",
                 "provider(compact) classpath:  surefire-provider.jar",
-                "in-process classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-api.jar  surefire-logger-api.jar",
-                "in-process(compact) classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-api.jar  surefire-logger-api.jar"
+                "in-process classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-extensions-api.jar  surefire-api.jar  surefire-logger-api.jar",
+                "in-process(compact) classpath:  surefire-provider.jar  maven-surefire-common.jar  surefire-extensions-api.jar  surefire-api.jar  surefire-logger-api.jar"
                 );
 
         assertThat( conf.getClassLoaderConfiguration() )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
index fdb1bbe..7088f77 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
@@ -359,7 +359,7 @@ public class SurefireDependencyResolverTest
         pluginArtifactsMapping.put( provider.getGroupId() + ":" + provider.getArtifactId(), provider );
         pluginArtifactsMapping.put( ext.getGroupId() + ":" + ext.getArtifactId(), ext );
 
-        Set<Artifact> cp = surefireDependencyResolver.addProviderToClasspath( pluginArtifactsMapping, plugin, common, api, logger );
+        Set<Artifact> cp = surefireDependencyResolver.addProviderToClasspath( pluginArtifactsMapping, plugin, api, logger );
         assertThat( cp )
                 .hasSize( 4 )
                 .containsOnly( provider, api, logger, ext );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
index 29b914a..ab22ef9 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
@@ -38,6 +38,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.maven.surefire.extensions.SourceNameType.DEFAULT;
 import static org.apache.maven.surefire.util.internal.ObjectUtils.systemProps;
 
 @SuppressWarnings( "ResultOfMethodCallIgnored" )
@@ -84,7 +85,7 @@ public class StatelessXmlReporterTest
     {
         StatelessXmlReporter reporter =
                 new StatelessXmlReporter( reportDir, null, false, 0,
-                        new ConcurrentHashMap<String, Deque<WrappedReportEntry>>(), XSD );
+                        new ConcurrentHashMap<String, Deque<WrappedReportEntry>>(), XSD, DEFAULT, DEFAULT, DEFAULT );
         reporter.cleanTestHistoryMap();
 
         ReportEntry reportEntry = new SimpleReportEntry( getClass().getName(), null, getClass().getName(), null, 12 );
@@ -134,7 +135,7 @@ public class StatelessXmlReporterTest
 
         stats.testSucceeded( t2 );
         StatelessXmlReporter reporter = new StatelessXmlReporter( reportDir, null, false, 0,
-                new ConcurrentHashMap<String, Deque<WrappedReportEntry>>(), XSD );
+                new ConcurrentHashMap<String, Deque<WrappedReportEntry>>(), XSD, DEFAULT, DEFAULT, DEFAULT );
         reporter.testSetCompleted( testSetReportEntry, stats );
 
         FileInputStream fileInputStream = new FileInputStream( expectedReportFile );
@@ -213,7 +214,7 @@ public class StatelessXmlReporterTest
 
         StatelessXmlReporter reporter =
                 new StatelessXmlReporter( reportDir, null, false, 1,
-                        new HashMap<String, Deque<WrappedReportEntry>>(), XSD );
+                        new HashMap<String, Deque<WrappedReportEntry>>(), XSD, DEFAULT, DEFAULT, DEFAULT );
 
         reporter.testSetCompleted( testSetReportEntry, stats );
         reporter.testSetCompleted( testSetReportEntry, rerunStats );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/WrappedReportEntryTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/WrappedReportEntryTest.java
index 014f722..abbc093 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/WrappedReportEntryTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/WrappedReportEntryTest.java
@@ -50,7 +50,10 @@ public class WrappedReportEntryTest
         WrappedReportEntry wr = new WrappedReportEntry( reportEntry, null, 12, null, null );
         assertEquals( "surefire.testcase.JunitParamsTest.testSum", wr.getClassMethodName() );
         assertEquals( "surefire.testcase.JunitParamsTest", wr.getReportSourceName() );
+        assertEquals( "surefire.testcase.JunitParamsTest", wr.getReportSourceName( "" ) );
         assertEquals( "surefire.testcase.JunitParamsTest(BDD)", wr.getReportSourceName( "BDD" ) );
+        assertEquals( "surefire.testcase.JunitParamsTest", wr.getSourceName( "" ) );
+        assertEquals( "surefire.testcase.JunitParamsTest(BDD)", wr.getSourceName( "BDD" ) );
         assertEquals( "testSum", wr.getReportName() );
         assertFalse(wr.isSucceeded());
         assertFalse( wr.isErrorOrFailure() );
@@ -68,6 +71,7 @@ public class WrappedReportEntryTest
         assertEquals( "surefire.testcase.JunitParamsTest.testSum", wr.getClassMethodName() );
         assertEquals( "dn1", wr.getReportSourceName() );
         assertEquals( "dn1(BDD)", wr.getReportSourceName( "BDD" ) );
+        assertEquals( "surefire.testcase.JunitParamsTest(BDD)", wr.getSourceName( "BDD" ) );
         assertEquals( "dn2", wr.getReportName() );
         assertFalse(wr.isSucceeded());
         assertTrue(wr.isErrorOrFailure());
diff --git a/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/SourceNameType.java b/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/SourceNameType.java
index dc49f48..ab3ee96 100644
--- a/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/SourceNameType.java
+++ b/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/SourceNameType.java
@@ -28,7 +28,7 @@ package org.apache.maven.surefire.extensions;
 public enum SourceNameType
 {
     /**
-     * Fully qualified Java class or name.
+     * Fully qualified Java class or method name.
      */
     DEFAULT,
 
diff --git a/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/StatelessReporter.java b/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/StatelessReporter.java
index a8f8586..ebe90a3 100644
--- a/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/StatelessReporter.java
+++ b/surefire-extensions-api/src/main/java/org/apache/maven/surefire/extensions/StatelessReporter.java
@@ -26,10 +26,10 @@ import java.util.EventObject;
  *
  * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
  * @since 3.0.0-M4
- * @param <T> Generic type of event type
+ * @param <E> Generic type of event type
  * @param <C> mojo config
  */
-public abstract class StatelessReporter<T extends EventObject, C extends StatelessReportMojoConfiguration>
+public abstract class StatelessReporter<E extends EventObject, C extends StatelessReportMojoConfiguration>
 {
     private boolean disableXmlReport;
     private SourceNameType useFileName;
@@ -41,7 +41,9 @@ public abstract class StatelessReporter<T extends EventObject, C extends Statele
      *
      * @return reporter object
      */
-    public abstract StatelessReportEventListener<T> createStatelessReportEventListener( C configuration );
+    public abstract StatelessReportEventListener<E> createStatelessReportEventListener( C configuration );
+
+    public abstract Object clone( ClassLoader target );
 
     public boolean isDisableXmlReport()
     {