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