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 } 069 070 @Test 071 public void testNewInstance() 072 { 073 assertNull( AndDependencySelector.newInstance( null, null ) ); 074 DependencySelector selector = new DummyDependencySelector(); 075 assertSame( selector, AndDependencySelector.newInstance( selector, null ) ); 076 assertSame( selector, AndDependencySelector.newInstance( null, selector ) ); 077 assertSame( selector, AndDependencySelector.newInstance( selector, selector ) ); 078 assertNotNull( AndDependencySelector.newInstance( selector, new DummyDependencySelector() ) ); 079 } 080 081 @Test 082 public void testTraverseDependency() 083 { 084 Dependency dependency = new Dependency( new DefaultArtifact( "g:a:v:1" ), "runtime" ); 085 086 DependencySelector selector = new AndDependencySelector(); 087 assertTrue( selector.selectDependency( dependency ) ); 088 089 selector = 090 new AndDependencySelector( new DummyDependencySelector( false ), new DummyDependencySelector( false ) ); 091 assertFalse( selector.selectDependency( dependency ) ); 092 093 selector = 094 new AndDependencySelector( new DummyDependencySelector( true ), new DummyDependencySelector( false ) ); 095 assertFalse( selector.selectDependency( dependency ) ); 096 097 selector = new AndDependencySelector( new DummyDependencySelector( true ), new DummyDependencySelector( true ) ); 098 assertTrue( selector.selectDependency( dependency ) ); 099 } 100 101 @Test 102 public void testDeriveChildSelector_Unchanged() 103 { 104 DependencySelector other1 = new DummyDependencySelector( true ); 105 DependencySelector other2 = new DummyDependencySelector( false ); 106 DependencySelector selector = new AndDependencySelector( other1, other2 ); 107 assertSame( selector, selector.deriveChildSelector( null ) ); 108 } 109 110 @Test 111 public void testDeriveChildSelector_OneRemaining() 112 { 113 DependencySelector other1 = new DummyDependencySelector( true ); 114 DependencySelector other2 = new DummyDependencySelector( false, null ); 115 DependencySelector selector = new AndDependencySelector( other1, other2 ); 116 assertSame( other1, selector.deriveChildSelector( null ) ); 117 } 118 119 @Test 120 public void testDeriveChildSelector_ZeroRemaining() 121 { 122 DependencySelector other1 = new DummyDependencySelector( true, null ); 123 DependencySelector other2 = new DummyDependencySelector( false, null ); 124 DependencySelector selector = new AndDependencySelector( other1, other2 ); 125 assertNull( selector.deriveChildSelector( null ) ); 126 } 127 128 @Test 129 public void testEquals() 130 { 131 DependencySelector other1 = new DummyDependencySelector( true ); 132 DependencySelector other2 = new DummyDependencySelector( false ); 133 DependencySelector selector1 = new AndDependencySelector( other1, other2 ); 134 DependencySelector selector2 = new AndDependencySelector( other2, other1 ); 135 DependencySelector selector3 = new AndDependencySelector( other1 ); 136 assertEquals( selector1, selector1 ); 137 assertEquals( selector1, selector2 ); 138 assertNotEquals( selector1, selector3 ); 139 assertNotEquals( selector1, this ); 140 assertNotEquals( selector1, null ); 141 } 142 143 @Test 144 public void testHashCode() 145 { 146 DependencySelector other1 = new DummyDependencySelector( true ); 147 DependencySelector other2 = new DummyDependencySelector( false ); 148 DependencySelector selector1 = new AndDependencySelector( other1, other2 ); 149 DependencySelector selector2 = new AndDependencySelector( other2, other1 ); 150 assertEquals( selector1.hashCode(), selector2.hashCode() ); 151 } 152 153}