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