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 2020/04/21 23:24:29 UTC

[maven-surefire] 10/10: tests for Maven 33x

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

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

commit 2fd2b330948e1d51e80d4830cbb00727ea3144ac
Author: tibordigana <ti...@apache.org>
AuthorDate: Tue Apr 21 23:23:45 2020 +0200

    tests for Maven 33x
---
 .../plugin/surefire/AbstractSurefireMojo.java      | 39 ++++++++------
 .../AbstractSurefireMojoToolchainsTest.java        | 61 +++++++++++++++++++---
 2 files changed, 79 insertions(+), 21 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 ea7b114..112de82 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
@@ -948,6 +948,29 @@ public abstract class AbstractSurefireMojo
         return consoleLogger;
     }
 
+    private static <T extends ToolchainManager> Toolchain getToolchainMaven33x( Class<T> toolchainManagerType,
+                                                                                T toolchainManager,
+                                                                                MavenSession session,
+                                                                                Map<String, String> toolchainArgs )
+        throws MojoFailureException
+    {
+        Method getToolchainsMethod =
+            tryGetMethod( toolchainManagerType, "getToolchains", MavenSession.class, String.class, Map.class );
+        if ( getToolchainsMethod != null )
+        {
+            //noinspection unchecked
+            List<Toolchain> tcs = (List<Toolchain>) invokeMethodWithArray( toolchainManager,
+                getToolchainsMethod, session, "jdk", toolchainArgs );
+            if ( tcs.isEmpty() )
+            {
+                throw new MojoFailureException(
+                    "Requested toolchain specification did not match any configured toolchain: " + toolchainArgs );
+            }
+            return tcs.get( 0 );
+        }
+        return null;
+    }
+
     //TODO remove the part with ToolchainManager lookup once we depend on
     //3.0.9 (have it as prerequisite). Define as regular component field then.
     private Toolchain getToolchain() throws MojoFailureException
@@ -956,21 +979,7 @@ public abstract class AbstractSurefireMojo
 
         if ( getJdkToolchain() != null )
         {
-            Method getToolchainsMethod = tryGetMethod( ToolchainManager.class, "getToolchains",
-                MavenSession.class, String.class, Map.class );
-            if ( getToolchainsMethod != null )
-            {
-                //noinspection unchecked
-                List<Toolchain> tcs = (List<Toolchain>) invokeMethodWithArray( getToolchainManager(),
-                    getToolchainsMethod, getSession(), "jdk", getJdkToolchain() );
-                if ( tcs.isEmpty() )
-                {
-                    throw new MojoFailureException(
-                        "Requested toolchain specification did not match any configured toolchain: "
-                            + getJdkToolchain() );
-                }
-                tc = tcs.get( 0 );
-            }
+            tc = getToolchainMaven33x( ToolchainManager.class, getToolchainManager(), getSession(), getJdkToolchain() );
         }
 
         if ( tc == null )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java
index e68d82c..42474e0 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java
@@ -25,28 +25,39 @@ import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.surefire.util.ReflectionUtils;
+import org.apache.maven.toolchain.Toolchain;
 import org.apache.maven.toolchain.ToolchainManager;
 import org.codehaus.plexus.languages.java.jpms.ResolvePathsRequest;
 import org.codehaus.plexus.logging.Logger;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.lang.reflect.Method;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import static java.util.Collections.emptyMap;
+import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
 import static org.apache.maven.artifact.versioning.VersionRange.createFromVersion;
-import static org.mockito.Mockito.*;
+import static org.fest.assertions.Assertions.assertThat;
+import static org.fest.assertions.Fail.fail;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import static org.powermock.api.mockito.PowerMockito.mock;
 import static org.powermock.api.mockito.PowerMockito.mockStatic;
 import static org.powermock.api.mockito.PowerMockito.verifyStatic;
+import static org.powermock.reflect.Whitebox.invokeMethod;
 
 /**
  * Test for {@link AbstractSurefireMojo}.
@@ -56,11 +67,10 @@ import static org.powermock.api.mockito.PowerMockito.verifyStatic;
 @PowerMockIgnore({"org.jacoco.agent.rt.*", "com.vladium.emma.rt.*"})
 public class AbstractSurefireMojoToolchainsTest
 {
-
     private final AbstractSurefireMojo mojo = new AbstractSurefireMojoTest.Mojo();
 
     @Before
-    public void setupMojo() throws Exception
+    public void setupMojo()
     {
         MavenSession session = mock( MavenSession.class );
         mojo.setSession( session );
@@ -80,7 +90,6 @@ public class AbstractSurefireMojoToolchainsTest
 
     @Test
     public void shouldHandleMaven30ToolchainManager() throws Exception
-
     {
         mockStatic( ReflectionUtils.class );
         //TODO: mock this to return a method
@@ -94,7 +103,7 @@ public class AbstractSurefireMojoToolchainsTest
         Method method = AbstractSurefireMojo.class.getDeclaredMethod( "setupStuff", null );
         method.setAccessible( true );
 
-        Map<String, String> toolchainSpec = new HashMap<String, String>();
+        Map<String, String> toolchainSpec = new HashMap<>();
         toolchainSpec.put( "version", "1.8" );
         mojo.setJdkToolchain( toolchainSpec );
 
@@ -104,4 +113,44 @@ public class AbstractSurefireMojoToolchainsTest
         verify( toolchainManager, times( 1 )).getToolchainFromBuildContext( null, null );
         verify( mojo, times( 2 ) ).getToolchainManager();
     }
+
+    @Test( expected = MojoFailureException.class )
+    public void shouldThrowMaven33xToolchain() throws Exception
+    {
+        invokeMethod( AbstractSurefireMojo.class, "getToolchainMaven33x",
+            MockToolchainManager.class, new MockToolchainManager( null ), mock( MavenSession.class ), emptyMap() );
+    }
+
+    @Test
+    public void shouldGetMaven33xToolchain() throws Exception
+    {
+        Toolchain expected = mock( Toolchain.class );
+        Toolchain actual = invokeMethod( AbstractSurefireMojo.class, "getToolchainMaven33x",
+            MockToolchainManager.class, new MockToolchainManager( expected ), mock( MavenSession.class ), emptyMap() );
+
+        assertThat( actual )
+            .isSameAs( expected );
+    }
+
+    public static final class MockToolchainManager implements ToolchainManager
+    {
+        private final Toolchain toolchain;
+
+        public MockToolchainManager( Toolchain toolchain )
+        {
+            this.toolchain = toolchain;
+        }
+
+        public List<Toolchain> getToolchains( MavenSession session, String type, Map<String,String> requirements )
+        {
+            return toolchain == null ? Collections.<Toolchain>emptyList() : singletonList( toolchain );
+        }
+
+        @Override
+        public Toolchain getToolchainFromBuildContext( String type, MavenSession context )
+        {
+            fail();
+            return null;
+        }
+    }
 }