001package org.eclipse.aether.util.graph.selector; 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.DependencySelector; 027import org.eclipse.aether.graph.Dependency; 028import org.junit.Test; 029 030public class AndDependencySelectorTest 031{ 032 033 static class DummyDependencySelector 034 implements DependencySelector 035 { 036 037 private final boolean select; 038 039 private final DependencySelector child; 040 041 public DummyDependencySelector() 042 { 043 this( true ); 044 } 045 046 public DummyDependencySelector( boolean select ) 047 { 048 this.select = select; 049 this.child = this; 050 } 051 052 public DummyDependencySelector( boolean select, DependencySelector child ) 053 { 054 this.select = select; 055 this.child = child; 056 } 057 058 public boolean selectDependency( Dependency dependency ) 059 { 060 return select; 061 } 062 063 public DependencySelector deriveChildSelector( DependencyCollectionContext context ) 064 { 065 return child; 066 } 067 068 @Override 069 public String toString() 070 { 071 return "Dummy(" + select + ')'; 072 } 073 } 074 075 @Test 076 public void testNewInstance() 077 { 078 assertNull( AndDependencySelector.newInstance( null, null ) ); 079 DependencySelector selector = new DummyDependencySelector(); 080 assertSame( selector, AndDependencySelector.newInstance( selector, null ) ); 081 assertSame( selector, AndDependencySelector.newInstance( null, selector ) ); 082 assertSame( selector, AndDependencySelector.newInstance( selector, selector ) ); 083 assertNotNull( AndDependencySelector.newInstance( selector, new DummyDependencySelector() ) ); 084 } 085 086 @Test 087 public void testTraverseDependency() 088 { 089 Dependency dependency = new Dependency( new DefaultArtifact( "g:a:v:1" ), "runtime" ); 090 091 DependencySelector selector = new AndDependencySelector(); 092 assertTrue( selector.selectDependency( dependency ) ); 093 094 selector = 095 new AndDependencySelector( new DummyDependencySelector( false ), new DummyDependencySelector( false ) ); 096 assertFalse( selector.selectDependency( dependency ) ); 097 098 selector = 099 new AndDependencySelector( new DummyDependencySelector( true ), new DummyDependencySelector( false ) ); 100 assertFalse( selector.selectDependency( dependency ) ); 101 102 selector = new AndDependencySelector( new DummyDependencySelector( true ), new DummyDependencySelector( true ) ); 103 assertTrue( selector.selectDependency( dependency ) ); 104 } 105 106 @Test 107 public void testDeriveChildSelector_Unchanged() 108 { 109 DependencySelector other1 = new DummyDependencySelector( true ); 110 DependencySelector other2 = new DummyDependencySelector( false ); 111 DependencySelector selector = new AndDependencySelector( other1, other2 ); 112 assertSame( selector, selector.deriveChildSelector( null ) ); 113 } 114 115 @Test 116 public void testDeriveChildSelector_OneRemaining() 117 { 118 DependencySelector other1 = new DummyDependencySelector( true ); 119 DependencySelector other2 = new DummyDependencySelector( false, null ); 120 DependencySelector selector = new AndDependencySelector( other1, other2 ); 121 assertSame( other1, selector.deriveChildSelector( null ) ); 122 } 123 124 @Test 125 public void testDeriveChildSelector_ZeroRemaining() 126 { 127 DependencySelector other1 = new DummyDependencySelector( true, null ); 128 DependencySelector other2 = new DummyDependencySelector( false, null ); 129 DependencySelector selector = new AndDependencySelector( other1, other2 ); 130 assertNull( selector.deriveChildSelector( null ) ); 131 } 132 133 @Test 134 public void testEquals() 135 { 136 DependencySelector other1 = new DummyDependencySelector( true ); 137 DependencySelector other2 = new DummyDependencySelector( false ); 138 DependencySelector selector1 = new AndDependencySelector( other1, other2 ); 139 DependencySelector selector2 = new AndDependencySelector( other2, other1 ); 140 DependencySelector selector3 = new AndDependencySelector( other1 ); 141 assertEquals( selector1, selector1 ); 142 assertEquals( selector1, selector2 ); 143 assertNotEquals( selector1, selector3 ); 144 assertNotEquals( selector1, this ); 145 assertNotEquals( selector1, null ); 146 } 147 148 @Test 149 public void testHashCode() 150 { 151 DependencySelector other1 = new DummyDependencySelector( true ); 152 DependencySelector other2 = new DummyDependencySelector( false ); 153 DependencySelector selector1 = new AndDependencySelector( other1, other2 ); 154 DependencySelector selector2 = new AndDependencySelector( other2, other1 ); 155 assertEquals( selector1.hashCode(), selector2.hashCode() ); 156 } 157 158 @Test 159 public void testToString() 160 { 161 DependencySelector andSelector = new AndDependencySelector( 162 new DummyDependencySelector( true ), 163 new DummyDependencySelector( false ) 164 ); 165 assertEquals("AndDependencySelector(Dummy(true) && Dummy(false))", andSelector.toString()); 166 } 167 168}