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 org.junit.Assert.*; 023 024import org.eclipse.aether.artifact.DefaultArtifact; 025import org.eclipse.aether.collection.DependencyCollectionContext; 026import org.eclipse.aether.collection.DependencyTraverser; 027import org.eclipse.aether.graph.Dependency; 028import org.junit.Test; 029 030public class AndDependencyTraverserTest 031{ 032 033 static class DummyDependencyTraverser 034 implements DependencyTraverser 035 { 036 037 private final boolean traverse; 038 039 private final DependencyTraverser child; 040 041 public DummyDependencyTraverser() 042 { 043 this( true ); 044 } 045 046 public DummyDependencyTraverser( boolean traverse ) 047 { 048 this.traverse = traverse; 049 this.child = this; 050 } 051 052 public DummyDependencyTraverser( boolean traverse, DependencyTraverser child ) 053 { 054 this.traverse = traverse; 055 this.child = child; 056 } 057 058 public boolean traverseDependency( Dependency dependency ) 059 { 060 return traverse; 061 } 062 063 public DependencyTraverser deriveChildTraverser( DependencyCollectionContext context ) 064 { 065 return child; 066 } 067 068 } 069 070 @Test 071 public void testNewInstance() 072 { 073 assertNull( AndDependencyTraverser.newInstance( null, null ) ); 074 DependencyTraverser traverser = new DummyDependencyTraverser(); 075 assertSame( traverser, AndDependencyTraverser.newInstance( traverser, null ) ); 076 assertSame( traverser, AndDependencyTraverser.newInstance( null, traverser ) ); 077 assertSame( traverser, AndDependencyTraverser.newInstance( traverser, traverser ) ); 078 assertNotNull( AndDependencyTraverser.newInstance( traverser, new DummyDependencyTraverser() ) ); 079 } 080 081 @Test 082 public void testTraverseDependency() 083 { 084 Dependency dependency = new Dependency( new DefaultArtifact( "g:a:v:1" ), "runtime" ); 085 086 DependencyTraverser traverser = new AndDependencyTraverser(); 087 assertTrue( traverser.traverseDependency( dependency ) ); 088 089 traverser = 090 new AndDependencyTraverser( new DummyDependencyTraverser( false ), new DummyDependencyTraverser( false ) ); 091 assertFalse( traverser.traverseDependency( dependency ) ); 092 093 traverser = 094 new AndDependencyTraverser( new DummyDependencyTraverser( true ), new DummyDependencyTraverser( false ) ); 095 assertFalse( traverser.traverseDependency( dependency ) ); 096 097 traverser = 098 new AndDependencyTraverser( new DummyDependencyTraverser( true ), new DummyDependencyTraverser( true ) ); 099 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}