1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.util.graph.manager;
20
21 import java.util.Arrays;
22 import java.util.Collections;
23
24 import org.eclipse.aether.RepositorySystemSession;
25 import org.eclipse.aether.SystemScopeHandler;
26 import org.eclipse.aether.artifact.Artifact;
27 import org.eclipse.aether.artifact.DefaultArtifact;
28 import org.eclipse.aether.collection.DependencyCollectionContext;
29 import org.eclipse.aether.collection.DependencyManagement;
30 import org.eclipse.aether.collection.DependencyManager;
31 import org.eclipse.aether.graph.Dependency;
32 import org.eclipse.aether.graph.Exclusion;
33 import org.eclipse.aether.internal.test.util.TestUtils;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.junit.jupiter.api.Test;
36
37 import static org.junit.jupiter.api.Assertions.*;
38
39
40
41
42 public class DependencyManagerTest {
43
44 private static final SystemScopeHandler SYSTEM_SCOPE_HANDLER = SystemScopeHandler.LEGACY;
45
46 private final Artifact A1 = new DefaultArtifact("test", "a", "", "1");
47
48 private final Artifact A2 = new DefaultArtifact("test", "a", "", "2");
49
50 private final Artifact B = new DefaultArtifact("test", "b", "", "");
51
52 private final Artifact B1 = new DefaultArtifact("test", "b", "", "1");
53
54 private final Artifact B2 = new DefaultArtifact("test", "b", "", "2");
55
56 private final Artifact C1 = new DefaultArtifact("test", "c", "", "1");
57
58 private final Artifact D1 = new DefaultArtifact("test", "d", "", "1");
59
60 private final Artifact E1 = new DefaultArtifact("test", "e", "", "1");
61
62 private final Artifact E2 = new DefaultArtifact("test", "e", "", "2");
63
64 private final Exclusion EXCLUSION = new Exclusion("test", "excluded", null, null);
65
66 private RepositorySystemSession session;
67
68 private DependencyCollectionContext newContext(Dependency... managedDependencies) {
69 return TestUtils.newCollectionContext(session, null, Arrays.asList(managedDependencies));
70 }
71
72 @BeforeEach
73 void setUp() {
74 session = TestUtils.newSession();
75 }
76
77 @Test
78 void testClassic() {
79 DependencyManager manager = new ClassicDependencyManager(SYSTEM_SCOPE_HANDLER);
80 DependencyManagement mngt;
81
82
83 manager = manager.deriveChildManager(newContext(
84 new Dependency(A2, null, null),
85 new Dependency(B, null, true),
86 new Dependency(C1, "newscope", null),
87 new Dependency(D1, null, null, Collections.singleton(EXCLUSION))));
88 mngt = manager.manageDependency(new Dependency(A1, null));
89 assertNull(mngt);
90 mngt = manager.manageDependency(new Dependency(B1, null));
91 assertNull(mngt);
92 mngt = manager.manageDependency(new Dependency(C1, null));
93 assertNull(mngt);
94 mngt = manager.manageDependency(new Dependency(D1, null));
95 assertNotNull(mngt);
96 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
97 mngt = manager.manageDependency(new Dependency(E1, null));
98 assertNull(mngt);
99
100
101 manager = manager.deriveChildManager(newContext(new Dependency(B2, null, null)));
102 mngt = manager.manageDependency(new Dependency(A1, null));
103 assertNotNull(mngt);
104 assertEquals(mngt.getVersion(), A2.getVersion());
105 mngt = manager.manageDependency(new Dependency(B1, null));
106 assertNotNull(mngt);
107 assertEquals(Boolean.TRUE, mngt.getOptional());
108 assertNull(mngt.getVersion());
109 mngt = manager.manageDependency(new Dependency(C1, null));
110 assertNotNull(mngt);
111 assertEquals(mngt.getScope(), "newscope");
112 mngt = manager.manageDependency(new Dependency(D1, null));
113 assertNotNull(mngt);
114 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
115 mngt = manager.manageDependency(new Dependency(E1, null));
116 assertNull(mngt);
117
118
119 manager = manager.deriveChildManager(newContext(new Dependency(E2, null, null)));
120 mngt = manager.manageDependency(new Dependency(A1, null));
121 assertNotNull(mngt);
122 assertEquals(mngt.getVersion(), A2.getVersion());
123 mngt = manager.manageDependency(new Dependency(B1, null));
124 assertNotNull(mngt);
125 assertEquals(Boolean.TRUE, mngt.getOptional());
126 mngt = manager.manageDependency(new Dependency(C1, null));
127 assertNotNull(mngt);
128 assertEquals(mngt.getScope(), "newscope");
129 mngt = manager.manageDependency(new Dependency(D1, null));
130 assertNotNull(mngt);
131 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
132 mngt = manager.manageDependency(new Dependency(E1, null));
133 assertNull(mngt);
134 }
135
136 @Test
137 void testClassicTransitive() {
138 DependencyManager manager = new ClassicDependencyManager(true, SYSTEM_SCOPE_HANDLER);
139 DependencyManagement mngt;
140
141
142 manager = manager.deriveChildManager(newContext(
143 new Dependency(A2, null, null),
144 new Dependency(B, null, true),
145 new Dependency(C1, "newscope", null),
146 new Dependency(D1, null, null, Collections.singleton(EXCLUSION))));
147 mngt = manager.manageDependency(new Dependency(A1, null));
148 assertNull(mngt);
149 mngt = manager.manageDependency(new Dependency(B1, null));
150 assertNull(mngt);
151 mngt = manager.manageDependency(new Dependency(C1, null));
152 assertNull(mngt);
153 mngt = manager.manageDependency(new Dependency(D1, null));
154 assertNotNull(mngt);
155 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
156 mngt = manager.manageDependency(new Dependency(E1, null));
157 assertNull(mngt);
158
159
160 manager = manager.deriveChildManager(newContext(new Dependency(B2, null, null)));
161 mngt = manager.manageDependency(new Dependency(A1, null));
162 assertNotNull(mngt);
163 assertEquals(mngt.getVersion(), A2.getVersion());
164 mngt = manager.manageDependency(new Dependency(B1, null));
165 assertNotNull(mngt);
166 assertEquals(Boolean.TRUE, mngt.getOptional());
167 assertNull(mngt.getVersion());
168 mngt = manager.manageDependency(new Dependency(C1, null));
169 assertNotNull(mngt);
170 assertEquals(mngt.getScope(), "newscope");
171 mngt = manager.manageDependency(new Dependency(D1, null));
172 assertNotNull(mngt);
173 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
174 mngt = manager.manageDependency(new Dependency(E1, null));
175 assertNull(mngt);
176
177
178 manager = manager.deriveChildManager(newContext(new Dependency(E2, null, null)));
179 mngt = manager.manageDependency(new Dependency(A1, null));
180 assertNotNull(mngt);
181 assertEquals(mngt.getVersion(), A2.getVersion());
182 mngt = manager.manageDependency(new Dependency(B1, null));
183 assertNotNull(mngt);
184 assertEquals(Boolean.TRUE, mngt.getOptional());
185 mngt = manager.manageDependency(new Dependency(C1, null));
186 assertNotNull(mngt);
187 assertEquals(mngt.getScope(), "newscope");
188 mngt = manager.manageDependency(new Dependency(D1, null));
189 assertNotNull(mngt);
190 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
191 mngt = manager.manageDependency(new Dependency(E1, null));
192 assertNotNull(mngt);
193 assertEquals(mngt.getVersion(), E2.getVersion());
194 }
195
196 @Test
197 void testTransitive() {
198 DependencyManager manager = new TransitiveDependencyManager(SYSTEM_SCOPE_HANDLER);
199 DependencyManagement mngt;
200
201
202 manager = manager.deriveChildManager(newContext(
203 new Dependency(A2, null, null),
204 new Dependency(B, null, true),
205 new Dependency(C1, "newscope", null),
206 new Dependency(D1, null, null, Collections.singleton(EXCLUSION))));
207 mngt = manager.manageDependency(new Dependency(A1, null));
208 assertNull(mngt);
209 mngt = manager.manageDependency(new Dependency(B1, null));
210 assertNull(mngt);
211 mngt = manager.manageDependency(new Dependency(C1, null));
212 assertNull(mngt);
213 mngt = manager.manageDependency(new Dependency(D1, null));
214 assertNotNull(mngt);
215 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
216 mngt = manager.manageDependency(new Dependency(E1, null));
217 assertNull(mngt);
218
219
220 manager = manager.deriveChildManager(newContext(new Dependency(B2, null, null)));
221 mngt = manager.manageDependency(new Dependency(A1, null));
222 assertNotNull(mngt);
223 assertEquals(mngt.getVersion(), A2.getVersion());
224 mngt = manager.manageDependency(new Dependency(B1, null));
225 assertNotNull(mngt);
226 assertEquals(Boolean.TRUE, mngt.getOptional());
227 assertEquals(B2.getVersion(), mngt.getVersion());
228 mngt = manager.manageDependency(new Dependency(C1, null));
229 assertNotNull(mngt);
230 assertEquals(mngt.getScope(), "newscope");
231 mngt = manager.manageDependency(new Dependency(D1, null));
232 assertNotNull(mngt);
233 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
234 mngt = manager.manageDependency(new Dependency(E1, null));
235 assertNull(mngt);
236
237
238 manager = manager.deriveChildManager(newContext(new Dependency(E2, null, null)));
239 mngt = manager.manageDependency(new Dependency(A1, null));
240 assertNotNull(mngt);
241 assertEquals(mngt.getVersion(), A2.getVersion());
242 mngt = manager.manageDependency(new Dependency(B1, null));
243 assertNotNull(mngt);
244 assertEquals(Boolean.TRUE, mngt.getOptional());
245 mngt = manager.manageDependency(new Dependency(C1, null));
246 assertNotNull(mngt);
247 assertEquals(mngt.getScope(), "newscope");
248 mngt = manager.manageDependency(new Dependency(D1, null));
249 assertNotNull(mngt);
250 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
251 mngt = manager.manageDependency(new Dependency(E1, null));
252 assertNotNull(mngt);
253 assertEquals(mngt.getVersion(), E2.getVersion());
254 }
255
256 @Test
257 void testDefault() {
258 DependencyManager manager = new DefaultDependencyManager(SYSTEM_SCOPE_HANDLER);
259 DependencyManagement mngt;
260
261
262 manager = manager.deriveChildManager(newContext(
263 new Dependency(A2, null, null),
264 new Dependency(B, null, true),
265 new Dependency(C1, "newscope", null),
266 new Dependency(D1, null, null, Collections.singleton(EXCLUSION))));
267 mngt = manager.manageDependency(new Dependency(A1, null));
268 assertNotNull(mngt);
269 assertEquals(mngt.getVersion(), A2.getVersion());
270 mngt = manager.manageDependency(new Dependency(B1, null));
271 assertNotNull(mngt);
272 assertEquals(Boolean.TRUE, mngt.getOptional());
273 assertNull(mngt.getVersion());
274 mngt = manager.manageDependency(new Dependency(C1, null));
275 assertNotNull(mngt);
276 assertEquals(mngt.getScope(), "newscope");
277 mngt = manager.manageDependency(new Dependency(D1, null));
278 assertNotNull(mngt);
279 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
280 mngt = manager.manageDependency(new Dependency(E1, null));
281 assertNull(mngt);
282
283
284 manager = manager.deriveChildManager(newContext(new Dependency(B2, null, null)));
285 mngt = manager.manageDependency(new Dependency(A1, null));
286 assertNotNull(mngt);
287 assertEquals(mngt.getVersion(), A2.getVersion());
288 mngt = manager.manageDependency(new Dependency(B1, null));
289 assertNotNull(mngt);
290 assertEquals(Boolean.TRUE, mngt.getOptional());
291 assertEquals(B2.getVersion(), mngt.getVersion());
292 mngt = manager.manageDependency(new Dependency(C1, null));
293 assertNotNull(mngt);
294 assertEquals(mngt.getScope(), "newscope");
295 mngt = manager.manageDependency(new Dependency(D1, null));
296 assertNotNull(mngt);
297 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
298 mngt = manager.manageDependency(new Dependency(E1, null));
299 assertNull(mngt);
300
301
302 manager = manager.deriveChildManager(newContext(new Dependency(E2, null, null)));
303 mngt = manager.manageDependency(new Dependency(A1, null));
304 assertNotNull(mngt);
305 assertEquals(mngt.getVersion(), A2.getVersion());
306 mngt = manager.manageDependency(new Dependency(B1, null));
307 assertNotNull(mngt);
308 assertEquals(Boolean.TRUE, mngt.getOptional());
309 mngt = manager.manageDependency(new Dependency(C1, null));
310 assertNotNull(mngt);
311 assertEquals(mngt.getScope(), "newscope");
312 mngt = manager.manageDependency(new Dependency(D1, null));
313 assertNotNull(mngt);
314 assertEquals(mngt.getExclusions(), Collections.singleton(EXCLUSION));
315 mngt = manager.manageDependency(new Dependency(E1, null));
316 assertNotNull(mngt);
317 assertEquals(mngt.getVersion(), E2.getVersion());
318 }
319 }