View Javadoc
1   package org.eclipse.aether.util.graph.traverser;
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 static org.junit.Assert.*;
23  
24  import org.eclipse.aether.artifact.DefaultArtifact;
25  import org.eclipse.aether.collection.DependencyCollectionContext;
26  import org.eclipse.aether.collection.DependencyTraverser;
27  import org.eclipse.aether.graph.Dependency;
28  import org.junit.Test;
29  
30  public class AndDependencyTraverserTest
31  {
32  
33      static class DummyDependencyTraverser
34          implements DependencyTraverser
35      {
36  
37          private final boolean traverse;
38  
39          private final DependencyTraverser child;
40  
41          public DummyDependencyTraverser()
42          {
43              this( true );
44          }
45  
46          public DummyDependencyTraverser( boolean traverse )
47          {
48              this.traverse = traverse;
49              this.child = this;
50          }
51  
52          public DummyDependencyTraverser( boolean traverse, DependencyTraverser child )
53          {
54              this.traverse = traverse;
55              this.child = child;
56          }
57  
58          public boolean traverseDependency( Dependency dependency )
59          {
60              return traverse;
61          }
62  
63          public DependencyTraverser deriveChildTraverser( DependencyCollectionContext context )
64          {
65              return child;
66          }
67  
68      }
69  
70      @Test
71      public void testNewInstance()
72      {
73          assertNull( AndDependencyTraverser.newInstance( null, null ) );
74          DependencyTraverser traverser = new DummyDependencyTraverser();
75          assertSame( traverser, AndDependencyTraverser.newInstance( traverser, null ) );
76          assertSame( traverser, AndDependencyTraverser.newInstance( null, traverser ) );
77          assertSame( traverser, AndDependencyTraverser.newInstance( traverser, traverser ) );
78          assertNotNull( AndDependencyTraverser.newInstance( traverser, new DummyDependencyTraverser() ) );
79      }
80  
81      @Test
82      public void testTraverseDependency()
83      {
84          Dependency dependency = new Dependency( new DefaultArtifact( "g:a:v:1" ), "runtime" );
85  
86          DependencyTraverser traverser = new AndDependencyTraverser();
87          assertTrue( traverser.traverseDependency( dependency ) );
88  
89          traverser =
90              new AndDependencyTraverser( new DummyDependencyTraverser( false ), new DummyDependencyTraverser( false ) );
91          assertFalse( traverser.traverseDependency( dependency ) );
92  
93          traverser =
94              new AndDependencyTraverser( new DummyDependencyTraverser( true ), new DummyDependencyTraverser( false ) );
95          assertFalse( traverser.traverseDependency( dependency ) );
96  
97          traverser =
98              new AndDependencyTraverser( new DummyDependencyTraverser( true ), new DummyDependencyTraverser( true ) );
99          assertTrue( traverser.traverseDependency( dependency ) );
100     }
101 
102     @Test
103     public void testDeriveChildTraverser_Unchanged()
104     {
105         DependencyTraverser other1 = new DummyDependencyTraverser( true );
106         DependencyTraverser other2 = new DummyDependencyTraverser( false );
107         DependencyTraverser traverser = new AndDependencyTraverser( other1, other2 );
108         assertSame( traverser, traverser.deriveChildTraverser( null ) );
109     }
110 
111     @Test
112     public void testDeriveChildTraverser_OneRemaining()
113     {
114         DependencyTraverser other1 = new DummyDependencyTraverser( true );
115         DependencyTraverser other2 = new DummyDependencyTraverser( false, null );
116         DependencyTraverser traverser = new AndDependencyTraverser( other1, other2 );
117         assertSame( other1, traverser.deriveChildTraverser( null ) );
118     }
119 
120     @Test
121     public void testDeriveChildTraverser_ZeroRemaining()
122     {
123         DependencyTraverser other1 = new DummyDependencyTraverser( true, null );
124         DependencyTraverser other2 = new DummyDependencyTraverser( false, null );
125         DependencyTraverser traverser = new AndDependencyTraverser( other1, other2 );
126         assertNull( traverser.deriveChildTraverser( null ) );
127     }
128 
129     @Test
130     public void testEquals()
131     {
132         DependencyTraverser other1 = new DummyDependencyTraverser( true );
133         DependencyTraverser other2 = new DummyDependencyTraverser( false );
134         DependencyTraverser traverser1 = new AndDependencyTraverser( other1, other2 );
135         DependencyTraverser traverser2 = new AndDependencyTraverser( other2, other1 );
136         DependencyTraverser traverser3 = new AndDependencyTraverser( other1 );
137         assertEquals( traverser1, traverser1 );
138         assertEquals( traverser1, traverser2 );
139         assertNotEquals( traverser1, traverser3 );
140         assertNotEquals( traverser1, this );
141         assertNotEquals( traverser1, null );
142     }
143 
144     @Test
145     public void testHashCode()
146     {
147         DependencyTraverser other1 = new DummyDependencyTraverser( true );
148         DependencyTraverser other2 = new DummyDependencyTraverser( false );
149         DependencyTraverser traverser1 = new AndDependencyTraverser( other1, other2 );
150         DependencyTraverser traverser2 = new AndDependencyTraverser( other2, other1 );
151         assertEquals( traverser1.hashCode(), traverser2.hashCode() );
152     }
153 
154 }