This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch SUREFIRE-1585-tibor2 in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
The following commit(s) were added to refs/heads/SUREFIRE-1585-tibor2 by this push: new c03e5aa [SUREFIRE-1585] Align JUnit Platform version at runtime c03e5aa is described below commit c03e5aa260aef5191dda966165ac1ab700def0bd Author: tibordigana <tibordig...@apache.org> AuthorDate: Sun Feb 17 20:56:11 2019 +0100 [SUREFIRE-1585] Align JUnit Platform version at runtime --- .../plugin/surefire/AbstractSurefireMojoTest.java | 181 ++++++++++++++++----- 1 file changed, 141 insertions(+), 40 deletions(-) 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 68a7e3e..67a0d98 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 @@ -565,8 +565,7 @@ public class AbstractSurefireMojoTest } else if ( req.getArtifact().equals( testClasspathCommons ) ) { - return createTestClasspathCommonsResolutionResult( testClasspathSomeTestArtifact, null, - testClasspathApiguardian, testClasspathCommons, null ); + return createResolutionResult( testClasspathApiguardian, testClasspathCommons ); } else if ( "org.junit.platform".equals( req.getArtifact().getGroupId() ) && "junit-platform-launcher".equals( req.getArtifact().getArtifactId() ) @@ -676,16 +675,14 @@ public class AbstractSurefireMojoTest } else if ( req.getArtifact().equals( testClasspathJUnit5 ) ) { - return createTestClasspathCommonsResolutionResult( testClasspathSomeTestArtifact, - testClasspathJUnit5, testClasspathApiguardian, testClasspathCommons, - testClasspathOpentest4j ); + return createResolutionResult( testClasspathJUnit5, testClasspathApiguardian, + testClasspathCommons, testClasspathOpentest4j ); } else if ( "org.junit.platform".equals( req.getArtifact().getGroupId() ) && "junit-platform-launcher".equals( req.getArtifact().getArtifactId() ) && "1.4.0".equals( req.getArtifact().getVersion() ) ) { - return createJUnitPlatformLauncherResolutionResult( testClasspathJUnit5, - testClasspathApiguardian, testClasspathCommons, testClasspathOpentest4j ); + return createExpectedJUnitPlatformLauncherResolutionResult(); } else { @@ -788,37 +785,20 @@ public class AbstractSurefireMojoTest } else if ( resolvable.equals( testClasspathJupiterApi ) ) { - return createTestClasspathCommonsResolutionResult( null, - testClasspathJupiterApi, testClasspathApiguardian, testClasspathCommons, - testClasspathOpentest4j ); + return createResolutionResult( testClasspathJupiterApi, testClasspathApiguardian, + testClasspathCommons, testClasspathOpentest4j ); } else if ( "org.junit.platform".equals( resolvable.getGroupId() ) && "junit-platform-launcher".equals( resolvable.getArtifactId() ) && "1.4.0".equals( resolvable.getVersion() ) ) { - - Artifact jupiterApi = new DefaultArtifact( "org.junit.platform", "junit-platform-engine", - createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); - - Artifact apiguardian = new DefaultArtifact( "org.apiguardian", "apiguardian-api", - createFromVersion( "1.0.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); - - Artifact commons = new DefaultArtifact( "org.junit.platform", "junit-platform-commons", - createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); - - final Artifact opentest4j = new DefaultArtifact( "org.opentest4j", "opentest4j", - createFromVersion( "1.1.1" ), null, "jar", null, mock( ArtifactHandler.class ) ); - - return createJUnitPlatformLauncherResolutionResult( - jupiterApi, apiguardian, commons, opentest4j ); + return createExpectedJUnitPlatformLauncherResolutionResult(); } else if ( "org.junit.jupiter".equals( resolvable.getGroupId() ) && "junit-jupiter-engine".equals( resolvable.getArtifactId() ) && "5.4.0".equals( resolvable.getVersion() ) ) { - Artifact jupiterApi = new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-api", - createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); - return createJupiterEngineResolutionResult( jupiterApi ); + return createJupiterEngineResolutionResult(); } else { @@ -857,6 +837,131 @@ public class AbstractSurefireMojoTest entry( "org.opentest4j:opentest4j", testClasspathOpentest4j ) ); } + @Test + public void shouldSmartlyResolveJUnit5ProviderWithJupiterEngine() throws Exception + { + final VersionRange surefireVersion = createFromVersion( "1" ); + + Artifact junitPlatformArtifact = new DefaultArtifact( "org.apache.maven.surefire", + "surefire-junit-platform", surefireVersion, null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathSomeTestArtifact = new DefaultArtifact( "third.party", "artifact", + createFromVersion( "1.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathJupiterEngine = new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-engine", + createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathPlatformEngine = new DefaultArtifact( "org.junit.platform", "junit-platform-engine", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathJupiterApi = new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-api", + createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathApiguardian = new DefaultArtifact( "org.apiguardian", "apiguardian-api", + createFromVersion( "1.0.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathCommons = new DefaultArtifact( "org.junit.platform", "junit-platform-commons", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + final Artifact testClasspathOpentest4j = new DefaultArtifact( "org.opentest4j", "opentest4j", + createFromVersion( "1.1.1" ), null, "jar", null, mock( ArtifactHandler.class ) ); + + Iterable<Artifact> testArtifacts = asList( testClasspathSomeTestArtifact, testClasspathJupiterEngine, + testClasspathPlatformEngine, testClasspathJupiterApi, testClasspathApiguardian, testClasspathCommons, + testClasspathOpentest4j ); + + File classesDirectory = new File( "target/classes" ); + + File testClassesDirectory = new File( "target/test-classes" ); + + TestClassPath testClasspathWrapper = + new TestClassPath( testArtifacts, classesDirectory, testClassesDirectory, null ); + + Artifact forkedBooter = new DefaultArtifact( "org.apache.maven.surefire", + "surefire-booter", surefireVersion, null, "jar", null, mock( ArtifactHandler.class ) ); + + mojo.setPluginArtifactMap( singletonMap( "org.apache.maven.surefire:surefire-booter", forkedBooter ) ); + mojo.setRemoteRepositories( Collections.<ArtifactRepository>emptyList() ); + mojo.setProjectRemoteRepositories( Collections.<ArtifactRepository>emptyList() ); + RepositorySystem repositorySystem = mock( RepositorySystem.class ); + final Artifact surefireProvider = new DefaultArtifact( "org.apache.maven.surefire", + "surefire-junit-platform", surefireVersion, null, "jar", null, mock( ArtifactHandler.class ) ); + when( repositorySystem.createDependencyArtifact( any( Dependency.class ) ) ).thenAnswer( new Answer<Artifact>() + { + @Override + public Artifact answer( InvocationOnMock invocation ) + { + Dependency provider = (Dependency) invocation.getArguments()[0]; + assertThat( provider.getGroupId() ).isEqualTo( "org.apache.maven.surefire" ); + assertThat( provider.getArtifactId() ).isEqualTo( "surefire-junit-platform" ); + return surefireProvider; + } + } ); + + when( repositorySystem.resolve( any( ArtifactResolutionRequest.class ) ) ) + .thenAnswer( new Answer<ArtifactResolutionResult>() + { + @Override + public ArtifactResolutionResult answer( InvocationOnMock invocation ) + { + ArtifactResolutionRequest req = (ArtifactResolutionRequest) invocation.getArguments()[0]; + Artifact resolvable = req.getArtifact(); + if ( resolvable == surefireProvider ) + { + return createSurefireProviderResolutionResult( surefireVersion ); + } + else if ( resolvable.equals( testClasspathJupiterApi ) ) + { + return createResolutionResult( testClasspathJupiterApi, testClasspathApiguardian, + testClasspathCommons, testClasspathOpentest4j ); + } + else if ( "org.junit.platform".equals( resolvable.getGroupId() ) + && "junit-platform-launcher".equals( resolvable.getArtifactId() ) + && "1.4.0".equals( resolvable.getVersion() ) ) + { + return createExpectedJUnitPlatformLauncherResolutionResult(); + } + else if ( "org.junit.jupiter".equals( resolvable.getGroupId() ) + && "junit-jupiter-engine".equals( resolvable.getArtifactId() ) + && "5.4.0".equals( resolvable.getVersion() ) ) + { + return createJupiterEngineResolutionResult(); + } + else + { + fail(); + return null; + } + } + } ); + + mojo.setRepositorySystem( repositorySystem ); + mojo.setLogger( mock( Logger.class ) ); + + invokeMethod( mojo, "setupStuff" ); + JUnitPlatformProviderInfo prov = + mojo.createJUnitPlatformProviderInfo( junitPlatformArtifact, testClasspathWrapper ); + Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath(); + + Artifact java5 = new DefaultArtifact( "org.apache.maven.surefire", "common-java5", + surefireVersion, null, "jar", null, mock( ArtifactHandler.class ) ); + Artifact launcher = new DefaultArtifact( "org.junit.platform", "junit-platform-launcher", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ); + assertThat( resolvedProviderArtifacts ) + .hasSize( 3 ) + .containsOnly( surefireProvider, java5, launcher ); + + assertThat( testClasspathWrapper.getTestDependencies() ) + .hasSize( 7 ) + .includes( entry( "third.party:artifact", testClasspathSomeTestArtifact ), + entry( "org.junit.jupiter:junit-jupiter-engine", testClasspathJupiterEngine ), + entry( "org.junit.platform:junit-platform-engine", testClasspathPlatformEngine ), + entry( "org.junit.jupiter:junit-jupiter-api", testClasspathJupiterApi ), + entry( "org.apiguardian:apiguardian-api", testClasspathApiguardian ), + entry( "org.junit.platform:junit-platform-commons", testClasspathCommons ), + entry( "org.opentest4j:opentest4j", testClasspathOpentest4j ) ); + } + private static ArtifactResolutionResult createJUnitPlatformLauncherResolutionResult( Artifact junit5Engine, Artifact apiguardian, Artifact commons, Artifact opentest4j ) { @@ -875,13 +980,16 @@ public class AbstractSurefireMojoTest return launcherResolutionResult; } - private static ArtifactResolutionResult createJupiterEngineResolutionResult( Artifact jupiterApi ) + private static ArtifactResolutionResult createJupiterEngineResolutionResult() { ArtifactResolutionResult launcherResolutionResult = mock( ArtifactResolutionResult.class ); Set<Artifact> resolvedLauncherArtifacts = new HashSet<>(); resolvedLauncherArtifacts.add( new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-engine", - jupiterApi.getVersionRange(), null, "jar", null, mock( ArtifactHandler.class ) ) ); - resolvedLauncherArtifacts.add( jupiterApi ); + createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ) ); + resolvedLauncherArtifacts.add( new DefaultArtifact( "org.junit.jupiter", "junit-jupiter-api", + createFromVersion( "5.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ) ); + resolvedLauncherArtifacts.add( new DefaultArtifact( "org.junit.platform", "junit-platform-engine", + createFromVersion( "1.4.0" ), null, "jar", null, mock( ArtifactHandler.class ) ) ); resolvedLauncherArtifacts.add( new DefaultArtifact( "org.apiguardian", "apiguardian-api", createFromVersion( "1.0.0" ), null, "jar", null, mock( ArtifactHandler.class ) ) ); resolvedLauncherArtifacts.add( new DefaultArtifact( "org.opentest4j", "opentest4j", @@ -906,18 +1014,11 @@ public class AbstractSurefireMojoTest return createJUnitPlatformLauncherResolutionResult( engine, apiguardian, commons, opentest4j ); } - private static ArtifactResolutionResult createTestClasspathCommonsResolutionResult( - Artifact testClasspathSomeTestArtifact, Artifact testClasspathJUnit5, Artifact testClasspathApiguardian, - Artifact testClasspathCommons, Artifact testClasspathOpentest4j ) + private static ArtifactResolutionResult createResolutionResult( Artifact... artifacts ) { ArtifactResolutionResult testClasspathCommonsResolutionResult = mock( ArtifactResolutionResult.class ); Set<Artifact> resolvedCommonsArtifacts = new HashSet<>(); - resolvedCommonsArtifacts.add( testClasspathSomeTestArtifact ); - resolvedCommonsArtifacts.add( testClasspathApiguardian ); - resolvedCommonsArtifacts.add( testClasspathCommons ); - resolvedCommonsArtifacts.add( testClasspathJUnit5 ); - resolvedCommonsArtifacts.add( testClasspathOpentest4j ); - resolvedCommonsArtifacts.remove( null ); + Collections.addAll( resolvedCommonsArtifacts, artifacts ); when( testClasspathCommonsResolutionResult.getArtifacts() ) .thenReturn( resolvedCommonsArtifacts ); return testClasspathCommonsResolutionResult;