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.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33 import org.mockito.ArgumentMatchers;
34 import org.mockito.InjectMocks;
35 import org.mockito.Mock;
36 import org.mockito.MockitoAnnotations;
37 import org.slf4j.Logger;
38
39 import static org.junit.jupiter.api.Assertions.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 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 @BeforeEach
60 void onSetup() throws Exception {
61 MockitoAnnotations.initMocks(this);
62
63 Map<String, ToolchainFactory> factories = new HashMap<>();
64 factories.put("basic", toolchainFactory_basicType);
65 factories.put("rare", toolchainFactory_rareType);
66 toolchainManager = new DefaultToolchainManager(factories, logger);
67 }
68
69 @Test
70 void testNoModels() {
71 MavenSession session = mock(MavenSession.class);
72 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
73 when(session.getRequest()).thenReturn(executionRequest);
74
75 List<Toolchain> toolchains = toolchainManager.getToolchains(session, "unknown", null);
76
77 assertEquals(0, toolchains.size());
78 }
79
80 @Test
81 void testModelNoFactory() {
82 MavenSession session = mock(MavenSession.class);
83 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
84 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
85 toolchainModels.put("unknown", Collections.singletonList(new ToolchainModel()));
86 executionRequest.setToolchains(toolchainModels);
87 when(session.getRequest()).thenReturn(executionRequest);
88
89 List<Toolchain> toolchains = toolchainManager.getToolchains(session, "unknown", null);
90
91 assertEquals(0, toolchains.size());
92 verify(logger).error("Missing toolchain factory for type: unknown. Possibly caused by misconfigured project.");
93 }
94
95 @Test
96 void testModelAndFactory() {
97 MavenSession session = mock(MavenSession.class);
98 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
99 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
100 toolchainModels.put("basic", Arrays.asList(new ToolchainModel(), new ToolchainModel()));
101 toolchainModels.put("rare", Collections.singletonList(new ToolchainModel()));
102 executionRequest.setToolchains(toolchainModels);
103 when(session.getRequest()).thenReturn(executionRequest);
104
105 List<Toolchain> toolchains = toolchainManager.getToolchains(session, "rare", null);
106
107 assertEquals(1, toolchains.size());
108 }
109
110 @Test
111 void testModelsAndFactory() {
112 MavenSession session = mock(MavenSession.class);
113 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
114 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
115 toolchainModels.put("basic", Arrays.asList(new ToolchainModel(), new ToolchainModel()));
116 toolchainModels.put("rare", Collections.singletonList(new ToolchainModel()));
117 executionRequest.setToolchains(toolchainModels);
118 when(session.getRequest()).thenReturn(executionRequest);
119
120 List<Toolchain> toolchains = toolchainManager.getToolchains(session, "basic", null);
121
122 assertEquals(2, toolchains.size());
123 }
124
125 @Test
126 void testRequirements() throws Exception {
127 MavenSession session = mock(MavenSession.class);
128 MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
129 Map<String, List<ToolchainModel>> toolchainModels = new HashMap<>();
130 toolchainModels.put("basic", Arrays.asList(new ToolchainModel(), new ToolchainModel()));
131 toolchainModels.put("rare", Collections.singletonList(new ToolchainModel()));
132 executionRequest.setToolchains(toolchainModels);
133 when(session.getRequest()).thenReturn(executionRequest);
134 ToolchainPrivate basicPrivate = mock(ToolchainPrivate.class);
135 when(basicPrivate.matchesRequirements(ArgumentMatchers.<String, String>anyMap()))
136 .thenReturn(false)
137 .thenReturn(true);
138 when(toolchainFactory_basicType.createToolchain(isA(ToolchainModel.class)))
139 .thenReturn(basicPrivate);
140
141 List<Toolchain> toolchains =
142 toolchainManager.getToolchains(session, "basic", Collections.singletonMap("key", "value"));
143
144 assertEquals(1, toolchains.size());
145 }
146 }