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 6916415  [SUREFIRE-1585] Align JUnit Platform version at runtime
6916415 is described below

commit 6916415ee428aa18e98c6cf1e3915315e41e04a3
Author: tibordigana <tibordig...@apache.org>
AuthorDate: Thu Feb 28 06:17:49 2019 +0100

    [SUREFIRE-1585] Align JUnit Platform version at runtime
---
 maven-surefire-common/pom.xml                      |  19 --
 .../plugin/surefire/AbstractSurefireMojo.java      |  58 +++---
 .../plugin/surefire/AbstractSurefireMojoTest.java  | 200 +++++++++++++++++++--
 pom.xml                                            |  39 +++-
 4 files changed, 256 insertions(+), 60 deletions(-)

diff --git a/maven-surefire-common/pom.xml b/maven-surefire-common/pom.xml
index e95190b..674b673 100644
--- a/maven-surefire-common/pom.xml
+++ b/maven-surefire-common/pom.xml
@@ -83,25 +83,6 @@
         <dependency>
             <groupId>org.apache.maven.shared</groupId>
             <artifactId>maven-artifact-transfer</artifactId>
-            <version>0.10.1</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.maven</groupId>
-                    <artifactId>maven-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.apache.maven</groupId>
-                    <artifactId>maven-artifact</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.codehaus.plexus</groupId>
-                    <artifactId>plexus-component-annotations</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.codehaus.plexus</groupId>
-                    <artifactId>plexus-utils</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.codehaus.plexus</groupId>
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 7d44afc..ba7f1e0 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
@@ -869,9 +869,22 @@ public abstract class AbstractSurefireMojo
 
     private void setupStuff()
     {
-        createDependencyResolver();
-        surefireBooterArtifact = getSurefireBooterArtifact();
-        toolchain = getToolchain();
+        surefireDependencyResolver = new SurefireDependencyResolver( 
getRepositorySystem(),
+                getConsoleLogger(), getLocalRepository(),
+                getRemoteRepositories(),
+                getProjectRemoteRepositories(),
+                getPluginName(), getDependencyResolver() );
+
+        surefireBooterArtifact = getBooterArtifact();
+        if ( surefireBooterArtifact == null )
+        {
+            throw new RuntimeException( "Unable to locate surefire-booter in 
the list of plugin artifacts" );
+        }
+
+        if ( getToolchainManager() != null )
+        {
+            toolchain = getToolchainManager().getToolchainFromBuildContext( 
"jdk", getSession() );
+        }
     }
 
     @Nonnull
@@ -1021,15 +1034,6 @@ public abstract class AbstractSurefireMojo
         handleSummary( current, firstForkException );
     }
 
-    private void createDependencyResolver()
-    {
-        surefireDependencyResolver = new SurefireDependencyResolver( 
getRepositorySystem(),
-                                                                   
getConsoleLogger(), getLocalRepository(),
-                                                                   
getRemoteRepositories(),
-                                                                   
getProjectRemoteRepositories(),
-                                                                   
getPluginName(), dependencyResolver );
-    }
-
     protected List<ProviderInfo> createProviders( TestClassPath testClasspath )
         throws MojoExecutionException
     {
@@ -1227,16 +1231,14 @@ public abstract class AbstractSurefireMojo
         this.repositorySystem = repositorySystem;
     }
 
-    final Toolchain getToolchain()
+    public DependencyResolver getDependencyResolver()
     {
-        Toolchain tc = null;
-
-        if ( getToolchainManager() != null )
-        {
-            tc = getToolchainManager().getToolchainFromBuildContext( "jdk", 
getSession() );
-        }
+        return dependencyResolver;
+    }
 
-        return tc;
+    public void setDependencyResolver( DependencyResolver dependencyResolver )
+    {
+        this.dependencyResolver = dependencyResolver;
     }
 
     private boolean existsModuleDescriptor()
@@ -2374,16 +2376,6 @@ public abstract class AbstractSurefireMojo
         return new JdkAttributes( jvmToUse, isBuiltInJava9AtLeast() );
     }
 
