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