View Javadoc

1   package org.apache.maven.shared.dependency.tree;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * Tests <code>DependencyTreeResolutionListener</code>.
30   * 
31   * @author Edwin Punzalan
32   * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
33   * @version $Id: DependencyTreeResolutionListenerTest.java 1100703 2011-05-08 08:27:33Z hboutemy $
34   * @see DependencyTreeResolutionListener
35   */
36  public class DependencyTreeResolutionListenerTest
37      extends AbstractDependencyNodeTest
38  {
39      // fields -----------------------------------------------------------------
40  
41      private DependencyTreeResolutionListener listener;
42  
43      // TestCase methods -------------------------------------------------------
44  
45      /**
46       * {@inheritDoc}
47       */
48      protected void setUp() throws Exception
49      {
50          super.setUp();
51  
52          listener = new DependencyTreeResolutionListener( new SilentLog() );
53      }
54  
55      // tests ------------------------------------------------------------------
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     // protected methods ------------------------------------------------------
398 
399     /**
400      * {@inheritDoc}
401      */
402     protected Artifact createArtifact( String groupId, String artifactId, String type, String version, String scope )
403     {
404         // TODO: use super.createArtifact when possible
405 
406         VersionRange versionRange = VersionRange.createFromVersion( version );
407 
408         return new DefaultArtifact( groupId, artifactId, versionRange, scope, "jar", null,
409                                     new DefaultArtifactHandler(), false );
410     }
411 }