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 2018/12/26 13:05:31 UTC
[maven-surefire] 01/01: [SUREFIRE-1585] Align JUnit Platform
version at runtime
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch SUREFIRE-1585-tibor
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit 38ee6e94a81682eee6390911c10576d3b881f064
Author: Tibor17 <ti...@apache.org>
AuthorDate: Wed Dec 26 14:05:14 2018 +0100
[SUREFIRE-1585] Align JUnit Platform version at runtime
---
.../plugin/surefire/AbstractSurefireMojo.java | 161 +++++++++++++++++----
.../surefire/SurefireDependencyResolver.java | 13 ++
.../maven/plugin/surefire/TestClassPath.java | 15 +-
.../AbstractSurefireMojoJava7PlusTest.java | 3 +-
.../plugin/surefire/AbstractSurefireMojoTest.java | 3 +-
pom.xml | 4 +-
.../maven/surefire/its/JUnitPlatformEnginesIT.java | 6 +-
surefire-providers/surefire-junit-platform/pom.xml | 4 +
.../junitplatform/JUnitPlatformSuiteTest.java | 45 ++++++
9 files changed, 214 insertions(+), 40 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 677e3ee..dc9eb50 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
@@ -21,7 +21,9 @@ package org.apache.maven.plugin.surefire;
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.repository.RepositorySystem;
@@ -990,7 +992,8 @@ public abstract class AbstractSurefireMojo
private void executeAfterPreconditionsChecked( @Nonnull DefaultScanResult scanResult )
throws MojoExecutionException, MojoFailureException
{
- List<ProviderInfo> providers = createProviders();
+ TestClassPath testClasspathWrapper = generateTestClasspath();
+ List<ProviderInfo> providers = createProviders( testClasspathWrapper );
RunResult current = noTestsRun();
@@ -999,7 +1002,7 @@ public abstract class AbstractSurefireMojo
{
try
{
- current = current.aggregate( executeProvider( provider, scanResult ) );
+ current = current.aggregate( executeProvider( provider, scanResult, testClasspathWrapper ) );
}
catch ( SurefireBooterForkException | SurefireExecutionException | TestSetFailedException e )
{
@@ -1026,13 +1029,13 @@ public abstract class AbstractSurefireMojo
getPluginName() );
}
- protected List<ProviderInfo> createProviders()
+ protected List<ProviderInfo> createProviders( TestClassPath testClasspathWrapper )
throws MojoExecutionException
{
Artifact junitDepArtifact = getJunitDepArtifact();
return new ProviderList( new DynamicProviderInfo( null ),
new TestNgProviderInfo( getTestNgArtifact() ),
- new JUnitPlatformProviderInfo( getJunitPlatformArtifact() ),
+ new JUnitPlatformProviderInfo( getJunitPlatformArtifact(), testClasspathWrapper ),
new JUnitCoreProviderInfo( getJunitArtifact(), junitDepArtifact ),
new JUnit4ProviderInfo( getJunitArtifact(), junitDepArtifact ),
new JUnit3ProviderInfo() )
@@ -1124,7 +1127,8 @@ public abstract class AbstractSurefireMojo
}
@Nonnull
- private RunResult executeProvider( @Nonnull ProviderInfo provider, @Nonnull DefaultScanResult scanResult )
+ private RunResult executeProvider( @Nonnull ProviderInfo provider, @Nonnull DefaultScanResult scanResult,
+ @Nonnull TestClassPath testClasspathWrapper )
throws MojoExecutionException, MojoFailureException, SurefireExecutionException, SurefireBooterForkException,
TestSetFailedException
{
@@ -1139,8 +1143,8 @@ public abstract class AbstractSurefireMojo
{
createCopyAndReplaceForkNumPlaceholder( effectiveProperties, 1 ).copyToSystemProperties();
- InPluginVMSurefireStarter surefireStarter =
- createInprocessStarter( provider, classLoaderConfiguration, runOrderParameters, scanResult, platform );
+ InPluginVMSurefireStarter surefireStarter = createInprocessStarter( provider, classLoaderConfiguration,
+ runOrderParameters, scanResult, platform, testClasspathWrapper );
return surefireStarter.runSuitesInProcess( scanResult );
}
else
@@ -1156,7 +1160,8 @@ public abstract class AbstractSurefireMojo
try
{
forkStarter = createForkStarter( provider, forkConfiguration, classLoaderConfiguration,
- runOrderParameters, getConsoleLogger(), scanResult, platform );
+ runOrderParameters, getConsoleLogger(), scanResult, platform,
+ testClasspathWrapper );
return forkStarter.run( effectiveProperties, scanResult );
}
@@ -1695,7 +1700,7 @@ public abstract class AbstractSurefireMojo
return h;
}
- public File getStatisticsFile( String configurationHash )
+ private File getStatisticsFile( String configurationHash )
{
return new File( getBasedir(), ".surefire-" + configurationHash );
}
@@ -1703,7 +1708,8 @@ public abstract class AbstractSurefireMojo
private StartupConfiguration createStartupConfiguration( @Nonnull ProviderInfo provider, boolean isInprocess,
@Nonnull ClassLoaderConfiguration classLoaderConfiguration,
@Nonnull DefaultScanResult scanResult,
- @Nonnull Platform platform )
+ @Nonnull Platform platform,
+ @Nonnull TestClassPath testClasspathWrapper )
throws MojoExecutionException
{
try
@@ -1721,11 +1727,12 @@ public abstract class AbstractSurefireMojo
.toString();
return newStartupConfigWithModularPath( classLoaderConfiguration, providerArtifacts, providerName,
- getModuleDescriptor(), scanResult, javaHome );
+ getModuleDescriptor(), scanResult, javaHome, testClasspathWrapper );
}
else
{
- return newStartupConfigWithClasspath( classLoaderConfiguration, providerArtifacts, providerName );
+ return newStartupConfigWithClasspath( classLoaderConfiguration, providerArtifacts, providerName,
+ testClasspathWrapper );
}
}
catch ( IOException e )
@@ -1736,9 +1743,8 @@ public abstract class AbstractSurefireMojo
private StartupConfiguration newStartupConfigWithClasspath(
@Nonnull ClassLoaderConfiguration classLoaderConfiguration, @Nonnull Set<Artifact> providerArtifacts,
- @Nonnull String providerName )
+ @Nonnull String providerName, @Nonnull TestClassPath testClasspathWrapper )
{
- TestClassPath testClasspathWrapper = generateTestClasspath();
Classpath testClasspath = testClasspathWrapper.toClasspath();
testClasspathWrapper.avoidArtifactDuplicates( providerArtifacts );
@@ -1813,10 +1819,9 @@ public abstract class AbstractSurefireMojo
private StartupConfiguration newStartupConfigWithModularPath(
@Nonnull ClassLoaderConfiguration classLoaderConfiguration, @Nonnull Set<Artifact> providerArtifacts,
@Nonnull String providerName, @Nonnull File moduleDescriptor, @Nonnull DefaultScanResult scanResult,
- @Nonnull String javaHome )
+ @Nonnull String javaHome, @Nonnull TestClassPath testClasspathWrapper )
throws IOException
{
- TestClassPath testClasspathWrapper = generateTestClasspath();
Classpath testClasspath = testClasspathWrapper.toClasspath();
testClasspathWrapper.avoidArtifactDuplicates( providerArtifacts );
@@ -2142,11 +2147,12 @@ public abstract class AbstractSurefireMojo
private ForkStarter createForkStarter( @Nonnull ProviderInfo provider, @Nonnull ForkConfiguration forkConfiguration,
@Nonnull ClassLoaderConfiguration classLoaderConfiguration,
@Nonnull RunOrderParameters runOrderParameters, @Nonnull ConsoleLogger log,
- @Nonnull DefaultScanResult scanResult, @Nonnull Platform platform )
+ @Nonnull DefaultScanResult scanResult, @Nonnull Platform platform,
+ @Nonnull TestClassPath testClasspathWrapper )
throws MojoExecutionException, MojoFailureException
{
- StartupConfiguration startupConfiguration =
- createStartupConfiguration( provider, false, classLoaderConfiguration, scanResult, platform );
+ StartupConfiguration startupConfiguration = createStartupConfiguration( provider, false,
+ classLoaderConfiguration, scanResult, platform, testClasspathWrapper );
String configChecksum = getConfigChecksum();
StartupReportConfiguration startupReportConfiguration = getStartupReportConfiguration( configChecksum, true );
ProviderConfiguration providerConfiguration = createProviderConfiguration( runOrderParameters );
@@ -2158,11 +2164,12 @@ public abstract class AbstractSurefireMojo
@Nonnull ClassLoaderConfiguration classLoaderConfig,
@Nonnull RunOrderParameters runOrderParameters,
@Nonnull DefaultScanResult scanResult,
- @Nonnull Platform platform )
+ @Nonnull Platform platform,
+ @Nonnull TestClassPath testClasspathWrapper )
throws MojoExecutionException, MojoFailureException
{
- StartupConfiguration startupConfiguration =
- createStartupConfiguration( provider, true, classLoaderConfig, scanResult, platform );
+ StartupConfiguration startupConfiguration = createStartupConfiguration( provider, true, classLoaderConfig,
+ scanResult, platform, testClasspathWrapper );
String configChecksum = getConfigChecksum();
StartupReportConfiguration startupReportConfiguration = getStartupReportConfiguration( configChecksum, false );
ProviderConfiguration providerConfiguration = createProviderConfiguration( runOrderParameters );
@@ -2505,7 +2512,7 @@ public abstract class AbstractSurefireMojo
*/
private TestClassPath generateTestClasspath()
{
- @SuppressWarnings( "unchecked" ) Set<Artifact> classpathArtifacts = getProject().getArtifacts();
+ Set<Artifact> classpathArtifacts = getProject().getArtifacts();
if ( getClasspathDependencyScopeExclude() != null && !getClasspathDependencyScopeExclude().isEmpty() )
{
@@ -2867,11 +2874,13 @@ public abstract class AbstractSurefireMojo
final class JUnitPlatformProviderInfo
implements ProviderInfo
{
- private final Artifact junitArtifact;
+ private final Artifact junitPlatformArtifact;
+ private final TestClassPath testClasspathWrapper;
- JUnitPlatformProviderInfo( Artifact junitArtifact )
+ JUnitPlatformProviderInfo( Artifact junitPlatformArtifact, TestClassPath testClasspathWrapper )
{
- this.junitArtifact = junitArtifact;
+ this.junitPlatformArtifact = junitPlatformArtifact;
+ this.testClasspathWrapper = testClasspathWrapper;
}
@Override
@@ -2884,7 +2893,7 @@ public abstract class AbstractSurefireMojo
@Override
public boolean isApplicable()
{
- return junitArtifact != null;
+ return junitPlatformArtifact != null;
}
@Override
@@ -2897,8 +2906,102 @@ public abstract class AbstractSurefireMojo
@Nonnull
public Set<Artifact> getProviderClasspath()
{
- String version = surefireBooterArtifact.getBaseVersion();
- return dependencyResolver.getProviderClasspath( "surefire-junit-platform", version );
+ String surefireVersion = surefireBooterArtifact.getBaseVersion();
+ Map<String, Artifact> providerArtifacts =
+ dependencyResolver.getProviderClasspathAsMap( "surefire-junit-platform", surefireVersion );
+ Map<String, Artifact> testDependencies = testClasspathWrapper.getTestDependencies();
+
+ if ( hasDependencyPlatformEngine( testDependencies ) )
+ {
+ String filterTestDependency = "org.junit.platform:junit-platform-engine";
+ logDebugOrCliShowErrors( "Test dependencies contain " + filterTestDependency );
+ narrowProviderDependencies( filterTestDependency, providerArtifacts, testDependencies );
+ }
+ else if ( hasDependencyJupiterAPI( testDependencies ) )
+ {
+ String api = "org.junit.jupiter:junit-jupiter-api";
+ String engineGroupId = "org.junit.jupiter";
+ String engineArtifactId = "junit-jupiter-engine";
+ String version = testDependencies.get( api ).getVersion();
+ addEngineByApi( api, engineGroupId, engineArtifactId, providerArtifacts, testDependencies );
+ alignVersions( version, providerArtifacts, testDependencies );
+ }
+ else if ( hasDependencyJUnit4( testDependencies ) )
+ {
+ String version = testDependencies.get( "junit:junit" ).getVersion();
+ addEngineByApi( "junit:junit", "junit", "junit", providerArtifacts, testDependencies );
+ alignVersions( version, providerArtifacts, testDependencies );
+ }
+ return new LinkedHashSet<>( providerArtifacts.values() );
+ }
+
+ private void addEngineByApi( String api,
+ String engineGroupId, String engineArtifactId,
+ Map<String, Artifact> providerArtifacts,
+ Map<String, Artifact> testDependencies )
+ {
+ String jupiterVersion = testDependencies.get( api ).getVersion();
+ narrowProviderDependencies( api, providerArtifacts, testDependencies );
+ for ( Artifact jupiterDep : resolve( engineGroupId, engineArtifactId, jupiterVersion ) )
+ {
+ String key = jupiterDep.getGroupId() + ":" + jupiterDep.getArtifactId();
+ if ( !testDependencies.containsKey( key ) )
+ {
+ providerArtifacts.put( key, jupiterDep );
+ }
+ }
+ }
+
+ private void narrowProviderDependencies( String filterTestDependency,
+ Map<String, Artifact> providerArtifacts,
+ Map<String, Artifact> testDependencies )
+ {
+ Artifact engine = testDependencies.get( filterTestDependency );
+ for ( Artifact engineDep : resolve( engine.getGroupId(), engine.getArtifactId(), engine.getVersion() ) )
+ {
+ providerArtifacts.remove( engineDep.getGroupId() + ":" + engineDep.getArtifactId() );
+ }
+ alignVersions( engine.getVersion(), providerArtifacts, testDependencies );
+ }
+
+ private void alignVersions( String version,
+ Map<String, Artifact> providerArtifacts,
+ Map<String, Artifact> testDependencies )
+ {
+ for ( Artifact launcherArtifact : resolve( "org.junit.platform", "junit-platform-launcher", version ) )
+ {
+ String key = launcherArtifact.getGroupId() + ":" + launcherArtifact.getArtifactId();
+ if ( !testDependencies.containsKey( key ) )
+ {
+ providerArtifacts.remove( key );
+ providerArtifacts.put( key, launcherArtifact );
+ }
+ }
+ }
+
+ private Set<Artifact> resolve( String g, String a, String v )
+ {
+ ArtifactHandler handler = junitPlatformArtifact.getArtifactHandler();
+ Artifact artifact = new DefaultArtifact( g, a, v, null, "jar", null, handler );
+ logDebugOrCliShowErrors( "Resolving artifact " + g + ":" + a + ":" + v );
+ Set<Artifact> r = dependencyResolver.resolveArtifact( artifact ).getArtifacts();
+ logDebugOrCliShowErrors( "Resolved artifact " + g + ":" + a + ":" + v + " to " + r );
+ return r;
+ }
+
+ private boolean hasDependencyJUnit4( Map<String, Artifact> providerArtifacts )
+ {
+ return providerArtifacts.containsKey( "junit:junit" );
+ }
+
+ private boolean hasDependencyJupiterAPI( Map<String, Artifact> providerArtifacts )
+ {
+ return providerArtifacts.containsKey( "org.junit.jupiter:junit-jupiter-api" );
+ }
+
+ private boolean hasDependencyPlatformEngine( Map<String, Artifact> providerArtifacts )
+ {
+ return providerArtifacts.containsKey( "org.junit.platform:junit-platform-engine" );
}
}
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 e403433..c31a2ae 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
@@ -20,6 +20,7 @@ package org.apache.maven.plugin.surefire;
*/
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -160,6 +161,18 @@ final class SurefireDependencyResolver
return orderProviderArtifacts( result.getArtifacts() );
}
+ @Nonnull
+ Map<String, Artifact> getProviderClasspathAsMap( String providerArtifactId, String providerVersion )
+ {
+ Map<String, Artifact> cpArtifactsMapping = new LinkedHashMap<>();
+ for ( Artifact cpArtifact : getProviderClasspath( providerArtifactId, providerVersion ) )
+ {
+ String key = cpArtifact.getGroupId() + ":" + cpArtifact.getArtifactId();
+ cpArtifactsMapping.put( key, cpArtifact );
+ }
+ return cpArtifactsMapping;
+ }
+
Set<Artifact> addProviderToClasspath( Map<String, Artifact> pluginArtifactMap, Artifact mojoPluginArtifact,
Artifact surefireCommon, Artifact surefireApi, Artifact surefireLoggerApi )
{
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/TestClassPath.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/TestClassPath.java
index ee8fadb..be220d2 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/TestClassPath.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/TestClassPath.java
@@ -26,7 +26,9 @@ import org.apache.maven.surefire.booter.Classpath;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static java.util.Collections.addAll;
@@ -53,12 +55,21 @@ final class TestClassPath
this.logger = logger;
}
+ Map<String, Artifact> getTestDependencies()
+ {
+ Map<String, Artifact> artifactMapping = new LinkedHashMap<>();
+ for ( Artifact artifact : artifacts )
+ {
+ artifactMapping.put( artifact.getGroupId() + ":" + artifact.getArtifactId(), artifact );
+ }
+ return artifactMapping;
+ }
+
void avoidArtifactDuplicates( Set<Artifact> providerArtifacts )
{
for ( Artifact artifact : artifacts )
{
- Iterator<Artifact> it = providerArtifacts.iterator();
- while ( it.hasNext() )
+ for ( Iterator<Artifact> it = providerArtifacts.iterator(); it.hasNext(); )
{
Artifact providerArtifact = it.next();
String classifier1 = providerArtifact.getClassifier();
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 17cd930..13f1d6f 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
@@ -156,11 +156,10 @@ public class AbstractSurefireMojoJava7PlusTest
StartupConfiguration conf = invokeMethod( mojo, "newStartupConfigWithModularPath",
classLoaderConfiguration, providerClasspath, "org.asf.Provider", moduleInfo, scanResult,
- "" );
+ "", testClasspath );
verify( mojo, times( 1 ) ).effectiveIsEnableAssertions();
verify( mojo, times( 1 ) ).isChildDelegation();
- verifyPrivate( mojo, times( 1 ) ).invoke( "generateTestClasspath" );
verify( mojo, times( 1 ) ).getEffectiveForkCount();
verify( mojo, times( 1 ) ).getTestClassesDirectory();
verify( scanResult, times( 1 ) ).getClasses();
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 a6fc708..a5d2da0 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
@@ -267,11 +267,10 @@ public class AbstractSurefireMojoTest
when( mojo.getConsoleLogger() ).thenReturn( new PluginConsoleLogger( logger ) );
StartupConfiguration conf = invokeMethod( mojo, "newStartupConfigWithClasspath",
- classLoaderConfiguration, providerArtifacts, "org.asf.Provider" );
+ classLoaderConfiguration, providerArtifacts, "org.asf.Provider", testClasspath );
verify( mojo, times( 1 ) ).effectiveIsEnableAssertions();
verify( mojo, times( 1 ) ).isChildDelegation();
- verifyPrivate( mojo, times( 1 ) ).invoke( "generateTestClasspath" );
verify( mojo, times( 1 ) ).getEffectiveForkCount();
ArgumentCaptor<String> argument = ArgumentCaptor.forClass( String.class );
verify( logger, times( 6 ) ).debug( argument.capture() );
diff --git a/pom.xml b/pom.xml
index e30e97f..fac3f6a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -277,12 +277,12 @@
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
- <version>1.3.1</version>
+ <version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
- <version>5.3.1</version>
+ <version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java
index 332cbb9..0170161 100644
--- a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformEnginesIT.java
@@ -59,7 +59,7 @@ public class JUnitPlatformEnginesIT
public static Iterable<Object[]> regexVersions()
{
ArrayList<Object[]> args = new ArrayList<Object[]>();
- args.add( new Object[] { "1.0.0", "5.0.0", "1.0.0", "1.0.0" } );
+ args.add( new Object[] { "1.0.3", "5.0.3", "1.0.0", "1.0.0" } );
args.add( new Object[] { "1.1.1", "5.1.1", "1.0.0", "1.0.0" } );
args.add( new Object[] { "1.2.0", "5.2.0", "1.1.0", "1.0.0" } );
args.add( new Object[] { "1.3.1", "5.3.1", "1.1.1", "1.0.0" } );
@@ -114,7 +114,7 @@ public class JUnitPlatformEnginesIT
+ " surefire-api-*.jar"
+ " surefire-logger-api-*.jar"
+ " common-java5-*.jar"
- + " junit-platform-launcher-1.3.1.jar";
+ + " junit-platform-launcher-" + platform + ".jar";
lines = validator.loadLogLines( startsWith( "[DEBUG] provider(compact) classpath" ) );
@@ -138,7 +138,7 @@ public class JUnitPlatformEnginesIT
+ " opentest4j-" + opentest + ".jar"
+ " junit-jupiter-api-" + jupiter + ".jar"
+ " surefire-junit-platform-*.jar"
- + " junit-platform-launcher-1.3.1.jar";
+ + " junit-platform-launcher-" + platform + ".jar";
lines = validator.loadLogLines( startsWith( "[DEBUG] boot(compact) classpath" ) );
diff --git a/surefire-providers/surefire-junit-platform/pom.xml b/surefire-providers/surefire-junit-platform/pom.xml
index 2eb74cb..f6265f8 100644
--- a/surefire-providers/surefire-junit-platform/pom.xml
+++ b/surefire-providers/surefire-junit-platform/pom.xml
@@ -139,6 +139,10 @@
<version>3.0.0-M2</version> <!-- ${shadedVersion}, but resolved due to https://issues.apache.org/jira/browse/MRELEASE-799 -->
<configuration>
<jvm>${java.home}/bin/java</jvm>
+ <redirectTestOutputToFile>true</redirectTestOutputToFile>
+ <includes>
+ <include>**/JUnitPlatformSuiteTest.java</include>
+ </includes>
</configuration>
</plugin>
</plugins>
diff --git a/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformSuiteTest.java b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformSuiteTest.java
new file mode 100644
index 0000000..399077e
--- /dev/null
+++ b/surefire-providers/surefire-junit-platform/src/test/java/org/apache/maven/surefire/junitplatform/JUnitPlatformSuiteTest.java
@@ -0,0 +1,45 @@
+package org.apache.maven.surefire.junitplatform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.JUnit4TestAdapter;
+import junit.framework.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * Adapt the JUnit4 tests which use only annotations to the JUnit3 test suite.
+ *
+ * @since 3.0.0-M4
+ */
+@Suite.SuiteClasses( {
+ JUnitPlatformProviderTest.class,
+ RunListenerAdapterTest.class,
+ TestMethodFilterTest.class,
+ TestPlanScannerFilterTest.class
+} )
+@RunWith( Suite.class )
+public class JUnitPlatformSuiteTest
+{
+ public static Test suite()
+ {
+ return new JUnit4TestAdapter( JUnitPlatformSuiteTest.class );
+ }
+}