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 PatternInclusionsDependencyFilterTest extends AbstractDependencyFilterTest {
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(accept(node, ""));
43          assertFalse(new PatternInclusionsDependencyFilter(new LinkedList<String>()).accept(node, parents));
44          assertFalse(new PatternInclusionsDependencyFilter((String[]) null).accept(node, parents));
45          assertFalse(new PatternInclusionsDependencyFilter((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(accept(node, "com.example.test:testArtifact:jar:1.0.3"), "com.example.test:testArtifact:jar:1.0.3");
59  
60          // single wildcard
61          assertTrue(accept(node, "*:testArtifact:jar:1.0.3"), "*:testArtifact:jar:1.0.3");
62          assertTrue(accept(node, "com.example.test:*:jar:1.0.3"), "com.example.test:*:jar:1.0.3");
63          assertTrue(accept(node, "com.example.test:testArtifact:*:1.0.3"), "com.example.test:testArtifact:*:1.0.3");
64          assertTrue(accept(node, "com.example.test:testArtifact:*:1.0.3"), "com.example.test:testArtifact:*:1.0.3");
65  
66          // implicit wildcard
67          assertTrue(accept(node, ":testArtifact:jar:1.0.3"), ":testArtifact:jar:1.0.3");
68          assertTrue(accept(node, "com.example.test::jar:1.0.3"), "com.example.test::jar:1.0.3");
69          assertTrue(accept(node, "com.example.test:testArtifact::1.0.3"), "com.example.test:testArtifact::1.0.3");
70          assertTrue(accept(node, "com.example.test:testArtifact:jar:"), "com.example.test:testArtifact:jar:");
71  
72          // multi wildcards
73          assertTrue(accept(node, "*:*:jar:1.0.3"), "*:*:jar:1.0.3");
74          assertTrue(accept(node, "com.example.test:*:*:1.0.3"), "com.example.test:*:*:1.0.3");
75          assertTrue(accept(node, "com.example.test:testArtifact:*:*"), "com.example.test:testArtifact:*:*");
76          assertTrue(accept(node, "*:testArtifact:jar:*"), "*:testArtifact:jar:*");
77          assertTrue(accept(node, "*:*:jar:*"), "*:*:jar:*");
78          assertTrue(accept(node, ":*:jar:"), ":*:jar:");
79  
80          // partial wildcards
81          assertTrue(accept(node, "*.example.test:testArtifact:jar:1.0.3"), "*.example.test:testArtifact:jar:1.0.3");
82          assertTrue(accept(node, "com.example.test:testArtifact:*ar:1.0.*"), "com.example.test:testArtifact:*ar:1.0.*");
83          assertTrue(accept(node, "com.example.test:testArtifact:jar:1.0.*"), "com.example.test:testArtifact:jar:1.0.*");
84          assertTrue(accept(node, "*.example.*:testArtifact:jar:1.0.3"), "*.example.*:testArtifact:jar:1.0.3");
85  
86          // wildcard as empty string
87          assertTrue(
88                  accept(node, "com.example.test*:testArtifact:jar:1.0.3"), "com.example.test*:testArtifact:jar:1.0.3");
89      }
90  
91      @Test
92      void acceptTestLessToken() {
93          NodeBuilder builder = new NodeBuilder();
94          builder.groupId("com.example.test")
95                  .artifactId("testArtifact")
96                  .ext("jar")
97                  .version("1.0.3");
98          DependencyNode node = builder.build();
99  
100         assertTrue(accept(node, "com.example.test:testArtifact:jar"), "com.example.test:testArtifact:jar");
101         assertTrue(accept(node, "com.example.test:testArtifact"), "com.example.test:testArtifact");
102         assertTrue(accept(node, "com.example.test"), "com.example.test");
103 
104         assertFalse(accept(node, "com.example.foo"), "com.example.foo");
105     }
106 
107     @Test
108     void acceptTestMissmatch() {
109         NodeBuilder builder = new NodeBuilder();
110         builder.groupId("com.example.test")
111                 .artifactId("testArtifact")
112                 .ext("jar")
113                 .version("1.0.3");
114         DependencyNode node = builder.build();
115 
116         assertFalse(accept(node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3"), "OTHER.GROUP.ID:testArtifact:jar:1.0.3");
117         assertFalse(
118                 accept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"), "com.example.test:OTHER_ARTIFACT:jar:1.0.3");
119         assertFalse(
120                 accept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"), "com.example.test:OTHER_ARTIFACT:jar:1.0.3");
121         assertFalse(accept(node, "com.example.test:testArtifact:WAR:1.0.3"), "com.example.test:testArtifact:WAR:1.0.3");
122         assertFalse(
123                 accept(node, "com.example.test:testArtifact:jar:SNAPSHOT"),
124                 "com.example.test:testArtifact:jar:SNAPSHOT");
125 
126         assertFalse(accept(node, "*:*:war:*"), "*:*:war:*");
127         assertFalse(accept(node, "OTHER.GROUP.ID"), "OTHER.GROUP.ID");
128     }
129 
130     @Test
131     void acceptTestMoreToken() {
132         NodeBuilder builder = new NodeBuilder();
133         builder.groupId("com.example.test")
134                 .artifactId("testArtifact")
135                 .ext("jar")
136                 .version("1.0.3");
137 
138         DependencyNode node = builder.build();
139         assertFalse(
140                 accept(node, "com.example.test:testArtifact:jar:1.0.3:foo"),
141                 "com.example.test:testArtifact:jar:1.0.3:foo");
142     }
143 
144     @Test
145     void acceptTestRange() {
146         NodeBuilder builder = new NodeBuilder();
147         builder.groupId("com.example.test")
148                 .artifactId("testArtifact")
149                 .ext("jar")
150                 .version("1.0.3");
151         DependencyNode node = builder.build();
152 
153         String prefix = "com.example.test:testArtifact:jar:";
154 
155         assertTrue(acceptVersionRange(node, prefix + "[1.0.3,1.0.4)"), prefix + "[1.0.3,1.0.4)");
156         assertTrue(acceptVersionRange(node, prefix + "[1.0.3,)"), prefix + "[1.0.3,)");
157         assertTrue(acceptVersionRange(node, prefix + "[1.0.3,]"), prefix + "[1.0.3,]");
158         assertTrue(acceptVersionRange(node, prefix + "(,1.0.3]"), prefix + "(,1.0.3]");
159         assertTrue(acceptVersionRange(node, prefix + "[1.0,]"), prefix + "[1.0,]");
160         assertTrue(acceptVersionRange(node, prefix + "[1,4]"), prefix + "[1,4]");
161         assertTrue(acceptVersionRange(node, prefix + "(1,4)"), prefix + "(1,4)");
162 
163         assertTrue(acceptVersionRange(node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)"), prefix + "(1.0.2,1.0.3]");
164 
165         assertFalse(acceptVersionRange(node, prefix + "(1.0.3,2.0]"), prefix + "(1.0.3,2.0]");
166         assertFalse(acceptVersionRange(node, prefix + "(1,1.0.2]"), prefix + "(1,1.0.2]");
167 
168         assertFalse(acceptVersionRange(node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)"), prefix + "(1.0.2,1.0.3)");
169     }
170 
171     public boolean accept(DependencyNode node, String expression) {
172         return new PatternInclusionsDependencyFilter(expression).accept(node, new LinkedList<>());
173     }
174 
175     public boolean acceptVersionRange(DependencyNode node, String... expression) {
176         return new PatternInclusionsDependencyFilter(new GenericVersionScheme(), expression)
177                 .accept(node, new LinkedList<>());
178     }
179 }