1 package org.apache.maven.toolchain;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.assertEquals;
23 import static org.mockito.Matchers.isA;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
27
28 import java.util.Arrays;
29 import java.util.Collections;
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.ArgumentMatchers;
42 import org.mockito.InjectMocks;
43 import org.mockito.Mock;
44 import org.mockito.MockitoAnnotations;
45
46 public class DefaultToolchainManagerTest
47 {
48
49 @Mock
50 private Logger logger;
51
52 @InjectMocks
53 private DefaultToolchainManager toolchainManager;
54
55 @Mock
56 private ToolchainFactory toolchainFactory_basicType;
57
58 @Mock
59 private ToolchainFactory toolchainFactory_rareType;
60
61 @Before
62 public void onSetup() throws Exception
63 {
64 toolchainManager = new DefaultToolchainManager();
65
66 MockitoAnnotations.initMocks( this );
67
68 toolchainManager.factories = new HashMap<>();
69 toolchainManager.factories.put( "basic", toolchainFactory_basicType );
70 toolchainManager.factories.put( "rare", toolchainFactory_rareType );
71 }
72
73 @Test
74 public void testNoModels()
75 {
76 MavenSession session = mock( MavenSession.class );
77 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
78 when( session.getRequest() ).thenReturn( executionRequest );
79
80 List<Toolchain> toolchains = toolchainManager.getToolchains( session, "unknown", null );
81
82 assertEquals( 0, toolchains.size() );
83 }
84
85 @Test
86 public void testModelNoFactory()
87 {
88 MavenSession session = mock( MavenSession.class );
89 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
90 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
91 toolchainModels.put( "unknown", Collections.singletonList( new ToolchainModel() ) );
92 executionRequest.setToolchains( toolchainModels );
93 when( session.getRequest() ).thenReturn( executionRequest );
94
95 List<Toolchain> toolchains = toolchainManager.getToolchains( session, "unknown", null );
96
97 assertEquals( 0, toolchains.size() );
98 verify( logger ).error( "Missing toolchain factory for type: unknown. Possibly caused by misconfigured project." );
99 }
100
101 @Test
102 public void testModelAndFactory()
103 {
104 MavenSession session = mock( MavenSession.class );
105 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
106 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
107 toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
108 toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
109 executionRequest.setToolchains( toolchainModels );
110 when( session.getRequest() ).thenReturn( executionRequest );
111
112 List<Toolchain> toolchains = toolchainManager.getToolchains( session, "rare", null );
113
114 assertEquals( 1, toolchains.size() );
115 }
116
117 @Test
118 public void testModelsAndFactory()
119 {
120 MavenSession session = mock( MavenSession.class );
121 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
122 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
123 toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
124 toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
125 executionRequest.setToolchains( toolchainModels );
126 when( session.getRequest() ).thenReturn( executionRequest );
127
128 List<Toolchain> toolchains = toolchainManager.getToolchains( session, "basic", null );
129
130 assertEquals( 2, toolchains.size() );
131 }
132
133 @Test
134 public void testRequirements()
135 throws Exception
136 {
137 MavenSession session = mock( MavenSession.class );
138 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
139 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
140 toolchainModels.put( "basic", Arrays.asList( new ToolchainModel(), new ToolchainModel() ) );
141 toolchainModels.put( "rare", Collections.singletonList( new ToolchainModel() ) );
142 executionRequest.setToolchains( toolchainModels );
143 when( session.getRequest() ).thenReturn( executionRequest );
144 ToolchainPrivate basicPrivate = mock( ToolchainPrivate.class );
145 when( basicPrivate.matchesRequirements( ArgumentMatchers.<String, String>anyMap() ) ).thenReturn( false ).thenReturn( true );
146 when( toolchainFactory_basicType.createToolchain( isA( ToolchainModel.class ) ) ).thenReturn( basicPrivate );
147
148 List<Toolchain> toolchains =
149 toolchainManager.getToolchains( session, "basic", Collections.singletonMap( "key", "value" ) );
150
151 assertEquals( 1, toolchains.size() );
152 }
153 }