View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.util.filter;
20  
21  import java.util.LinkedList;
22  import java.util.List;
23  
24  import org.eclipse.aether.graph.DependencyNode;
25  import org.eclipse.aether.internal.test.util.NodeBuilder;
26  import org.eclipse.aether.util.version.GenericVersionScheme;
27  import org.eclipse.aether.version.VersionScheme;
28  import org.junit.Test;
29  
30  import static org.junit.Assert.*;
31  
32  public class PatternExclusionsDependencyFilterTest {
33  
34      @Test
35      public void acceptTestCornerCases() {
36          NodeBuilder builder = new NodeBuilder();
37          builder.artifactId("testArtifact");
38          DependencyNode node = builder.build();
39          List<DependencyNode> parents = new LinkedList<>();
40  
41          // Empty String, Empty List
42          assertTrue(dontAccept(node, ""));
43          assertTrue(new PatternExclusionsDependencyFilter(new LinkedList<String>()).accept(node, parents));
44          assertTrue(new PatternExclusionsDependencyFilter((String[]) null).accept(node, parents));
45          assertTrue(new PatternExclusionsDependencyFilter((VersionScheme) null, "[1,10]").accept(node, parents));
46      }
47  
48      @Test
49      public void acceptTestMatches() {
50          NodeBuilder builder = new NodeBuilder();
51          builder.groupId("com.example.test")
52                  .artifactId("testArtifact")
53                  .ext("jar")
54                  .version("1.0.3");
55          DependencyNode node = builder.build();
56  
57          // full match
58          assertTrue(
59                  "com.example.test:testArtifact:jar:1.0.3", dontAccept(node, "com.example.test:testArtifact:jar:1.0.3"));
60  
61          // single wildcard
62          assertTrue("*:testArtifact:jar:1.0.3", dontAccept(node, "*:testArtifact:jar:1.0.3"));
63          assertTrue("com.example.test:*:jar:1.0.3", dontAccept(node, "com.example.test:*:jar:1.0.3"));
64          assertTrue("com.example.test:testArtifact:*:1.0.3", dontAccept(node, "com.example.test:testArtifact:*:1.0.3"));
65          assertTrue("com.example.test:testArtifact:*:1.0.3", dontAccept(node, "com.example.test:testArtifact:*:1.0.3"));
66  
67          // implicit wildcard
68          assertTrue(":testArtifact:jar:1.0.3", dontAccept(node, ":testArtifact:jar:1.0.3"));
69          assertTrue("com.example.test::jar:1.0.3", dontAccept(node, "com.example.test::jar:1.0.3"));
70          assertTrue("com.example.test:testArtifact::1.0.3", dontAccept(node, "com.example.test:testArtifact::1.0.3"));
71          assertTrue("com.example.test:testArtifact:jar:", dontAccept(node, "com.example.test:testArtifact:jar:"));
72  
73          // multi wildcards
74          assertTrue("*:*:jar:1.0.3", dontAccept(node, "*:*:jar:1.0.3"));
75          assertTrue("com.example.test:*:*:1.0.3", dontAccept(node, "com.example.test:*:*:1.0.3"));
76          assertTrue("com.example.test:testArtifact:*:*", dontAccept(node, "com.example.test:testArtifact:*:*"));
77          assertTrue("*:testArtifact:jar:*", dontAccept(node, "*:testArtifact:jar:*"));
78          assertTrue("*:*:jar:*", dontAccept(node, "*:*:jar:*"));
79          assertTrue(":*:jar:", dontAccept(node, ":*:jar:"));
80  
81          // partial wildcards
82          assertTrue("*.example.test:testArtifact:jar:1.0.3", dontAccept(node, "*.example.test:testArtifact:jar:1.0.3"));
83          assertTrue(
84                  "com.example.test:testArtifact:*ar:1.0.*", dontAccept(node, "com.example.test:testArtifact:*ar:1.0.*"));
85          assertTrue(
86                  "com.example.test:testArtifact:jar:1.0.*", dontAccept(node, "com.example.test:testArtifact:jar:1.0.*"));
87          assertTrue("*.example.*:testArtifact:jar:1.0.3", dontAccept(node, "*.example.*:testArtifact:jar:1.0.3"));
88  
89          // wildcard as empty string
90          assertTrue(
91                  "com.example.test*:testArtifact:jar:1.0.3",
92                  dontAccept(node, "com.example.test*:testArtifact:jar:1.0.3"));
93      }
94  
95      @Test
96      public void acceptTestLessToken() {
97          NodeBuilder builder = new NodeBuilder();
98          builder.groupId("com.example.test")
99                  .artifactId("testArtifact")
100                 .ext("jar")
101                 .version("1.0.3");
102         DependencyNode node = builder.build();
103 
104         assertTrue("com.example.test:testArtifact:jar", dontAccept(node, "com.example.test:testArtifact:jar"));
105         assertTrue("com.example.test:testArtifact", dontAccept(node, "com.example.test:testArtifact"));
106         assertTrue("com.example.test", dontAccept(node, "com.example.test"));
107 
108         assertFalse("com.example.foo", dontAccept(node, "com.example.foo"));
109     }
110 
111     @Test
112     public void acceptTestMissmatch() {
113         NodeBuilder builder = new NodeBuilder();
114         builder.groupId("com.example.test")
115                 .artifactId("testArtifact")
116                 .ext("jar")
117                 .version("1.0.3");
118         DependencyNode node = builder.build();
119 
120         assertFalse("OTHER.GROUP.ID:testArtifact:jar:1.0.3", dontAccept(node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3"));
121         assertFalse(
122                 "com.example.test:OTHER_ARTIFACT:jar:1.0.3",
123                 dontAccept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"));
124         assertFalse(
125                 "com.example.test:OTHER_ARTIFACT:jar:1.0.3",
126                 dontAccept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"));
127         assertFalse(
128                 "com.example.test:testArtifact:WAR:1.0.3", dontAccept(node, "com.example.test:testArtifact:WAR:1.0.3"));
129         assertFalse(
130                 "com.example.test:testArtifact:jar:SNAPSHOT",
131                 dontAccept(node, "com.example.test:testArtifact:jar:SNAPSHOT"));
132 
133         assertFalse("*:*:war:*", dontAccept(node, "*:*:war:*"));
134         assertFalse("OTHER.GROUP.ID", dontAccept(node, "OTHER.GROUP.ID"));
135     }
136 
137     @Test
138     public void acceptTestMoreToken() {
139         NodeBuilder builder = new NodeBuilder();
140         builder.groupId("com.example.test")
141                 .artifactId("testArtifact")
142                 .ext("jar")
143                 .version("1.0.3");
144 
145         DependencyNode node = builder.build();
146         assertFalse(
147                 "com.example.test:testArtifact:jar:1.0.3:foo",
148                 dontAccept(node, "com.example.test:testArtifact:jar:1.0.3:foo"));
149     }
150 
151     @Test
152     public void acceptTestRange() {
153         NodeBuilder builder = new NodeBuilder();
154         builder.groupId("com.example.test")
155                 .artifactId("testArtifact")
156                 .ext("jar")
157                 .version("1.0.3");
158         DependencyNode node = builder.build();
159 
160         String prefix = "com.example.test:testArtifact:jar:";
161 
162         assertTrue(prefix + "[1.0.3,1.0.4)", dontAcceptVersionRange(node, prefix + "[1.0.3,1.0.4)"));
163         assertTrue(prefix + "[1.0.3,)", dontAcceptVersionRange(node, prefix + "[1.0.3,)"));
164         assertTrue(prefix + "[1.0.3,]", dontAcceptVersionRange(node, prefix + "[1.0.3,]"));
165         assertTrue(prefix + "(,1.0.3]", dontAcceptVersionRange(node, prefix + "(,1.0.3]"));
166         assertTrue(prefix + "[1.0,]", dontAcceptVersionRange(node, prefix + "[1.0,]"));
167         assertTrue(prefix + "[1,4]", dontAcceptVersionRange(node, prefix + "[1,4]"));
168         assertTrue(prefix + "(1,4)", dontAcceptVersionRange(node, prefix + "(1,4)"));
169 
170         assertTrue(prefix + "(1.0.2,1.0.3]", dontAcceptVersionRange(node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)"));
171 
172         assertFalse(prefix + "(1.0.3,2.0]", dontAcceptVersionRange(node, prefix + "(1.0.3,2.0]"));
173         assertFalse(prefix + "(1,1.0.2]", dontAcceptVersionRange(node, prefix + "(1,1.0.2]"));
174 
175         assertFalse(
176                 prefix + "(1.0.2,1.0.3)", dontAcceptVersionRange(node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)"));
177     }
178 
179     private boolean dontAccept(DependencyNode node, String expression) {
180         return !new PatternExclusionsDependencyFilter(expression).accept(node, new LinkedList<>());
181     }
182 
183     private boolean dontAcceptVersionRange(DependencyNode node, String... expression) {
184         return !new PatternExclusionsDependencyFilter(new GenericVersionScheme(), expression)
185                 .accept(node, new LinkedList<>());
186     }
187 }