View Javadoc
1   package org.eclipse.aether.util.filter;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   * 
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   * 
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.*;
23  
24  import java.util.LinkedList;
25  import java.util.List;
26  
27  import org.eclipse.aether.graph.DependencyNode;
28  import org.eclipse.aether.internal.test.util.NodeBuilder;
29  import org.eclipse.aether.util.filter.PatternExclusionsDependencyFilter;
30  import org.eclipse.aether.util.version.GenericVersionScheme;
31  import org.eclipse.aether.version.VersionScheme;
32  import org.junit.Test;
33  
34  public class PatternExclusionsDependencyFilterTest
35  {
36  
37      @Test
38      public void acceptTestCornerCases()
39      {
40          NodeBuilder builder = new NodeBuilder();
41          builder.artifactId( "testArtifact" );
42          DependencyNode node = builder.build();
43          List<DependencyNode> parents = new LinkedList<DependencyNode>();
44  
45          // Empty String, Empty List
46          assertTrue( dontAccept( node, "" ) );
47          assertTrue( new PatternExclusionsDependencyFilter( new LinkedList<String>() ).accept( node, parents ) );
48          assertTrue( new PatternExclusionsDependencyFilter( (String[]) null ).accept( node, parents ) );
49          assertTrue( new PatternExclusionsDependencyFilter( (VersionScheme) null, "[1,10]" ).accept( node, parents ) );
50      }
51  
52      @Test
53      public void acceptTestMatches()
54      {
55          NodeBuilder builder = new NodeBuilder();
56          builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
57          DependencyNode node = builder.build();
58  
59          // full match
60          assertEquals( "com.example.test:testArtifact:jar:1.0.3", true,
61                        dontAccept( node, "com.example.test:testArtifact:jar:1.0.3" ) );
62  
63          // single wildcard
64          assertEquals( "*:testArtifact:jar:1.0.3", true, dontAccept( node, "*:testArtifact:jar:1.0.3" ) );
65          assertEquals( "com.example.test:*:jar:1.0.3", true, dontAccept( node, "com.example.test:*:jar:1.0.3" ) );
66          assertEquals( "com.example.test:testArtifact:*:1.0.3", true,
67                        dontAccept( node, "com.example.test:testArtifact:*:1.0.3" ) );
68          assertEquals( "com.example.test:testArtifact:*:1.0.3", true,
69                        dontAccept( node, "com.example.test:testArtifact:*:1.0.3" ) );
70  
71          // implicit wildcard
72          assertEquals( ":testArtifact:jar:1.0.3", true, dontAccept( node, ":testArtifact:jar:1.0.3" ) );
73          assertEquals( "com.example.test::jar:1.0.3", true, dontAccept( node, "com.example.test::jar:1.0.3" ) );
74          assertEquals( "com.example.test:testArtifact::1.0.3", true,
75                        dontAccept( node, "com.example.test:testArtifact::1.0.3" ) );
76          assertEquals( "com.example.test:testArtifact:jar:", true,
77                        dontAccept( node, "com.example.test:testArtifact:jar:" ) );
78  
79          // multi wildcards
80          assertEquals( "*:*:jar:1.0.3", true, dontAccept( node, "*:*:jar:1.0.3" ) );
81          assertEquals( "com.example.test:*:*:1.0.3", true, dontAccept( node, "com.example.test:*:*:1.0.3" ) );
82          assertEquals( "com.example.test:testArtifact:*:*", true, dontAccept( node, "com.example.test:testArtifact:*:*" ) );
83          assertEquals( "*:testArtifact:jar:*", true, dontAccept( node, "*:testArtifact:jar:*" ) );
84          assertEquals( "*:*:jar:*", true, dontAccept( node, "*:*:jar:*" ) );
85          assertEquals( ":*:jar:", true, dontAccept( node, ":*:jar:" ) );
86  
87          // partial wildcards
88          assertEquals( "*.example.test:testArtifact:jar:1.0.3", true,
89                        dontAccept( node, "*.example.test:testArtifact:jar:1.0.3" ) );
90          assertEquals( "com.example.test:testArtifact:*ar:1.0.*", true,
91                        dontAccept( node, "com.example.test:testArtifact:*ar:1.0.*" ) );
92          assertEquals( "com.example.test:testArtifact:jar:1.0.*", true,
93                        dontAccept( node, "com.example.test:testArtifact:jar:1.0.*" ) );
94          assertEquals( "*.example.*:testArtifact:jar:1.0.3", true,
95                        dontAccept( node, "*.example.*:testArtifact:jar:1.0.3" ) );
96  
97          // wildcard as empty string
98          assertEquals( "com.example.test*:testArtifact:jar:1.0.3", true,
99                        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 }