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