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