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