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 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 }