001package org.eclipse.aether.util.filter;
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 java.util.LinkedList;
025import java.util.List;
026
027import org.eclipse.aether.graph.DependencyNode;
028import org.eclipse.aether.internal.test.util.NodeBuilder;
029import org.eclipse.aether.util.filter.PatternInclusionsDependencyFilter;
030import org.eclipse.aether.util.version.GenericVersionScheme;
031import org.eclipse.aether.version.VersionScheme;
032import org.junit.Test;
033
034public class PatternInclusionsDependencyFilterTest
035    extends AbstractDependencyFilterTest
036{
037
038    @Test
039    public void acceptTestCornerCases()
040    {
041        NodeBuilder builder = new NodeBuilder();
042        builder.artifactId( "testArtifact" );
043        DependencyNode node = builder.build();
044        List<DependencyNode> parents = new LinkedList<>();
045
046        // Empty String, Empty List
047        assertTrue( accept( node, "" ) );
048        assertFalse( new PatternInclusionsDependencyFilter( new LinkedList<String>() ).accept( node, parents ) );
049        assertFalse( new PatternInclusionsDependencyFilter( (String[]) null ).accept( node, parents ) );
050        assertFalse( new PatternInclusionsDependencyFilter( (VersionScheme) null, "[1,10]" ).accept( node, parents ) );
051    }
052
053    @Test
054    public void acceptTestMatches()
055    {
056        NodeBuilder builder = new NodeBuilder();
057        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
058        DependencyNode node = builder.build();
059
060        // full match
061        assertTrue( "com.example.test:testArtifact:jar:1.0.3", accept( node, "com.example.test:testArtifact:jar:1.0.3" ) );
062
063        // single wildcard
064        assertTrue( "*:testArtifact:jar:1.0.3", accept( node, "*:testArtifact:jar:1.0.3" ) );
065        assertTrue( "com.example.test:*:jar:1.0.3", accept( node, "com.example.test:*:jar:1.0.3" ) );
066        assertTrue( "com.example.test:testArtifact:*:1.0.3", accept( node, "com.example.test:testArtifact:*:1.0.3" ) );
067        assertTrue( "com.example.test:testArtifact:*:1.0.3", accept( node, "com.example.test:testArtifact:*:1.0.3" ) );
068
069        // implicit wildcard
070        assertTrue( ":testArtifact:jar:1.0.3", accept( node, ":testArtifact:jar:1.0.3" ) );
071        assertTrue( "com.example.test::jar:1.0.3", accept( node, "com.example.test::jar:1.0.3" ) );
072        assertTrue( "com.example.test:testArtifact::1.0.3", accept( node, "com.example.test:testArtifact::1.0.3" ) );
073        assertTrue( "com.example.test:testArtifact:jar:", accept( node, "com.example.test:testArtifact:jar:" ) );
074
075        // multi wildcards
076        assertTrue( "*:*:jar:1.0.3", accept( node, "*:*:jar:1.0.3" ) );
077        assertTrue( "com.example.test:*:*:1.0.3", accept( node, "com.example.test:*:*:1.0.3" ) );
078        assertTrue( "com.example.test:testArtifact:*:*", accept( node, "com.example.test:testArtifact:*:*" ) );
079        assertTrue( "*:testArtifact:jar:*", accept( node, "*:testArtifact:jar:*" ) );
080        assertTrue( "*:*:jar:*", accept( node, "*:*:jar:*" ) );
081        assertTrue( ":*:jar:", accept( node, ":*:jar:" ) );
082
083        // partial wildcards
084        assertTrue( "*.example.test:testArtifact:jar:1.0.3", accept( node, "*.example.test:testArtifact:jar:1.0.3" ) );
085        assertTrue( "com.example.test:testArtifact:*ar:1.0.*", accept( node, "com.example.test:testArtifact:*ar:1.0.*" ) );
086        assertTrue( "com.example.test:testArtifact:jar:1.0.*", accept( node, "com.example.test:testArtifact:jar:1.0.*" ) );
087        assertTrue( "*.example.*:testArtifact:jar:1.0.3", accept( node, "*.example.*:testArtifact:jar:1.0.3" ) );
088
089        // wildcard as empty string
090        assertTrue( "com.example.test*:testArtifact:jar:1.0.3", accept( node, "com.example.test*:testArtifact:jar:1.0.3" ) );
091    }
092
093    @Test
094    public void acceptTestLessToken()
095    {
096        NodeBuilder builder = new NodeBuilder();
097        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
098        DependencyNode node = builder.build();
099
100        assertTrue( "com.example.test:testArtifact:jar", accept( node, "com.example.test:testArtifact:jar" ) );
101        assertTrue( "com.example.test:testArtifact", accept( node, "com.example.test:testArtifact" ) );
102        assertTrue( "com.example.test", accept( node, "com.example.test" ) );
103
104        assertFalse( "com.example.foo", accept( node, "com.example.foo" ) );
105    }
106
107    @Test
108    public void acceptTestMissmatch()
109    {
110        NodeBuilder builder = new NodeBuilder();
111        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
112        DependencyNode node = builder.build();
113
114        assertFalse( "OTHER.GROUP.ID:testArtifact:jar:1.0.3", accept( node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3" ) );
115        assertFalse( "com.example.test:OTHER_ARTIFACT:jar:1.0.3", accept( node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3" ) );
116        assertFalse( "com.example.test:OTHER_ARTIFACT:jar:1.0.3", accept( node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3" ) );
117        assertFalse( "com.example.test:testArtifact:WAR:1.0.3", accept( node, "com.example.test:testArtifact:WAR:1.0.3" ) );
118        assertFalse( "com.example.test:testArtifact:jar:SNAPSHOT", accept( node, "com.example.test:testArtifact:jar:SNAPSHOT" ) );
119
120        assertFalse( "*:*:war:*", accept( node, "*:*:war:*" ) );
121        assertFalse( "OTHER.GROUP.ID", accept( node, "OTHER.GROUP.ID" ) );
122    }
123
124    @Test
125    public void acceptTestMoreToken()
126    {
127        NodeBuilder builder = new NodeBuilder();
128        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
129
130        DependencyNode node = builder.build();
131        assertFalse( "com.example.test:testArtifact:jar:1.0.3:foo", accept( node, "com.example.test:testArtifact:jar:1.0.3:foo" ) );
132    }
133
134    @Test
135    public void acceptTestRange()
136    {
137        NodeBuilder builder = new NodeBuilder();
138        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
139        DependencyNode node = builder.build();
140
141        String prefix = "com.example.test:testArtifact:jar:";
142
143        assertTrue( prefix + "[1.0.3,1.0.4)", acceptVersionRange( node, prefix + "[1.0.3,1.0.4)" ) );
144        assertTrue( prefix + "[1.0.3,)", acceptVersionRange( node, prefix + "[1.0.3,)" ) );
145        assertTrue( prefix + "[1.0.3,]", acceptVersionRange( node, prefix + "[1.0.3,]" ) );
146        assertTrue( prefix + "(,1.0.3]", acceptVersionRange( node, prefix + "(,1.0.3]" ) );
147        assertTrue( prefix + "[1.0,]", acceptVersionRange( node, prefix + "[1.0,]" ) );
148        assertTrue( prefix + "[1,4]", acceptVersionRange( node, prefix + "[1,4]" ) );
149        assertTrue( prefix + "(1,4)", acceptVersionRange( node, prefix + "(1,4)" ) );
150
151        assertTrue( prefix + "(1.0.2,1.0.3]", acceptVersionRange( node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)" ) );
152
153        assertFalse( prefix + "(1.0.3,2.0]", acceptVersionRange( node, prefix + "(1.0.3,2.0]" ) );
154        assertFalse( prefix + "(1,1.0.2]", acceptVersionRange( node, prefix + "(1,1.0.2]" ) );
155
156        assertFalse( prefix + "(1.0.2,1.0.3)", acceptVersionRange( node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)" ) );
157    }
158
159    public boolean accept( DependencyNode node, String expression )
160    {
161        return new PatternInclusionsDependencyFilter( expression ).accept( node, new LinkedList<DependencyNode>() );
162    }
163
164    public boolean acceptVersionRange( DependencyNode node, String... expression )
165    {
166        return new PatternInclusionsDependencyFilter( new GenericVersionScheme(), expression ).accept( node,
167                                                                                                       new LinkedList<DependencyNode>() );
168    }
169
170}