1 package org.apache.maven.shared.dependency.tree;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.artifact.DefaultArtifact;
24 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
25 import org.apache.maven.artifact.versioning.VersionRange;
26 import org.apache.maven.plugin.testing.SilentLog;
27
28
29
30
31
32
33
34
35
36 public class DependencyTreeResolutionListenerTest
37 extends AbstractDependencyNodeTest
38 {
39
40
41 private DependencyTreeResolutionListener listener;
42
43
44
45
46
47
48 protected void setUp() throws Exception
49 {
50 super.setUp();
51
52 listener = new DependencyTreeResolutionListener( new SilentLog() );
53 }
54
55
56
57 public void testSimpleDependencyTree()
58 {
59 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
60 listener.includeArtifact( projectArtifact );
61
62 listener.startProcessChildren( projectArtifact );
63
64 Artifact depArtifact01 = createArtifact( "test-dep", "dependency-one", "1.0" );
65 listener.includeArtifact( depArtifact01 );
66
67 Artifact depArtifact02 = createArtifact( "test-dep", "dependency-two", "1.0" );
68 listener.includeArtifact( depArtifact02 );
69
70 Artifact depArtifact03 = createArtifact( "test-dep", "dependency-three", "1.0" );
71 listener.includeArtifact( depArtifact03 );
72
73 listener.endProcessChildren( projectArtifact );
74
75 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
76 projectArtifactNode.addChild( new DependencyNode( depArtifact01 ) );
77 projectArtifactNode.addChild( new DependencyNode( depArtifact02 ) );
78 projectArtifactNode.addChild( new DependencyNode( depArtifact03 ) );
79
80 assertEquals( projectArtifactNode, listener.getRootNode() );
81 }
82
83 public void testSimpleDepTreeWithTransitiveDeps()
84 {
85 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
86 listener.includeArtifact( projectArtifact );
87
88 listener.startProcessChildren( projectArtifact );
89
90 Artifact depArtifact1 = createArtifact( "test-dep", "dependency-one", "1.0" );
91 listener.includeArtifact( depArtifact1 );
92
93 listener.startProcessChildren( depArtifact1 );
94
95 Artifact depArtifact01 = createArtifact( "test-dep", "dependency-zero-one", "1.0" );
96 listener.includeArtifact( depArtifact01 );
97
98 Artifact depArtifact02 = createArtifact( "test-dep", "dependency-zero-two", "1.0" );
99 listener.includeArtifact( depArtifact02 );
100
101 listener.endProcessChildren( depArtifact1 );
102
103 Artifact depArtifact2 = createArtifact( "test-dep", "dependency-two", "1.0" );
104 listener.includeArtifact( depArtifact2 );
105
106 Artifact depArtifact3 = createArtifact( "test-dep", "dependency-three", "1.0" );
107 listener.includeArtifact( depArtifact3 );
108
109 listener.endProcessChildren( projectArtifact );
110
111 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
112 DependencyNode depArtifact1Node = new DependencyNode( depArtifact1 );
113 projectArtifactNode.addChild( depArtifact1Node );
114 depArtifact1Node.addChild( new DependencyNode( depArtifact01 ) );
115 depArtifact1Node.addChild( new DependencyNode( depArtifact02 ) );
116 projectArtifactNode.addChild( new DependencyNode( depArtifact2 ) );
117 projectArtifactNode.addChild( new DependencyNode( depArtifact3 ) );
118
119 assertEquals( projectArtifactNode, listener.getRootNode() );
120 }
121
122 public void testComplexDependencyTree()
123 {
124 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
125 listener.includeArtifact( projectArtifact );
126
127 listener.startProcessChildren( projectArtifact );
128
129 Artifact depArtifact1 = createArtifact( "test-dep", "dependency-one", "jar", "1.0", Artifact.SCOPE_COMPILE );
130 listener.includeArtifact( depArtifact1 );
131
132 listener.startProcessChildren( depArtifact1 );
133
134 Artifact depArtifact11 = createArtifact( "test-dep", "dependency-zero-one", "1.0" );
135 listener.includeArtifact( depArtifact11 );
136
137 Artifact depArtifact12 = createArtifact( "test-dep", "dependency-zero-two", "1.0" );
138 listener.includeArtifact( depArtifact12 );
139
140 listener.startProcessChildren( depArtifact12 );
141
142 Artifact depArtifact121 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" );
143 listener.includeArtifact( depArtifact121 );
144
145 listener.endProcessChildren( depArtifact12 );
146
147 listener.endProcessChildren( depArtifact1 );
148
149 Artifact depArtifact2 = createArtifact( "test-dep", "dependency-two", "jar", "1.0", Artifact.SCOPE_TEST );
150 listener.includeArtifact( depArtifact2 );
151
152 listener.startProcessChildren( depArtifact2 );
153
154 Artifact depArtifact21 = createArtifact( "test-dep", "dep-zero-two-1", "1.0" );
155 listener.omitForNearer( depArtifact121, depArtifact21 );
156 listener.includeArtifact( depArtifact21 );
157
158 listener.endProcessChildren( depArtifact2 );
159
160 Artifact depArtifact3 = createArtifact( "test-dep", "dependency-three", "jar", "1.0", Artifact.SCOPE_COMPILE );
161 listener.includeArtifact( depArtifact3 );
162
163 listener.endProcessChildren( projectArtifact );
164
165 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
166 DependencyNode depArtifact1Node = new DependencyNode( depArtifact1 );
167 projectArtifactNode.addChild( depArtifact1Node );
168 depArtifact1Node.addChild( new DependencyNode( depArtifact11 ) );
169 DependencyNode depArtifact12Node = new DependencyNode( depArtifact12 );
170 depArtifact1Node.addChild( depArtifact12Node );
171 depArtifact12Node.addChild( new DependencyNode( depArtifact121, DependencyNode.OMITTED_FOR_DUPLICATE,
172 depArtifact21 ) );
173 DependencyNode depArtifact2Node = new DependencyNode( depArtifact2 );
174 projectArtifactNode.addChild( depArtifact2Node );
175 depArtifact2Node.addChild( new DependencyNode( depArtifact21 ) );
176 projectArtifactNode.addChild( new DependencyNode( depArtifact3 ) );
177
178 assertEquals( projectArtifactNode, listener.getRootNode() );
179 }
180
181 public void testIncludeArtifactDuplicate()
182 {
183 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
184 listener.includeArtifact( projectArtifact );
185
186 listener.startProcessChildren( projectArtifact );
187
188 Artifact depArtifact1 = createArtifact( "test-dep", "dependency", "1.0" );
189 listener.includeArtifact( depArtifact1 );
190
191 Artifact depArtifact2 = createArtifact( "test-dep", "dependency", "1.0" );
192 listener.omitForNearer( depArtifact1, depArtifact2 );
193 listener.includeArtifact( depArtifact2 );
194
195 listener.endProcessChildren( projectArtifact );
196
197 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
198 projectArtifactNode.addChild( new DependencyNode( depArtifact1, DependencyNode.OMITTED_FOR_DUPLICATE, depArtifact2 ) );
199 projectArtifactNode.addChild( new DependencyNode( depArtifact2 ) );
200
201 assertEquals( projectArtifactNode, listener.getRootNode() );
202 }
203
204 public void testIncludeArtifactDuplicateWithChildren()
205 {
206 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
207 listener.includeArtifact( projectArtifact );
208
209 listener.startProcessChildren( projectArtifact );
210
211 Artifact depArtifact1 = createArtifact( "test-dep", "dependency", "1.0" );
212 listener.includeArtifact( depArtifact1 );
213
214 listener.startProcessChildren( depArtifact1 );
215
216 Artifact depArtifact11 = createArtifact( "test-dep", "child", "1.0" );
217 listener.includeArtifact( depArtifact11 );
218
219 listener.endProcessChildren( depArtifact1 );
220
221 Artifact depArtifact2 = createArtifact( "test-dep", "dependency", "1.0" );
222 listener.omitForNearer( depArtifact1, depArtifact2 );
223 listener.includeArtifact( depArtifact2 );
224
225 listener.startProcessChildren( depArtifact2 );
226
227 Artifact depArtifact21 = createArtifact( "test-dep", "child", "1.0" );
228 listener.includeArtifact( depArtifact21 );
229
230 listener.endProcessChildren( depArtifact2 );
231
232 listener.endProcessChildren( projectArtifact );
233
234 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
235 DependencyNode depArtifact1Node = new DependencyNode( depArtifact1, DependencyNode.OMITTED_FOR_DUPLICATE, depArtifact2 );
236 projectArtifactNode.addChild( depArtifact1Node );
237 DependencyNode depArtifact2Node = new DependencyNode( depArtifact2 );
238 projectArtifactNode.addChild( depArtifact2Node );
239 depArtifact2Node.addChild( new DependencyNode( depArtifact21 ) );
240
241 assertEquals( projectArtifactNode, listener.getRootNode() );
242 }
243
244 public void testOmitForConflictKept()
245 {
246 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
247 listener.includeArtifact( projectArtifact );
248
249 listener.startProcessChildren( projectArtifact );
250
251 Artifact depArtifact1 = createArtifact( "test-dep", "dependency", "1.0" );
252 listener.includeArtifact( depArtifact1 );
253
254 Artifact depArtifact2 = createArtifact( "test-dep", "dependency", "2.0" );
255 listener.omitForNearer( depArtifact1, depArtifact2 );
256 listener.includeArtifact( depArtifact2 );
257
258 listener.endProcessChildren( projectArtifact );
259
260 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
261 projectArtifactNode.addChild( new DependencyNode( depArtifact1, DependencyNode.OMITTED_FOR_CONFLICT,
262 depArtifact2 ) );
263 projectArtifactNode.addChild( new DependencyNode( depArtifact2 ) );
264
265 assertEquals( projectArtifactNode, listener.getRootNode() );
266 }
267
268 public void testOmitForConflictKeptWithChildren()
269 {
270 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
271 listener.includeArtifact( projectArtifact );
272
273 listener.startProcessChildren( projectArtifact );
274
275 Artifact depArtifact1 = createArtifact( "test-dep", "dependency", "1.0" );
276 listener.includeArtifact( depArtifact1 );
277
278 listener.startProcessChildren( depArtifact1 );
279
280 Artifact depArtifact11 = createArtifact( "test-dep", "child", "1.0" );
281 listener.includeArtifact( depArtifact11 );
282
283 listener.endProcessChildren( depArtifact1 );
284
285 Artifact depArtifact2 = createArtifact( "test-dep", "dependency", "2.0" );
286 listener.omitForNearer( depArtifact1, depArtifact2 );
287 listener.includeArtifact( depArtifact2 );
288
289 listener.startProcessChildren( depArtifact2 );
290
291 Artifact depArtifact21 = createArtifact( "test-dep", "child", "2.0" );
292 listener.includeArtifact( depArtifact21 );
293
294 listener.endProcessChildren( depArtifact2 );
295
296 listener.endProcessChildren( projectArtifact );
297
298 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
299 projectArtifactNode.addChild( new DependencyNode( depArtifact1, DependencyNode.OMITTED_FOR_CONFLICT,
300 depArtifact2 ) );
301 DependencyNode depArtifact2Node = new DependencyNode( depArtifact2 );
302 projectArtifactNode.addChild( depArtifact2Node );
303 depArtifact2Node.addChild( new DependencyNode( depArtifact21 ) );
304
305 assertEquals( projectArtifactNode, listener.getRootNode() );
306 }
307
308 public void testOmitForConflictOmitted()
309 {
310 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
311 listener.includeArtifact( projectArtifact );
312
313 listener.startProcessChildren( projectArtifact );
314
315 Artifact depArtifact2 = createArtifact( "test-dep", "dependency", "2.0" );
316 listener.includeArtifact( depArtifact2 );
317
318 Artifact depArtifact1 = createArtifact( "test-dep", "dependency", "1.0" );
319 listener.omitForNearer( depArtifact1, depArtifact2 );
320
321 listener.endProcessChildren( projectArtifact );
322
323 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
324 projectArtifactNode.addChild( new DependencyNode( depArtifact2 ) );
325 projectArtifactNode.addChild( new DependencyNode( depArtifact1, DependencyNode.OMITTED_FOR_CONFLICT,
326 depArtifact2 ) );
327
328 assertEquals( projectArtifactNode, listener.getRootNode() );
329 }
330
331 public void testOmitForConflictOmittedWithChildren()
332 {
333 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
334 listener.includeArtifact( projectArtifact );
335
336 listener.startProcessChildren( projectArtifact );
337
338 Artifact depArtifact2 = createArtifact( "test-dep", "dependency", "2.0" );
339 listener.includeArtifact( depArtifact2 );
340
341 listener.startProcessChildren( depArtifact2 );
342
343 Artifact depArtifact21 = createArtifact( "test-dep", "child", "2.0" );
344 listener.includeArtifact( depArtifact21 );
345
346 listener.endProcessChildren( depArtifact2 );
347
348 Artifact depArtifact1 = createArtifact( "test-dep", "dependency", "1.0" );
349 listener.omitForNearer( depArtifact1, depArtifact2 );
350
351 listener.startProcessChildren( depArtifact1 );
352
353 Artifact depArtifact11 = createArtifact( "test-dep", "child", "1.0" );
354 listener.includeArtifact( depArtifact11 );
355
356 listener.endProcessChildren( depArtifact1 );
357
358 listener.endProcessChildren( projectArtifact );
359
360 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
361 DependencyNode depArtifact2Node = new DependencyNode( depArtifact2 );
362 projectArtifactNode.addChild( depArtifact2Node );
363 depArtifact2Node.addChild( new DependencyNode( depArtifact21 ) );
364 projectArtifactNode.addChild( new DependencyNode( depArtifact1, DependencyNode.OMITTED_FOR_CONFLICT,
365 depArtifact2 ) );
366
367 assertEquals( projectArtifactNode, listener.getRootNode() );
368 }
369
370 public void testOmitForCycle()
371 {
372 Artifact projectArtifact = createArtifact( "test-project", "project-artifact", "1.0" );
373 listener.includeArtifact( projectArtifact );
374
375 listener.startProcessChildren( projectArtifact );
376
377 listener.omitForCycle( projectArtifact );
378
379 listener.endProcessChildren( projectArtifact );
380
381 DependencyNode projectArtifactNode = new DependencyNode( projectArtifact );
382 projectArtifactNode.addChild( new DependencyNode( projectArtifact, DependencyNode.OMITTED_FOR_CYCLE ) );
383
384 assertEquals( projectArtifactNode, listener.getRootNode() );
385 }
386
387 public void testAddNode()
388 {
389 Artifact a1 = createArtifact( "test-project", "project-artifact", "1.0" );
390 listener.addNode( a1 );
391 listener.startProcessChildren( a1 );
392 Artifact a2 = createArtifact( "test-project", "project-artifact", "1.1" );
393 listener.addNode( a2 );
394 assertEquals( 1, listener.getRootNode().getChildren().size() );
395 }
396
397
398
399
400
401
402 protected Artifact createArtifact( String groupId, String artifactId, String type, String version, String scope )
403 {
404
405
406 VersionRange versionRange = VersionRange.createFromVersion( version );
407
408 return new DefaultArtifact( groupId, artifactId, versionRange, scope, "jar", null,
409 new DefaultArtifactHandler(), false );
410 }
411 }