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        assertEquals( "com.example.test:testArtifact:jar:1.0.3", true,
062                      accept( node, "com.example.test:testArtifact:jar:1.0.3" ) );
063
064        // single wildcard
065        assertEquals( "*:testArtifact:jar:1.0.3", true, accept( node, "*:testArtifact:jar:1.0.3" ) );
066        assertEquals( "com.example.test:*:jar:1.0.3", true, accept( node, "com.example.test:*:jar:1.0.3" ) );
067        assertEquals( "com.example.test:testArtifact:*:1.0.3", true,
068                      accept( node, "com.example.test:testArtifact:*:1.0.3" ) );
069        assertEquals( "com.example.test:testArtifact:*:1.0.3", true,
070                      accept( node, "com.example.test:testArtifact:*:1.0.3" ) );
071
072        // implicit wildcard
073        assertEquals( ":testArtifact:jar:1.0.3", true, accept( node, ":testArtifact:jar:1.0.3" ) );
074        assertEquals( "com.example.test::jar:1.0.3", true, accept( node, "com.example.test::jar:1.0.3" ) );
075        assertEquals( "com.example.test:testArtifact::1.0.3", true,
076                      accept( node, "com.example.test:testArtifact::1.0.3" ) );
077        assertEquals( "com.example.test:testArtifact:jar:", true, accept( node, "com.example.test:testArtifact:jar:" ) );
078
079        // multi wildcards
080        assertEquals( "*:*:jar:1.0.3", true, accept( node, "*:*:jar:1.0.3" ) );
081        assertEquals( "com.example.test:*:*:1.0.3", true, accept( node, "com.example.test:*:*:1.0.3" ) );
082        assertEquals( "com.example.test:testArtifact:*:*", true, accept( node, "com.example.test:testArtifact:*:*" ) );
083        assertEquals( "*:testArtifact:jar:*", true, accept( node, "*:testArtifact:jar:*" ) );
084        assertEquals( "*:*:jar:*", true, accept( node, "*:*:jar:*" ) );
085        assertEquals( ":*:jar:", true, accept( node, ":*:jar:" ) );
086
087        // partial wildcards
088        assertEquals( "*.example.test:testArtifact:jar:1.0.3", true,
089                      accept( node, "*.example.test:testArtifact:jar:1.0.3" ) );
090        assertEquals( "com.example.test:testArtifact:*ar:1.0.*", true,
091                      accept( node, "com.example.test:testArtifact:*ar:1.0.*" ) );
092        assertEquals( "com.example.test:testArtifact:jar:1.0.*", true,
093                      accept( node, "com.example.test:testArtifact:jar:1.0.*" ) );
094        assertEquals( "*.example.*:testArtifact:jar:1.0.3", true, accept( node, "*.example.*:testArtifact:jar:1.0.3" ) );
095
096        // wildcard as empty string
097        assertEquals( "com.example.test*:testArtifact:jar:1.0.3", true,
098                      accept( node, "com.example.test*:testArtifact:jar:1.0.3" ) );
099    }
100
101    @Test
102    public void acceptTestLessToken()
103    {
104        NodeBuilder builder = new NodeBuilder();
105        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
106        DependencyNode node = builder.build();
107
108        assertEquals( "com.example.test:testArtifact:jar", true, accept( node, "com.example.test:testArtifact:jar" ) );
109        assertEquals( "com.example.test:testArtifact", true, accept( node, "com.example.test:testArtifact" ) );
110        assertEquals( "com.example.test", true, accept( node, "com.example.test" ) );
111
112        assertEquals( "com.example.foo", false, accept( node, "com.example.foo" ) );
113    }
114
115    @Test
116    public void acceptTestMissmatch()
117    {
118        NodeBuilder builder = new NodeBuilder();
119        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
120        DependencyNode node = builder.build();
121
122        assertEquals( "OTHER.GROUP.ID:testArtifact:jar:1.0.3", false,
123                      accept( node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3" ) );
124        assertEquals( "com.example.test:OTHER_ARTIFACT:jar:1.0.3", false,
125                      accept( node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3" ) );
126        assertEquals( "com.example.test:OTHER_ARTIFACT:jar:1.0.3", false,
127                      accept( node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3" ) );
128        assertEquals( "com.example.test:testArtifact:WAR:1.0.3", false,
129                      accept( node, "com.example.test:testArtifact:WAR:1.0.3" ) );
130        assertEquals( "com.example.test:testArtifact:jar:SNAPSHOT", false,
131                      accept( node, "com.example.test:testArtifact:jar:SNAPSHOT" ) );
132
133        assertEquals( "*:*:war:*", false, accept( node, "*:*:war:*" ) );
134        assertEquals( "OTHER.GROUP.ID", false, accept( node, "OTHER.GROUP.ID" ) );
135    }
136
137    @Test
138    public void acceptTestMoreToken()
139    {
140        NodeBuilder builder = new NodeBuilder();
141        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
142
143        DependencyNode node = builder.build();
144        assertEquals( "com.example.test:testArtifact:jar:1.0.3:foo", false,
145                      accept( node, "com.example.test:testArtifact:jar:1.0.3:foo" ) );
146    }
147
148    @Test
149    public void acceptTestRange()
150    {
151        NodeBuilder builder = new NodeBuilder();
152        builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
153        DependencyNode node = builder.build();
154
155        String prefix = "com.example.test:testArtifact:jar:";
156
157        assertTrue( prefix + "[1.0.3,1.0.4)", acceptVersionRange( node, prefix + "[1.0.3,1.0.4)" ) );
158        assertTrue( prefix + "[1.0.3,)", acceptVersionRange( node, prefix + "[1.0.3,)" ) );
159        assertTrue( prefix + "[1.0.3,]", acceptVersionRange( node, prefix + "[1.0.3,]" ) );
160        assertTrue( prefix + "(,1.0.3]", acceptVersionRange( node, prefix + "(,1.0.3]" ) );
161        assertTrue( prefix + "[1.0,]", acceptVersionRange( node, prefix + "[1.0,]" ) );
162        assertTrue( prefix + "[1,4]", acceptVersionRange( node, prefix + "[1,4]" ) );
163        assertTrue( prefix + "(1,4)", acceptVersionRange( node, prefix + "(1,4)" ) );
164
165        assertTrue( prefix + "(1.0.2,1.0.3]", acceptVersionRange( node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)" ) );
166
167        assertFalse( prefix + "(1.0.3,2.0]", acceptVersionRange( node, prefix + "(1.0.3,2.0]" ) );
168        assertFalse( prefix + "(1,1.0.2]", acceptVersionRange( node, prefix + "(1,1.0.2]" ) );
169
170        assertFalse( prefix + "(1.0.2,1.0.3)", acceptVersionRange( node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)" ) );
171    }
172
173    public boolean accept( DependencyNode node, String expression )
174    {
175        return new PatternInclusionsDependencyFilter( expression ).accept( node, new LinkedList<DependencyNode>() );
176    }
177
178    public boolean acceptVersionRange( DependencyNode node, String... expression )
179    {
180        return new PatternInclusionsDependencyFilter( new GenericVersionScheme(), expression ).accept( node,
181                                                                                                       new LinkedList<DependencyNode>() );
182    }
183
184}