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