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 PatternInclusionsDependencyFilterTest extends AbstractDependencyFilterTest {
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(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      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("com.example.test:testArtifact:jar:1.0.3", accept(node, "com.example.test:testArtifact:jar:1.0.3"));
59  
60          // single wildcard
61          assertTrue("*:testArtifact:jar:1.0.3", accept(node, "*:testArtifact:jar:1.0.3"));
62          assertTrue("com.example.test:*:jar:1.0.3", accept(node, "com.example.test:*:jar:1.0.3"));
63          assertTrue("com.example.test:testArtifact:*:1.0.3", accept(node, "com.example.test:testArtifact:*:1.0.3"));
64          assertTrue("com.example.test:testArtifact:*:1.0.3", accept(node, "com.example.test:testArtifact:*:1.0.3"));
65  
66          // implicit wildcard
67          assertTrue(":testArtifact:jar:1.0.3", accept(node, ":testArtifact:jar:1.0.3"));
68          assertTrue("com.example.test::jar:1.0.3", accept(node, "com.example.test::jar:1.0.3"));
69          assertTrue("com.example.test:testArtifact::1.0.3", accept(node, "com.example.test:testArtifact::1.0.3"));
70          assertTrue("com.example.test:testArtifact:jar:", accept(node, "com.example.test:testArtifact:jar:"));
71  
72          // multi wildcards
73          assertTrue("*:*:jar:1.0.3", accept(node, "*:*:jar:1.0.3"));
74          assertTrue("com.example.test:*:*:1.0.3", accept(node, "com.example.test:*:*:1.0.3"));
75          assertTrue("com.example.test:testArtifact:*:*", accept(node, "com.example.test:testArtifact:*:*"));
76          assertTrue("*:testArtifact:jar:*", accept(node, "*:testArtifact:jar:*"));
77          assertTrue("*:*:jar:*", accept(node, "*:*:jar:*"));
78          assertTrue(":*:jar:", accept(node, ":*:jar:"));
79  
80          // partial wildcards
81          assertTrue("*.example.test:testArtifact:jar:1.0.3", accept(node, "*.example.test:testArtifact:jar:1.0.3"));
82          assertTrue("com.example.test:testArtifact:*ar:1.0.*", accept(node, "com.example.test:testArtifact:*ar:1.0.*"));
83          assertTrue("com.example.test:testArtifact:jar:1.0.*", accept(node, "com.example.test:testArtifact:jar:1.0.*"));
84          assertTrue("*.example.*:testArtifact:jar:1.0.3", accept(node, "*.example.*:testArtifact:jar:1.0.3"));
85  
86          // wildcard as empty string
87          assertTrue(
88                  "com.example.test*:testArtifact:jar:1.0.3", accept(node, "com.example.test*:testArtifact:jar:1.0.3"));
89      }
90  
91      @Test
92      public 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("com.example.test:testArtifact:jar", accept(node, "com.example.test:testArtifact:jar"));
101         assertTrue("com.example.test:testArtifact", accept(node, "com.example.test:testArtifact"));
102         assertTrue("com.example.test", accept(node, "com.example.test"));
103 
104         assertFalse("com.example.foo", accept(node, "com.example.foo"));
105     }
106 
107     @Test
108     public 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("OTHER.GROUP.ID:testArtifact:jar:1.0.3", accept(node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3"));
117         assertFalse(
118                 "com.example.test:OTHER_ARTIFACT:jar:1.0.3", accept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"));
119         assertFalse(
120                 "com.example.test:OTHER_ARTIFACT:jar:1.0.3", accept(node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3"));
121         assertFalse("com.example.test:testArtifact:WAR:1.0.3", accept(node, "com.example.test:testArtifact:WAR:1.0.3"));
122         assertFalse(
123                 "com.example.test:testArtifact:jar:SNAPSHOT",
124                 accept(node, "com.example.test:testArtifact:jar:SNAPSHOT"));
125 
126         assertFalse("*:*:war:*", accept(node, "*:*:war:*"));
127         assertFalse("OTHER.GROUP.ID", accept(node, "OTHER.GROUP.ID"));
128     }
129 
130     @Test
131     public 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                 "com.example.test:testArtifact:jar:1.0.3:foo",
141                 accept(node, "com.example.test:testArtifact:jar:1.0.3:foo"));
142     }
143 
144     @Test
145     public 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(prefix + "[1.0.3,1.0.4)", acceptVersionRange(node, prefix + "[1.0.3,1.0.4)"));
156         assertTrue(prefix + "[1.0.3,)", acceptVersionRange(node, prefix + "[1.0.3,)"));
157         assertTrue(prefix + "[1.0.3,]", acceptVersionRange(node, prefix + "[1.0.3,]"));
158         assertTrue(prefix + "(,1.0.3]", acceptVersionRange(node, prefix + "(,1.0.3]"));
159         assertTrue(prefix + "[1.0,]", acceptVersionRange(node, prefix + "[1.0,]"));
160         assertTrue(prefix + "[1,4]", acceptVersionRange(node, prefix + "[1,4]"));
161         assertTrue(prefix + "(1,4)", acceptVersionRange(node, prefix + "(1,4)"));
162 
163         assertTrue(prefix + "(1.0.2,1.0.3]", acceptVersionRange(node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)"));
164 
165         assertFalse(prefix + "(1.0.3,2.0]", acceptVersionRange(node, prefix + "(1.0.3,2.0]"));
166         assertFalse(prefix + "(1,1.0.2]", acceptVersionRange(node, prefix + "(1,1.0.2]"));
167 
168         assertFalse(prefix + "(1.0.2,1.0.3)", acceptVersionRange(node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)"));
169     }
170 
171     public boolean accept(DependencyNode node, String expression) {
172         return new PatternInclusionsDependencyFilter(expression).accept(node, new LinkedList<DependencyNode>());
173     }
174 
175     public boolean acceptVersionRange(DependencyNode node, String... expression) {
176         return new PatternInclusionsDependencyFilter(new GenericVersionScheme(), expression)
177                 .accept(node, new LinkedList<DependencyNode>());
178     }
179 }