-    private Artifact getSurefireBooterArtifact()
-    {
-        Artifact artifact = getBooterArtifact();
-        if ( artifact == null )
-        {
-            throw new RuntimeException( "Unable to locate surefire-booter in 
the list of plugin artifacts" );
-        }
-        return artifact;
-    }
-
     /**
      * Where surefire stores its own temp files
      *
@@ -3670,6 +3662,12 @@ public abstract class AbstractSurefireMojo
         this.dependenciesToScan = dependenciesToScan;
     }
 
+    @SuppressWarnings( "UnusedDeclaration" )
+    void setPluginDescriptor( PluginDescriptor pluginDescriptor )
+    {
+        this.pluginDescriptor = pluginDescriptor;
+    }
+
     public PluginDescriptor getPluginDescriptor()
     {
         return pluginDescriptor;
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 78e135f..080f2b5 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
@@ -26,11 +26,18 @@ import 
org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import 
org.apache.maven.plugin.surefire.AbstractSurefireMojo.JUnitPlatformProviderInfo;
 import org.apache.maven.plugin.surefire.log.PluginConsoleLogger;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
+import 
org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
 import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
 import org.apache.maven.surefire.booter.Classpath;
 import org.apache.maven.surefire.booter.StartupConfiguration;
@@ -39,6 +46,7 @@ import org.codehaus.plexus.logging.Logger;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatchers;
 import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -59,16 +67,14 @@ import java.util.Set;
 
 import static java.io.File.separatorChar;
 import static java.util.Arrays.asList;
-import static java.util.Collections.singleton;
-import static java.util.Collections.singletonMap;
+import static java.util.Collections.*;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersion;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.MapAssert.entry;
 import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.verify;
@@ -444,6 +450,21 @@ public class AbstractSurefireMojoTest
                     }
                 } );
 
+        DependencyResolver dependencyResolver = mock( DependencyResolver.class 
);
+        when( dependencyResolver.resolveDependencies( any( 
ProjectBuildingRequest.class ),
+                ArgumentMatchers.<Dependency>anyCollection(), isNull( 
Collection.class ),
+                any( TransformableFilter.class ) ) )
+                .thenAnswer( new Answer<Object>()
+                {
+                    @Override
+                    public Object answer( InvocationOnMock invocation )
+                    {
+                        Collection deps = (Collection) 
invocation.getArguments()[1];
+                        assertThat( deps ).isEmpty();
+                        return emptySet();
+                    }
+                } );
+
         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",
@@ -480,8 +501,23 @@ public class AbstractSurefireMojoTest
 
         mojo.setRepositorySystem( repositorySystem );
         mojo.setLogger( mock( Logger.class ) );
+        mojo.setDependencyResolver( dependencyResolver );
 
         invokeMethod( mojo, "setupStuff" );
+
+        MavenSession session = mock( MavenSession.class );
+        mojo.setSession( session );
+        when( session.getProjectBuildingRequest() )
+                .thenReturn( mock( ProjectBuildingRequest.class ) );
+
+        PluginDescriptor pluginDescriptor = mock( PluginDescriptor.class );
+        mojo.setPluginDescriptor( pluginDescriptor );
+        Plugin p = mock( Plugin.class );
+        when( pluginDescriptor.getPlugin() )
+                .thenReturn( p );
+        when( p.getDependencies() )
+                .thenReturn( Collections.<Dependency>emptyList() );
+
         JUnitPlatformProviderInfo prov =
                 mojo.createJUnitPlatformProviderInfo( junitPlatformArtifact, 
testClasspathWrapper );
 
@@ -747,10 +783,40 @@ public class AbstractSurefireMojoTest
                     }
                 } );
 
+        DependencyResolver dependencyResolver = mock( DependencyResolver.class 
);
+        when( dependencyResolver.resolveDependencies( any( 
ProjectBuildingRequest.class ),
+                ArgumentMatchers.<Dependency>anyCollection(), isNull( 
Collection.class ),
+                any( TransformableFilter.class ) ) )
+                .thenAnswer( new Answer<Object>()
+                {
+                    @Override
+                    public Object answer( InvocationOnMock invocation )
+                    {
+                        Collection deps = (Collection) 
invocation.getArguments()[1];
+                        assertThat( deps ).isEmpty();
+                        return emptySet();
+                    }
+                } );
+
         mojo.setRepositorySystem( repositorySystem );
         mojo.setLogger( mock( Logger.class ) );
+        mojo.setDependencyResolver( dependencyResolver );
 
         invokeMethod( mojo, "setupStuff" );
+
+        MavenSession session = mock( MavenSession.class );
+        mojo.setSession( session );
+        when( session.getProjectBuildingRequest() )
+                .thenReturn( mock( ProjectBuildingRequest.class ) );
+
+        PluginDescriptor pluginDescriptor = mock( PluginDescriptor.class );
+        mojo.setPluginDescriptor( pluginDescriptor );
+        Plugin p = mock( Plugin.class );
+        when( pluginDescriptor.getPlugin() )
+                .thenReturn( p );
+        when( p.getDependencies() )
+                .thenReturn( Collections.<Dependency>emptyList() );
+
         JUnitPlatformProviderInfo prov =
                 mojo.createJUnitPlatformProviderInfo( junitPlatformArtifact, 
testClasspathWrapper );
         Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
@@ -987,10 +1053,40 @@ public class AbstractSurefireMojoTest
                     }
                 } );
 
+        DependencyResolver dependencyResolver = mock( DependencyResolver.class 
);
+        when( dependencyResolver.resolveDependencies( any( 
ProjectBuildingRequest.class ),
+                ArgumentMatchers.<Dependency>anyCollection(), isNull( 
Collection.class ),
+                any( TransformableFilter.class ) ) )
+                .thenAnswer( new Answer<Object>()
+                {
+                    @Override
+                    public Object answer( InvocationOnMock invocation )
+                    {
+                        Collection deps = (Collection) 
invocation.getArguments()[1];
+                        assertThat( deps ).isEmpty();
+                        return emptySet();
+                    }
+                } );
+
         mojo.setRepositorySystem( repositorySystem );
         mojo.setLogger( mock( Logger.class ) );
+        mojo.setDependencyResolver( dependencyResolver );
 
         invokeMethod( mojo, "setupStuff" );
+
+        MavenSession session = mock( MavenSession.class );
+        mojo.setSession( session );
+        when( session.getProjectBuildingRequest() )
+                .thenReturn( mock( ProjectBuildingRequest.class ) );
+
+        PluginDescriptor pluginDescriptor = mock( PluginDescriptor.class );
+        mojo.setPluginDescriptor( pluginDescriptor );
+        Plugin p = mock( Plugin.class );
+        when( pluginDescriptor.getPlugin() )
+                .thenReturn( p );
+        when( p.getDependencies() )
+                .thenReturn( Collections.<Dependency>emptyList() );
+
         JUnitPlatformProviderInfo prov =
                 mojo.createJUnitPlatformProviderInfo( junitPlatformArtifact, 
testClasspathWrapper );
         Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
@@ -1158,22 +1254,22 @@ public class AbstractSurefireMojoTest
         final Artifact forkedBooter = new DefaultArtifact( 
"org.apache.maven.surefire",
                 "surefire-booter", surefireVersion, null, "jar", null, mock( 
ArtifactHandler.class ) );
 
-        Artifact pluginDepJupiterEngine = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-engine",
+        final Artifact pluginDepJupiterEngine = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-engine",
                 createFromVersion( "5.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
 
-        Artifact pluginDepPlatformEngine = new DefaultArtifact( 
"org.junit.platform", "junit-platform-engine",
+        final Artifact pluginDepPlatformEngine = new DefaultArtifact( 
"org.junit.platform", "junit-platform-engine",
                 createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
 
-        Artifact pluginDepJupiterApi = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-api",
+        final Artifact pluginDepJupiterApi = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-api",
                 createFromVersion( "5.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
 
-        Artifact pluginDepApiguardian = new DefaultArtifact( 
"org.apiguardian", "apiguardian-api",
+        final Artifact pluginDepApiguardian = new DefaultArtifact( 
"org.apiguardian", "apiguardian-api",
                 createFromVersion( "1.0.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
 
-        Artifact pluginDepCommons = new DefaultArtifact( "org.junit.platform", 
"junit-platform-commons",
+        final Artifact pluginDepCommons = new DefaultArtifact( 
"org.junit.platform", "junit-platform-commons",
                 createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
 
-        Artifact pluginDepOpentest4j = new DefaultArtifact( "org.opentest4j", 
"opentest4j",
+        final Artifact pluginDepOpentest4j = new DefaultArtifact( 
"org.opentest4j", "opentest4j",
                 createFromVersion( "1.1.1" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
 
         Map<String, Artifact> pluginDependencies = new HashMap<>();
@@ -1275,12 +1371,62 @@ public class AbstractSurefireMojoTest
                     }
                 } );
 
+        DependencyResolver dependencyResolver = mock( DependencyResolver.class 
);
+        when( dependencyResolver.resolveDependencies( any( 
ProjectBuildingRequest.class ),
+                ArgumentMatchers.<Dependency>anyCollection(), isNull( 
Collection.class ),
+                any( TransformableFilter.class ) ) )
+                .thenAnswer( new Answer<Object>()
+                {
+                    @Override
+                    public Object answer( InvocationOnMock invocation )
+                    {
+                        Collection deps = (Collection) 
invocation.getArguments()[1];
+                        assertThat( deps ).hasSize( 1 );
+                        Dependency resolvable = (Dependency) 
deps.iterator().next();
+                        if ( "org.junit.jupiter".equals( 
resolvable.getGroupId() )
+                                && "junit-jupiter-engine".equals( 
resolvable.getArtifactId() )
+                                && "5.4.0".equals( resolvable.getVersion() ) )
+                        {
+                            Set<ArtifactResult> resolvedPluginDeps = new 
HashSet<>();
+                            resolvedPluginDeps.add( toArtifactResult( 
pluginDepJupiterEngine ) );
+                            resolvedPluginDeps.add( toArtifactResult( 
pluginDepPlatformEngine ) );
+                            resolvedPluginDeps.add( toArtifactResult( 
pluginDepJupiterApi ) );
+                            resolvedPluginDeps.add( toArtifactResult( 
pluginDepApiguardian ) );
+                            resolvedPluginDeps.add( toArtifactResult( 
pluginDepCommons ) );
+                            resolvedPluginDeps.add( toArtifactResult( 
pluginDepOpentest4j ) );
+                            return resolvedPluginDeps;
+                        }
+                        else
+                        {
+                            fail();
+                            return null;
+                        }
+                    }
+                } );
+
         mojo.setRepositorySystem( repositorySystem );
         mojo.setLogger( mock( Logger.class ) );
+        mojo.setDependencyResolver( dependencyResolver );
 
         invokeMethod( mojo, "setupStuff" );
+
         JUnitPlatformProviderInfo prov =
                 mojo.createJUnitPlatformProviderInfo( junitPlatformArtifact, 
testClasspathWrapper );
+
+        MavenSession session = mock( MavenSession.class );
+        mojo.setSession( session );
+        when( session.getProjectBuildingRequest() )
+                .thenReturn( mock( ProjectBuildingRequest.class ) );
+
+        PluginDescriptor pluginDescriptor = mock( PluginDescriptor.class );
+        mojo.setPluginDescriptor( pluginDescriptor );
+        Plugin p = mock( Plugin.class );
+        when( pluginDescriptor.getPlugin() )
+                .thenReturn( p );
+        List<Dependency> directPluginDependencies = toDependencies( 
pluginDepJupiterEngine );
+        when( p.getDependencies() )
+                .thenReturn( directPluginDependencies );
+
         Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
 
         Artifact java5 = new DefaultArtifact( "org.apache.maven.surefire", 
"common-java5",
@@ -1813,4 +1959,38 @@ public class AbstractSurefireMojoTest
         when( f.getAbsolutePath() ).thenReturn( absolutePath );
         return f;
     }
+
+    private static Dependency toDependency( Artifact artifact )
+    {
+        Dependency dependency = new Dependency();
+        dependency.setGroupId( artifact.getGroupId() );
+        dependency.setArtifactId( artifact.getArtifactId() );
+        dependency.setVersion( artifact.getBaseVersion() );
+        dependency.setType( "jar" );
+        return dependency;
+    }
+
+    private static List<Dependency> toDependencies( Artifact... artifacts )
+    {
+        List<Dependency> dependencies = new ArrayList<>();
+        for ( Artifact artifact : artifacts )
+        {
+            dependencies.add( toDependency( artifact) );
+        }
+        return dependencies;
+    }
+
+    private static ArtifactResult toArtifactResult( final Artifact artifact )
+    {
+        class AR implements ArtifactResult
+        {
+
+            @Override
+            public Artifact getArtifact()
+            {
+                return artifact;
+            }
+        }
+        return new AR();
+    }
 }
diff --git a/pom.xml b/pom.xml
index 55f4ea5..a95596e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -191,16 +191,53 @@
         <groupId>org.apache.maven</groupId>
         <artifactId>maven-toolchain</artifactId>
         <version>3.0-alpha-2</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-compat</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.apache.maven.shared</groupId>
         <artifactId>maven-common-artifact-filters</artifactId>
-        <version>3.0.1</version>
+        <version>3.1.0</version>
         <exclusions>
           <exclusion>
             <groupId>org.apache.maven.shared</groupId>
             <artifactId>maven-plugin-testing-harness</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.apache.maven.shared</groupId>
+            <artifactId>maven-shared-utils</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven.shared</groupId>
+        <artifactId>maven-artifact-transfer</artifactId>
+        <version>0.10.1</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-artifact</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.codehaus.plexus</groupId>
+            <artifactId>plexus-component-annotations</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.codehaus.plexus</groupId>
+            <artifactId>plexus-utils</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
       <dependency>

Reply via email to