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.jupiter.api.Test;
29  
30  import static org.junit.jupiter.api.Assertions.*;
31  
32  public class PatternExclusionsDependencyFilterTest {
33  
34      @Test
35      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      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                  dontAccept(node, "com.example.test:testArtifact:jar:1.0.3"), "com.example.test:testArtifact:jar:1.0.3");
60  
61          // single wildcard
62          assertTrue(dontAccept(node, "*:testArtifact:jar:1.0.3"), "*:testArtifact:jar:1.0.3");
63          assertTrue(dontAccept(node, "com.example.test:*:jar:1.0.3"), "com.example.test:*:jar:1.0.3");
64          assertTrue(dontAccept(node, "com.example.test:testArtifact:*:1.0.3"), "com.example.test:testArtifact:*:1.0.3");
65          assertTrue(dontAccept(node, "com.example.test:testArtifact:*:1.0.3"), "com.example.test:testArtifact:*:1.0.3");
66  
67          // implicit wildcard
68          assertTrue(dontAccept(node, ":testArtifact:jar:1.0.3"), ":testArtifact:jar:1.0.3");
69          assertTrue(dontAccept(node, "com.example.test::jar:1.0.3"), "com.example.test::jar:1.0.3");
70          assertTrue(dontAccept(node, "com.example.test:testArtifact::1.0.3"), "com.example.test:testArtifact::1.0.3");
71          assertTrue(dontAccept(node, "com.example.test:testArtifact:jar:"), "com.example.test:testArtifact:jar:");
72  
73          // multi wildcards
74          assertTrue(dontAccept(node, "*:*:jar:1.0.3"), "*:*:jar:1.0.3");
75          assertTrue(dontAccept(node, "com.example.test:*:*:1.0.3"), "com.example.test:*:*:1.0.3");
76          assertTrue(dontAccept(node, "com.example.test:testArtifact:*:*"), "com.example.test:testArtifact:*:*");
77          assertTrue(dontAccept(node, "*:testArtifact:jar:*"), "*:testArtifact:jar:*");
78          assertTrue(dontAccept(node, "*:*:jar:*"), "*:*:jar:*");
79          assertTrue(dontAccept(node, ":*:jar:"), ":*:jar:");
80  
81          // partial wildcards
82          assertTrue(dontAccept(node, "*.example.test:testArtifact:jar:1.0.3"), "*.example.test:testArtifact:jar:1.0.3");
83          assertTrue(
84                  dontAccept(node, "com.example.test:testArtifact:*ar:1.0.*"), "com.example.test:testArtifact:*ar:1.0.*");
85          assertTrue(
86                  dontAccept(node, "com.example.test:testArtifact:jar:1.0.*"), "com.example.test:testArtifact:jar:1.0.*");
87          assertTrue(dontAccept(node, "*.example.*:testArtifact:jar:1.0.3"), "*.example.*:testArtifact:jar:1.0.3");
88  
89          // wildcard as empty string
90          assertTrue(
91                  dontAccept(node, "com.example.test*:testArtifact:jar:1.0.3"),
92                  "com.example.test*:testArtifact:jar:1.0.3");
93      }
94  
95      @Test
96      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(dontAccept(node, "com.example.test:testArtifact:jar"), "com.example.test:testArtifact:jar");
105         assertTrue(dontAccept(node, "com.example.test:testArtifact"), "com.example.test:testArtifact");
106         assertTrue(dontAccept(node, "com.example.test"), "com.example.test");
107 
108         assertFalse(dontAccept(node, "com.example.foo"), "com.example.foo");
109     }
110 
111     @Test
112     void acceptTestMismatch() {
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(dontAccept(node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3"), "OTHER.GROUP.ID:testArtifact:jar:1.0.3");
121         assertFalse(
122                 dontAccept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"),
123                 "com.example.test:OTHER_ARTIFACT:jar:1.0.3");
124         assertFalse(
125                 dontAccept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"),
126                 "com.example.test:OTHER_ARTIFACT:jar:1.0.3");
127         assertFalse(
128                 dontAccept(node, "com.example.test:testArtifact:WAR:1.0.3"), "com.example.test:testArtifact:WAR:1.0.3");
129         assertFalse(
130                 dontAccept(node, "com.example.test:testArtifact:jar:SNAPSHOT"),
131                 "com.example.test:testArtifact:jar:SNAPSHOT");
132 
133         assertFalse(dontAccept(node, "*:*:war:*"), "*:*:war:*");
134         assertFalse(dontAccept(node, "OTHER.GROUP.ID"), "OTHER.GROUP.ID");
135     }
136 
137     @Test
138     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                 dontAccept(node, "com.example.test:testArtifact:jar:1.0.3:foo"),
148                 "com.example.test:testArtifact:jar:1.0.3:foo");
149     }
150 
151     @Test
152     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(dontAcceptVersionRange(node, prefix + "[1.0.3,1.0.4)"), prefix + "[1.0.3,1.0.4)");
163         assertTrue(dontAcceptVersionRange(node, prefix + "[1.0.3,)"), prefix + "[1.0.3,)");
164         assertTrue(dontAcceptVersionRange(node, prefix + "[1.0.3,]"), prefix + "[1.0.3,]");
165         assertTrue(dontAcceptVersionRange(node, prefix + "(,1.0.3]"), prefix + "(,1.0.3]");
166         assertTrue(dontAcceptVersionRange(node, prefix + "[1.0,]"), prefix + "[1.0,]");
167         assertTrue(dontAcceptVersionRange(node, prefix + "[1,4]"), prefix + "[1,4]");
168         assertTrue(dontAcceptVersionRange(node, prefix + "(1,4)"), prefix + "(1,4)");
169 
170         assertTrue(dontAcceptVersionRange(node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)"), prefix + "(1.0.2,1.0.3]");
171 
172         assertFalse(dontAcceptVersionRange(node, prefix + "(1.0.3,2.0]"), prefix + "(1.0.3,2.0]");
173         assertFalse(dontAcceptVersionRange(node, prefix + "(1,1.0.2]"), prefix + "(1,1.0.2]");
174 
175         assertFalse(
176                 dontAcceptVersionRange(node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)"), prefix + "(1.0.2,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 }