View Javadoc
1   package org.apache.maven.toolchain;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.assertEquals;
23  import static org.mockito.ArgumentMatchers.anyString;
24  import static org.mockito.Mockito.mock;
25  import static org.mockito.Mockito.never;
26  import static org.mockito.Mockito.verify;
27  import static org.mockito.Mockito.when;
28  
29  import java.util.ArrayList;
30  import java.util.HashMap;
31  import java.util.List;
32  import java.util.Map;
33  
34  import org.apache.maven.execution.DefaultMavenExecutionRequest;
35  import org.apache.maven.execution.MavenExecutionRequest;
36  import org.apache.maven.execution.MavenSession;
37  import org.apache.maven.toolchain.model.ToolchainModel;
38  import org.codehaus.plexus.logging.Logger;
39  import org.junit.Before;
40  import org.junit.Test;
41  import org.mockito.InjectMocks;
42  import org.mockito.Mock;
43  import org.mockito.MockitoAnnotations;
44  
45  public class DefaultToolchainManagerPrivateTest
46  {
47      // Mocks to inject into toolchainManager
48      @Mock
49      private Logger logger;
50  
51      @InjectMocks
52      private DefaultToolchainManagerPrivate toolchainManager;
53  
54      @Mock
55      private ToolchainFactory toolchainFactory_basicType;
56      
57      @Mock
58      private ToolchainFactory toolchainFactory_rareType;
59  
60      @Before
61      public void setUp()
62      {
63          toolchainManager = new DefaultToolchainManagerPrivate();
64  
65          MockitoAnnotations.initMocks( this );
66  
67          toolchainManager.factories = new HashMap<>();
68          toolchainManager.factories.put( "basic", toolchainFactory_basicType );
69          toolchainManager.factories.put( "rare", toolchainFactory_rareType );
70      }
71  
72      @Test
73      public void testToolchainsForAvailableType()
74          throws Exception
75      {
76          // prepare
77          MavenSession session = mock( MavenSession.class );
78          MavenExecutionRequest req = new DefaultMavenExecutionRequest();
79          when( session.getRequest() ).thenReturn( req );
80  
81          ToolchainPrivate basicToolchain = mock( ToolchainPrivate.class );
82          when( toolchainFactory_basicType.createDefaultToolchain() ).thenReturn( basicToolchain );
83          ToolchainPrivate rareToolchain = mock( ToolchainPrivate.class );
84          when( toolchainFactory_rareType.createDefaultToolchain() ).thenReturn( rareToolchain );
85  
86          // execute
87          ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "basic", session );
88  
89          // verify
90          verify( logger, never() ).error( anyString() );
91          assertEquals( 1, toolchains.length );
92      }
93  
94      @Test
95      public void testToolchainsForUnknownType()
96          throws Exception
97      {
98          // prepare
99          MavenSession session = mock( MavenSession.class );
100         MavenExecutionRequest req = new DefaultMavenExecutionRequest();
101         when( session.getRequest() ).thenReturn( req );
102 
103         ToolchainPrivate basicToolchain = mock( ToolchainPrivate.class );
104         when( toolchainFactory_basicType.createDefaultToolchain() ).thenReturn( basicToolchain );
105         ToolchainPrivate rareToolchain = mock( ToolchainPrivate.class );
106         when( toolchainFactory_rareType.createDefaultToolchain() ).thenReturn( rareToolchain );
107 
108         // execute
109         ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "unknown", session );
110 
111         // verify
112         verify( logger ).error( "Missing toolchain factory for type: unknown. Possibly caused by misconfigured project." );
113         assertEquals( 0, toolchains.length );
114     }
115     
116     @Test
117     public void testToolchainsForConfiguredType()
118         throws Exception
119     {
120         // prepare
121         MavenSession session = mock( MavenSession.class );
122         MavenExecutionRequest req = new DefaultMavenExecutionRequest();
123         when( session.getRequest() ).thenReturn( req );
124         Map<String, List<ToolchainModel>> groupedToolchains = new HashMap<>();
125         req.setToolchains( groupedToolchains );
126 
127         List<ToolchainModel> basicToolchains = new ArrayList<>();
128         ToolchainModel basicToolchainModel = new ToolchainModel();
129         basicToolchainModel.setType( "basic" );
130         basicToolchains.add( basicToolchainModel );
131         basicToolchains.add( basicToolchainModel );
132         groupedToolchains.put( "basic", basicToolchains );
133 
134         List<ToolchainModel> rareToolchains = new ArrayList<>();
135         ToolchainModel rareToolchainModel = new ToolchainModel();
136         rareToolchainModel.setType( "rare" );
137         rareToolchains.add( rareToolchainModel );
138         groupedToolchains.put( "rare", rareToolchains );
139 
140         // execute
141         ToolchainPrivate[] toolchains = toolchainManager.getToolchainsForType( "basic", session );
142 
143         // verify
144         verify( logger, never() ).error( anyString() );
145         assertEquals( 2, toolchains.length );
146     }
147 
148     @Test
149     public void testMisconfiguredToolchain()
150         throws Exception
151     {
152         // prepare
153         MavenSession session = mock( MavenSession.class );
154         MavenExecutionRequest req = new DefaultMavenExecutionRequest();
155         when( session.getRequest() ).thenReturn( req );
156 
157         // execute
158         ToolchainPrivate[] basics = toolchainManager.getToolchainsForType("basic", session);
159 
160         // verify
161         assertEquals( 0, basics.length );
162     }
163 }