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