1 package org.eclipse.aether.util.graph.traverser;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static java.util.Objects.requireNonNull;
23 import static org.junit.Assert.*;
24
25 import org.eclipse.aether.RepositorySystemSession;
26 import org.eclipse.aether.artifact.DefaultArtifact;
27 import org.eclipse.aether.collection.DependencyCollectionContext;
28 import org.eclipse.aether.collection.DependencyTraverser;
29 import org.eclipse.aether.graph.Dependency;
30 import org.eclipse.aether.internal.test.util.TestFileUtils;
31 import org.eclipse.aether.internal.test.util.TestUtils;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35
36 import java.util.Collections;
37
38 public class AndDependencyTraverserTest
39 {
40
41 static class DummyDependencyTraverser
42 implements DependencyTraverser
43 {
44
45 private final boolean traverse;
46
47 private final DependencyTraverser child;
48
49 public DummyDependencyTraverser()
50 {
51 this( true );
52 }
53
54 public DummyDependencyTraverser( boolean traverse )
55 {
56 this.traverse = traverse;
57 this.child = this;
58 }
59
60 public DummyDependencyTraverser( boolean traverse, DependencyTraverser child )
61 {
62 this.traverse = traverse;
63 this.child = child;
64 }
65
66 public boolean traverseDependency( Dependency dependency )
67 {
68 requireNonNull( dependency, "dependency cannot be null" );
69 return traverse;
70 }
71
72 public DependencyTraverser deriveChildTraverser( DependencyCollectionContext context )
73 {
74 requireNonNull( context, "context cannot be null" );
75 return child;
76 }
77
78 }
79
80 private RepositorySystemSession session;
81 private DependencyCollectionContext context;
82
83 @Before
84 public void setup()
85 {
86 session = TestUtils.newSession();
87 context = TestUtils.newCollectionContext( session, null, Collections.emptyList() );
88 }
89
90 @After
91 public void teardown() throws Exception
92 {
93 if ( session.getLocalRepository() != null )
94 {
95 TestFileUtils.deleteFile( session.getLocalRepository().getBasedir() );
96 }
97 session = null;
98 context = null;
99 }
100
101 @Test
102 public void testNewInstance()
103 {
104 assertNull( AndDependencyTraverser.newInstance( null, null ) );
105 DependencyTraverser traverser = new DummyDependencyTraverser();
106 assertSame( traverser, AndDependencyTraverser.newInstance( traverser, null ) );
107 assertSame( traverser, AndDependencyTraverser.newInstance( null, traverser ) );
108 assertSame( traverser, AndDependencyTraverser.newInstance( traverser, traverser ) );
109 assertNotNull( AndDependencyTraverser.newInstance( traverser, new DummyDependencyTraverser() ) );
110 }
111
112 @Test
113 public void testTraverseDependency()
114 {
115 Dependency dependency = new Dependency( new DefaultArtifact( "g:a:v:1" ), "runtime" );
116
117 DependencyTraverser traverser = new AndDependencyTraverser();
118 assertTrue( traverser.traverseDependency( dependency ) );
119
120 traverser =
121 new AndDependencyTraverser( new DummyDependencyTraverser( false ), new DummyDependencyTraverser( false ) );
122 assertFalse( traverser.traverseDependency( dependency ) );
123
124 traverser =
125 new AndDependencyTraverser( new DummyDependencyTraverser( true ), new DummyDependencyTraverser( false ) );
126 assertFalse( traverser.traverseDependency( dependency ) );
127
128 traverser =
129 new AndDependencyTraverser( new DummyDependencyTraverser( true ), new DummyDependencyTraverser( true ) );
130 assertTrue( traverser.traverseDependency( dependency ) );
131 }
132
133 @Test
134 public void testDeriveChildTraverser_Unchanged()
135 {
136 DependencyTraverser other1 = new DummyDependencyTraverser( true );
137 DependencyTraverser other2 = new DummyDependencyTraverser( false );
138 DependencyTraverser traverser = new AndDependencyTraverser( other1, other2 );
139 assertSame( traverser, traverser.deriveChildTraverser( context ) );
140 }
141
142 @Test
143 public void testDeriveChildTraverser_OneRemaining()
144 {
145 DependencyTraverser other1 = new DummyDependencyTraverser( true );
146 DependencyTraverser other2 = new DummyDependencyTraverser( false, null );
147 DependencyTraverser traverser = new AndDependencyTraverser( other1, other2 );
148 assertSame( other1, traverser.deriveChildTraverser( context ) );
149 }
150
151 @Test
152 public void testDeriveChildTraverser_ZeroRemaining()
153 {
154 DependencyTraverser other1 = new DummyDependencyTraverser( true, null );
155 DependencyTraverser other2 = new DummyDependencyTraverser( false, null );
156 DependencyTraverser traverser = new AndDependencyTraverser( other1, other2 );
157 assertNull( traverser.deriveChildTraverser( context ) );
158 }
159
160 @Test
161 public void testEquals()
162 {
163 DependencyTraverser other1 = new DummyDependencyTraverser( true );
164 DependencyTraverser other2 = new DummyDependencyTraverser( false );
165 DependencyTraverser traverser1 = new AndDependencyTraverser( other1, other2 );
166 DependencyTraverser traverser2 = new AndDependencyTraverser( other2, other1 );
167 DependencyTraverser traverser3 = new AndDependencyTraverser( other1 );
168 assertEquals( traverser1, traverser1 );
169 assertEquals( traverser1, traverser2 );
170 assertNotEquals( traverser1, traverser3 );
171 assertNotEquals( traverser1, this );
172 assertNotEquals( traverser1, null );
173 }
174
175 @Test
176 public void testHashCode()
177 {
178 DependencyTraverser other1 = new DummyDependencyTraverser( true );
179 DependencyTraverser other2 = new DummyDependencyTraverser( false );
180 DependencyTraverser traverser1 = new AndDependencyTraverser( other1, other2 );
181 DependencyTraverser traverser2 = new AndDependencyTraverser( other2, other1 );
182 assertEquals( traverser1.hashCode(), traverser2.hashCode() );
183 }
184
185 }