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}