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;

Reply via email to