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