View Javadoc
1   package org.apache.maven.shared.artifact.filter.resolve.transform;
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.assertFalse;
23  import static org.junit.Assert.assertTrue;
24  
25  import java.util.Arrays;
26  import java.util.Collections;
27  import java.util.List;
28  
29  import org.apache.maven.artifact.Artifact;
30  import org.apache.maven.artifact.ArtifactUtils;
31  import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
32  import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
33  import org.apache.maven.plugin.testing.ArtifactStubFactory;
34  import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter;
35  import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;
36  import org.apache.maven.shared.artifact.filter.resolve.AbstractFilter;
37  import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
38  import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter;
39  import org.apache.maven.shared.artifact.filter.resolve.Node;
40  import org.apache.maven.shared.artifact.filter.resolve.OrFilter;
41  import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
42  import org.apache.maven.shared.artifact.filter.resolve.PatternInclusionsFilter;
43  import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
44  import org.junit.Before;
45  import org.junit.Test;
46  
47  public class ArtifactIncludeFilterTransformerTest
48  {
49  
50      private ArtifactIncludeFilterTransformer transformer;
51  
52      private final ArtifactStubFactory artifactFactory = new ArtifactStubFactory();
53  
54      @Before
55      public void setUp()
56      {
57          transformer = new ArtifactIncludeFilterTransformer();
58      }
59      
60      @Test
61      public void testTransformAndFilter()
62          throws Exception
63      {
64          AndFilter filter =
65              new AndFilter(
66                             Arrays.asList( ScopeFilter.including( "compile" ),
67                                                          new ExclusionsFilter( Collections.singletonList( "x:a" ) ) ) );
68  
69          AndArtifactFilter dependencyFilter = (AndArtifactFilter) filter.transform( transformer );
70  
71          assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "compile" ) ) );
72  
73          assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "compile" ) ) );
74  
75          assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "test" ) ) );
76  
77          assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "test" ) ) );
78      }
79  
80      @Test
81      public void testTransformExclusionsFilter()
82          throws Exception
83      {
84          ExclusionsFilter filter = new ExclusionsFilter( Collections.singletonList( "x:a" ) );
85  
86          ArtifactFilter dependencyFilter = filter.transform( transformer );
87  
88          assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "compile" ) ) );
89  
90          assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "compile" ) ) );
91      }
92  
93      @Test
94      public void testTransformOrFilter()
95          throws Exception
96      {
97          OrFilter filter = new OrFilter( Arrays.asList(
98                  ScopeFilter.including( "compile" ),
99                  ScopeFilter.including( "test" ) ) );
100 
101         ArtifactFilter dependencyFilter = filter.transform( transformer );
102 
103         assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "compile" ) ) );
104 
105         assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "test" ) ) );
106 
107         assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "runtime" ) ) );
108     }
109 
110     @Test
111     public void testTransformScopeFilter()
112         throws Exception
113     {
114         ScopeFilter filter = ScopeFilter.including( Collections.singletonList( "runtime" ) );
115 
116         ArtifactFilter dependencyFilter = filter.transform( transformer );
117 
118         assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "runtime" ) ) );
119 
120         assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "compile" ) ) );
121 
122         assertFalse( dependencyFilter.include( newArtifact( "g:a:v", "test" ) ) );
123     }
124     
125     @Test
126     public void testTransformScopeFilterIncludeNullScope() throws Exception
127     {
128         ScopeFilter filter = ScopeFilter.including();
129 
130         Artifact artifact = newArtifact( "g:a:v", null );
131 
132         // default
133         assertTrue( filter.transform( transformer ).include( artifact ) );
134 
135         transformer.setIncludeNullScope( false );
136         
137         assertFalse( filter.transform( transformer ).include( artifact ) );
138     }
139 
140     @Test
141     public void testTransformPatternExclusionsFilter()
142         throws Exception
143     {
144         PatternExclusionsFilter filter = new PatternExclusionsFilter( Collections.singletonList( "x:*" ) );
145 
146         PatternExcludesArtifactFilter dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
147 
148         assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "runtime" ) ) );
149 
150         assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "runtime" ) ) );
151     }
152 
153     @Test
154     public void testTransformPatternExclusionsFilterActTransitivily()
155         throws Exception
156     {
157         PatternExclusionsFilter filter = new PatternExclusionsFilter( Collections.singletonList( "x:*" ) );
158         
159         transformer.setActTransitivelyPattern( true );
160 
161         Artifact parentArtifact = newArtifact( "x:a:v", null );
162         
163         Artifact artifact = newArtifact( "g:a:v", null );
164         
165         artifact.setDependencyTrail( Arrays.asList( parentArtifact.getId(), artifact.getId() ) );
166 
167         PatternExcludesArtifactFilter dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
168         
169         assertFalse( dependencyFilter.include( artifact ) );
170         
171         transformer.setActTransitivelyPattern( false );
172         
173         dependencyFilter = (PatternExcludesArtifactFilter) filter.transform( transformer );
174 
175         assertTrue( dependencyFilter.include( artifact ) );
176     }
177 
178     @Test
179     public void testTransformPatternInclusionsFilter()
180         throws Exception
181     {
182         PatternInclusionsFilter filter = new PatternInclusionsFilter( Collections.singletonList( "g:*" ) );
183 
184         PatternIncludesArtifactFilter dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
185 
186         assertTrue( dependencyFilter.include( newArtifact( "g:a:v", "runtime" ) ) );
187 
188         assertFalse( dependencyFilter.include( newArtifact( "x:a:v", "runtime" ) ) );
189     }
190     
191     @Test
192     public void testTransformPatternInclusionsFilterActTransitivily()
193         throws Exception
194     {
195         PatternInclusionsFilter filter = new PatternInclusionsFilter( Collections.singletonList( "x:*" ) );
196 
197         transformer.setActTransitivelyPattern( true );
198         
199         Artifact parentArtifact = newArtifact( "x:a:v", null );
200         
201         Artifact artifact = newArtifact( "g:a:v", null );
202         
203         artifact.setDependencyTrail( Arrays.asList( parentArtifact.getId(), artifact.getId() ) );
204         
205         PatternIncludesArtifactFilter dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
206 
207         assertTrue( dependencyFilter.include( artifact ) );
208         
209         transformer.setActTransitivelyPattern( false );
210         
211         dependencyFilter = (PatternIncludesArtifactFilter) filter.transform( transformer );
212 
213         assertFalse( dependencyFilter.include( artifact ) );
214     }
215     
216     @Test
217     public void testTransformAbstractFilter() throws Exception
218     {
219         AbstractFilter snapshotFilter = new AbstractFilter()
220         {
221             @Override
222             public boolean accept( Node node, List<Node> parents )
223             {
224                 return ArtifactUtils.isSnapshot( node.getDependency().getVersion() );
225             }
226         };
227         
228         ArtifactFilter dependencyFilter = snapshotFilter.transform( transformer );
229         
230         assertTrue( dependencyFilter.include( newArtifact( "g:a:1.0-SNAPSHOT", "compile" ) ) );
231 
232         assertFalse( dependencyFilter.include( newArtifact( "g:a:1.0", "compile" ) ) );
233     }
234 
235     private Artifact newArtifact( String coor, String scope )
236         throws Exception
237     {
238         String[] gav = coor.split( ":" );
239         return artifactFactory.createArtifact( gav[0], gav[1], gav[2], scope );
240     }
241 
242 }