Repository: maven Updated Branches: refs/heads/master 05686a826 -> 2d0ec9426
[MNG-5716] Add unittests for DefaultToolchainManagerPrivate Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/2d0ec942 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/2d0ec942 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/2d0ec942 Branch: refs/heads/master Commit: 2d0ec9426980683066b430a1899e48338de51b33 Parents: 05686a8 Author: Robert Scholte <[email protected]> Authored: Sat Jan 10 22:58:24 2015 +0100 Committer: Robert Scholte <[email protected]> Committed: Sat Jan 10 22:58:24 2015 +0100 ---------------------------------------------------------------------- maven-core/pom.xml | 6 + .../DefaultToolchainManagerPrivate.java | 14 +- .../DefaultToolchainsBuildingResult.java | 7 + .../DefaultToolchainManagerPrivateTest.java | 156 +++++++++++++++++++ 4 files changed, 175 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/2d0ec942/maven-core/pom.xml ---------------------------------------------------------------------- diff --git a/maven-core/pom.xml b/maven-core/pom.xml index 67eb790..951cd06 100644 --- a/maven-core/pom.xml +++ b/maven-core/pom.xml @@ -115,6 +115,12 @@ <artifactId>commons-jxpath</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>1.9.5</version> + <scope>test</scope> + </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/maven/blob/2d0ec942/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java index 923db00..e2eacea 100644 --- a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java +++ b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java @@ -74,7 +74,7 @@ public class DefaultToolchainManagerPrivate throw new MisconfiguredToolchainException( e.getMessage(), e ); } - PersistedToolchains pers = buildResult.getEffectiveToolchains(); + PersistedToolchains effectiveToolchains = buildResult.getEffectiveToolchains(); List<ToolchainPrivate> toRet = new ArrayList<ToolchainPrivate>(); @@ -84,9 +84,9 @@ public class DefaultToolchainManagerPrivate logger.error( "Missing toolchain factory for type: " + type + ". Possibly caused by misconfigured project." ); } - else if ( pers != null ) + else { - List<ToolchainModel> lst = pers.getToolchains(); + List<ToolchainModel> lst = effectiveToolchains.getToolchains(); if ( lst != null ) { for ( ToolchainModel toolchainModel : lst ) @@ -97,11 +97,9 @@ public class DefaultToolchainManagerPrivate } } } - } - - for ( ToolchainFactory toolchainFactory : factories.values() ) - { - ToolchainPrivate tool = toolchainFactory.createDefaultToolchain(); + + // add default toolchain + ToolchainPrivate tool = fact.createDefaultToolchain(); if ( tool != null ) { toRet.add( tool ); http://git-wip-us.apache.org/repos/asf/maven/blob/2d0ec942/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java ---------------------------------------------------------------------- diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java b/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java index b50473f..b72e5aa 100644 --- a/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java +++ b/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java @@ -26,6 +26,7 @@ import org.apache.maven.building.Problem; import org.apache.maven.toolchain.model.PersistedToolchains; /** + * Holds the result of the merged toolchains and holds the problems during this build, if any. * * @author Robert Scholte * @since 3.2.6 @@ -38,6 +39,12 @@ public class DefaultToolchainsBuildingResult private List<Problem> problems; + /** + * Default constructor + * + * @param effectiveToolchains the merged toolchains, may not be {@code null} + * @param problems the problems while building the effectiveToolchains, if any. + */ public DefaultToolchainsBuildingResult( PersistedToolchains effectiveToolchains, List<Problem> problems ) { this.effectiveToolchains = effectiveToolchains; http://git-wip-us.apache.org/repos/asf/maven/blob/2d0ec942/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java ---------------------------------------------------------------------- diff --git a/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java b/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java new file mode 100644 index 0000000..15bcc07 --- /dev/null +++ b/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java @@ -0,0 +1,156 @@ +package org.apache.maven.toolchain; + +/* + * 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 static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.HashMap; + +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.toolchain.building.DefaultToolchainsBuildingResult; +import org.apache.maven.toolchain.building.ToolchainsBuildingRequest; +import org.apache.maven.toolchain.building.ToolchainsBuildingResult; +import org.apache.maven.toolchain.model.PersistedToolchains; +import org.apache.maven.toolchain.model.ToolchainModel; +import org.codehaus.plexus.logging.Logger; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class DefaultToolchainManagerPrivateTest +{ + // Mocks to inject into toolchainManager + @Mock + private org.apache.maven.toolchain.building.ToolchainsBuilder toolchainsBuilder; + + @Mock + private Logger logger; + + @InjectMocks + private DefaultToolchainManagerPrivate toolchainManager; + + @Mock + private ToolchainFactory toolchainFactory_basicType; + + @Mock + private ToolchainFactory toolchainFactory_rareType; + + @Before + public void setUp() + { + toolchainManager = new DefaultToolchainManagerPrivate(); + + MockitoAnnotations.initMocks( this ); + + toolchainManager.factories = new HashMap<String, ToolchainFactory>(); + + ToolchainPrivate basicToolchain = mock( ToolchainPrivate.class ); + when( toolchainFactory_basicType.createDefaultToolchain() ).thenReturn( basicToolchain ); + toolchainManager.factories.put( "basic", toolchainFactory_basicType ); + + ToolchainPrivate rareToolchain = mock( ToolchainPrivate.class ); + when( toolchainFactory_rareType.createDefaultToolchain() ).thenReturn( rareToolchain ); + toolchainManager.factories.put( "rare", toolchainFactory_rareType ); + } + + @Test + public void testToolchainsForAvailableType() + throws Exception + { + // prepare + MavenSession session = mock( MavenSession.class ); + MavenExecutionRequest req = new DefaultMavenExecutionRequest(); + when( session.getRequest() ).thenReturn( req ); + + ToolchainsBuildingResult toolchainsResult = new DefaultToolchainsBuildingResult( new PersistedToolchains(), null ); + when( toolchainsBuilder.build( isA( ToolchainsBuildingRequest.class ) ) ).thenReturn( toolchainsResult ); + ToolchainPrivate basicToolchain = mock( ToolchainPrivate.class ); + when( toolchainFactory_basicType.createDefaultToolchain() ).thenReturn( basicToolchain ); + + // execute + ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "basic", session ); + + // verify + verify( logger, never() ).error( anyString() ); + assertEquals( 1, toolchains.length ); + } + + @Test + public void testToolchainsForUnknownType() + throws Exception + { + // prepare + MavenSession session = mock( MavenSession.class ); + MavenExecutionRequest req = new DefaultMavenExecutionRequest(); + when( session.getRequest() ).thenReturn( req ); + + ToolchainsBuildingResult toolchainsResult = new DefaultToolchainsBuildingResult( new PersistedToolchains(), null ); + when( toolchainsBuilder.build( isA( ToolchainsBuildingRequest.class ) ) ).thenReturn( toolchainsResult ); + + // execute + ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "unknown", session ); + + // verify + verify( logger ).error( "Missing toolchain factory for type: unknown. Possibly caused by misconfigured project." ); + assertEquals( 0, toolchains.length ); + } + + @Test + public void testToolchainsForConfiguredType() + throws Exception + { + // prepare + MavenSession session = mock( MavenSession.class ); + MavenExecutionRequest req = new DefaultMavenExecutionRequest(); + when( session.getRequest() ).thenReturn( req ); + + PersistedToolchains effectiveToolchains = new PersistedToolchains(); + ToolchainModel basicToolchainModel = new ToolchainModel(); + basicToolchainModel.setType( "basic" ); + effectiveToolchains.addToolchain( basicToolchainModel ); + effectiveToolchains.addToolchain( basicToolchainModel ); + + ToolchainModel rareToolchainModel = new ToolchainModel(); + rareToolchainModel.setType( "rare" ); + effectiveToolchains.addToolchain( rareToolchainModel ); + + ToolchainsBuildingResult toolchainsResult = new DefaultToolchainsBuildingResult( effectiveToolchains, null ); + when( toolchainsBuilder.build( isA( ToolchainsBuildingRequest.class ) ) ).thenReturn( toolchainsResult ); + + // execute + ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "basic", session ); + + // verify + verify( logger, never() ).error( anyString() ); + // there's always a default in case the requirement doesn't match(?) + assertEquals( 3, toolchains.length ); + } + +}
