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.PatternInclusionsDependencyFilter;
30  import org.eclipse.aether.util.version.GenericVersionScheme;
31  import org.eclipse.aether.version.VersionScheme;
32  import org.junit.Test;
33  
34  public class PatternInclusionsDependencyFilterTest
35      extends AbstractDependencyFilterTest
36  {
37  
38      @Test
39      public void acceptTestCornerCases()
40      {
41          NodeBuilder builder = new NodeBuilder();
42          builder.artifactId( "testArtifact" );
43          DependencyNode node = builder.build();
44          List<DependencyNode> parents = new LinkedList<>();
45  
46          // Empty String, Empty List
47          assertTrue( accept( node, "" ) );
48          assertFalse( new PatternInclusionsDependencyFilter( new LinkedList<String>() ).accept( node, parents ) );
49          assertFalse( new PatternInclusionsDependencyFilter( (String[]) null ).accept( node, parents ) );
50          assertFalse( new PatternInclusionsDependencyFilter( (VersionScheme) null, "[1,10]" ).accept( node, parents ) );
51      }
52  
53      @Test
54      public void acceptTestMatches()
55      {
56          NodeBuilder builder = new NodeBuilder();
57          builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
58          DependencyNode node = builder.build();
59  
60          // full match
61          assertTrue( "com.example.test:testArtifact:jar:1.0.3", accept( node, "com.example.test:testArtifact:jar:1.0.3" ) );
62  
63          // single wildcard
64          assertTrue( "*:testArtifact:jar:1.0.3", accept( node, "*:testArtifact:jar:1.0.3" ) );
65          assertTrue( "com.example.test:*:jar:1.0.3", accept( node, "com.example.test:*:jar:1.0.3" ) );
66          assertTrue( "com.example.test:testArtifact:*:1.0.3", accept( node, "com.example.test:testArtifact:*:1.0.3" ) );
67          assertTrue( "com.example.test:testArtifact:*:1.0.3", accept( node, "com.example.test:testArtifact:*:1.0.3" ) );
68  
69          // implicit wildcard
70          assertTrue( ":testArtifact:jar:1.0.3", accept( node, ":testArtifact:jar:1.0.3" ) );
71          assertTrue( "com.example.test::jar:1.0.3", accept( node, "com.example.test::jar:1.0.3" ) );
72          assertTrue( "com.example.test:testArtifact::1.0.3", accept( node, "com.example.test:testArtifact::1.0.3" ) );
73          assertTrue( "com.example.test:testArtifact:jar:", accept( node, "com.example.test:testArtifact:jar:" ) );
74  
75          // multi wildcards
76          assertTrue( "*:*:jar:1.0.3", accept( node, "*:*:jar:1.0.3" ) );
77          assertTrue( "com.example.test:*:*:1.0.3", accept( node, "com.example.test:*:*:1.0.3" ) );
78          assertTrue( "com.example.test:testArtifact:*:*", accept( node, "com.example.test:testArtifact:*:*" ) );
79          assertTrue( "*:testArtifact:jar:*", accept( node, "*:testArtifact:jar:*" ) );
80          assertTrue( "*:*:jar:*", accept( node, "*:*:jar:*" ) );
81          assertTrue( ":*:jar:", accept( node, ":*:jar:" ) );
82  
83          // partial wildcards
84          assertTrue( "*.example.test:testArtifact:jar:1.0.3", accept( node, "*.example.test:testArtifact:jar:1.0.3" ) );
85          assertTrue( "com.example.test:testArtifact:*ar:1.0.*", accept( node, "com.example.test:testArtifact:*ar:1.0.*" ) );
86          assertTrue( "com.example.test:testArtifact:jar:1.0.*", accept( node, "com.example.test:testArtifact:jar:1.0.*" ) );
87          assertTrue( "*.example.*:testArtifact:jar:1.0.3", accept( node, "*.example.*:testArtifact:jar:1.0.3" ) );
88  
89          // wildcard as empty string
90          assertTrue( "com.example.test*:testArtifact:jar:1.0.3", accept( node, "com.example.test*:testArtifact:jar:1.0.3" ) );
91      }
92  
93      @Test
94      public void acceptTestLessToken()
95      {
96          NodeBuilder builder = new NodeBuilder();
97          builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).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     {
110         NodeBuilder builder = new NodeBuilder();
111         builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
112         DependencyNode node = builder.build();
113 
114         assertFalse( "OTHER.GROUP.ID:testArtifact:jar:1.0.3", accept( node, "OTHER.GROUP.ID:testArtifact:jar:1.0.3" ) );
115         assertFalse( "com.example.test:OTHER_ARTIFACT:jar:1.0.3", accept( node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3" ) );
116         assertFalse( "com.example.test:OTHER_ARTIFACT:jar:1.0.3", accept( node, "com.example.test:OTHER_ARTIFACT:jar:1.0.3" ) );
117         assertFalse( "com.example.test:testArtifact:WAR:1.0.3", accept( node, "com.example.test:testArtifact:WAR:1.0.3" ) );
118         assertFalse( "com.example.test:testArtifact:jar:SNAPSHOT", accept( node, "com.example.test:testArtifact:jar:SNAPSHOT" ) );
119 
120         assertFalse( "*:*:war:*", accept( node, "*:*:war:*" ) );
121         assertFalse( "OTHER.GROUP.ID", accept( node, "OTHER.GROUP.ID" ) );
122     }
123 
124     @Test
125     public void acceptTestMoreToken()
126     {
127         NodeBuilder builder = new NodeBuilder();
128         builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
129 
130         DependencyNode node = builder.build();
131         assertFalse( "com.example.test:testArtifact:jar:1.0.3:foo", accept( node, "com.example.test:testArtifact:jar:1.0.3:foo" ) );
132     }
133 
134     @Test
135     public void acceptTestRange()
136     {
137         NodeBuilder builder = new NodeBuilder();
138         builder.groupId( "com.example.test" ).artifactId( "testArtifact" ).ext( "jar" ).version( "1.0.3" );
139         DependencyNode node = builder.build();
140 
141         String prefix = "com.example.test:testArtifact:jar:";
142 
143         assertTrue( prefix + "[1.0.3,1.0.4)", acceptVersionRange( node, prefix + "[1.0.3,1.0.4)" ) );
144         assertTrue( prefix + "[1.0.3,)", acceptVersionRange( node, prefix + "[1.0.3,)" ) );
145         assertTrue( prefix + "[1.0.3,]", acceptVersionRange( node, prefix + "[1.0.3,]" ) );
146         assertTrue( prefix + "(,1.0.3]", acceptVersionRange( node, prefix + "(,1.0.3]" ) );
147         assertTrue( prefix + "[1.0,]", acceptVersionRange( node, prefix + "[1.0,]" ) );
148         assertTrue( prefix + "[1,4]", acceptVersionRange( node, prefix + "[1,4]" ) );
149         assertTrue( prefix + "(1,4)", acceptVersionRange( node, prefix + "(1,4)" ) );
150 
151         assertTrue( prefix + "(1.0.2,1.0.3]", acceptVersionRange( node, prefix + "(1.0.2,1.0.3]", prefix + "(1.1,)" ) );
152 
153         assertFalse( prefix + "(1.0.3,2.0]", acceptVersionRange( node, prefix + "(1.0.3,2.0]" ) );
154         assertFalse( prefix + "(1,1.0.2]", acceptVersionRange( node, prefix + "(1,1.0.2]" ) );
155 
156         assertFalse( prefix + "(1.0.2,1.0.3)", acceptVersionRange( node, prefix + "(1.0.2,1.0.3)", prefix + "(1.0.3,)" ) );
157     }
158 
159     public boolean accept( DependencyNode node, String expression )
160     {
161         return new PatternInclusionsDependencyFilter( expression ).accept( node, new LinkedList<DependencyNode>() );
162     }
163 
164     public boolean acceptVersionRange( DependencyNode node, String... expression )
165     {
166         return new PatternInclusionsDependencyFilter( new GenericVersionScheme(), expression ).accept( node,
167                                                                                                        new LinkedList<DependencyNode>() );
168     }
169 
170 }