1 package org.apache.maven.shared.artifact.filter.resolve.transform;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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 }