001package org.eclipse.aether.util.graph.traverser; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import static java.util.Objects.requireNonNull; 023import static org.junit.Assert.*; 024 025import org.eclipse.aether.RepositorySystemSession; 026import org.eclipse.aether.artifact.DefaultArtifact; 027import org.eclipse.aether.collection.DependencyCollectionContext; 028import org.eclipse.aether.collection.DependencyTraverser; 029import org.eclipse.aether.graph.Dependency; 030import org.eclipse.aether.internal.test.util.TestFileUtils; 031import org.eclipse.aether.internal.test.util.TestUtils; 032import org.junit.After; 033import org.junit.Before; 034import org.junit.Test; 035 036import java.util.Collections; 037 038public class AndDependencyTraverserTest 039{ 040 041 static class DummyDependencyTraverser 042 implements DependencyTraverser 043 { 044 045 private final boolean traverse; 046 047 private final DependencyTraverser child; 048 049 public DummyDependencyTraverser() 050 { 051 this( true ); 052 } 053 054 public DummyDependencyTraverser( boolean traverse ) 055 { 056 this.traverse = traverse; 057 this.child = this; 058 } 059 060 public DummyDependencyTraverser( boolean traverse, DependencyTraverser child ) 061 { 062 this.traverse = traverse; 063 this.child = child; 064 } 065 066 public boolean traverseDependency( Dependency dependency ) 067 { 068 requireNonNull( dependency, "dependency cannot be null" ); 069 return traverse; 070 } 071 072 public DependencyTraverser deriveChildTraverser( DependencyCollectionContext context ) 073 { 074 requireNonNull( context, "context cannot be null" ); 075 return child; 076 } 077 078 } 079 080 private RepositorySystemSession session; 081 private DependencyCollectionContext context; 082 083 @Before 084 public void setup() 085 { 086 session = TestUtils.newSession(); 087 context = TestUtils.newCollectionContext( session, null, Collections.emptyList() ); 088 } 089 090 @After 091 public void teardown() throws Exception 092 { 093 if ( session.getLocalRepository() != null ) 094 { 095 TestFileUtils.deleteFile( session.getLocalRepository().getBasedir() ); 096 } 097 session = null; 098 context = null; 099 } 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}