|
29 | 29 | import java.net.URLClassLoader;
|
30 | 30 | import java.util.ArrayList;
|
31 | 31 | import java.util.Arrays;
|
| 32 | +import java.util.Collection; |
32 | 33 | import java.util.LinkedHashSet;
|
33 | 34 | import java.util.List;
|
34 | 35 | import java.util.Set;
|
|
41 | 42 | import org.apache.maven.plugins.shade.ShadeRequest;
|
42 | 43 | import org.apache.maven.plugins.shade.Shader;
|
43 | 44 | import org.apache.maven.plugins.shade.filter.Filter;
|
| 45 | +import org.apache.maven.plugins.shade.filter.SimpleFilter; |
44 | 46 | import org.apache.maven.plugins.shade.relocation.Relocator;
|
45 | 47 | import org.apache.maven.plugins.shade.relocation.SimpleRelocator;
|
46 | 48 | import org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer;
|
| 49 | +import org.apache.maven.plugins.shade.resource.ManifestResourceTransformer; |
47 | 50 | import org.apache.maven.plugins.shade.resource.ResourceTransformer;
|
| 51 | +import org.apache.maven.plugins.shade.resource.ServicesResourceTransformer; |
48 | 52 | import org.apache.maven.project.MavenProject;
|
49 | 53 | import org.apache.maven.project.ProjectBuildingRequest;
|
50 | 54 | import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
|
|
60 | 64 | public class ShadeMojoTest
|
61 | 65 | extends PlexusTestCase
|
62 | 66 | {
|
| 67 | + |
| 68 | + public void testDefaultConfiguration() throws Exception |
| 69 | + { |
| 70 | + final ShadeMojo shadeMojo = new ShadeMojo(); |
| 71 | + setProject(shadeMojo); |
| 72 | + |
| 73 | + // default transformers are present |
| 74 | + final Method getResourceTransformers = ShadeMojo.class.getDeclaredMethod("getResourceTransformers"); |
| 75 | + getResourceTransformers.setAccessible(true); |
| 76 | + final List<ResourceTransformer> transformers = |
| 77 | + List.class.cast(getResourceTransformers.invoke(shadeMojo)); |
| 78 | + assertEquals(2, transformers.size()); |
| 79 | + assertTrue(ServicesResourceTransformer.class.isInstance(transformers.get(0))); |
| 80 | + assertTrue(ManifestResourceTransformer.class.isInstance(transformers.get(1))); |
| 81 | + |
| 82 | + // default exclusion is present |
| 83 | + final Method getFilters = ShadeMojo.class.getDeclaredMethod("getFilters"); |
| 84 | + getFilters.setAccessible(true); |
| 85 | + final List<Filter> filters = |
| 86 | + List.class.cast(getFilters.invoke(shadeMojo)); |
| 87 | + assertEquals(1, filters.size()); |
| 88 | + |
| 89 | + final Filter filter = filters.iterator().next(); |
| 90 | + assertTrue(SimpleFilter.class.isInstance(filter)); |
| 91 | + |
| 92 | + final Field jars = filter.getClass().getDeclaredField("jars"); |
| 93 | + jars.setAccessible(true); |
| 94 | + assertEquals(1, Collection.class.cast(jars.get(filter)).size()); |
| 95 | + |
| 96 | + final Field excludes = filter.getClass().getDeclaredField("excludes"); |
| 97 | + excludes.setAccessible(true); |
| 98 | + final Collection<String> excludesValues = Collection.class.cast(excludes.get(filter)); |
| 99 | + assertEquals(3, excludesValues.size()); |
| 100 | + for ( final String exclude : Arrays.asList( "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA" ) ) |
| 101 | + { |
| 102 | + assertTrue(exclude, excludesValues.contains(exclude) ); |
| 103 | + } |
| 104 | + |
| 105 | + final Field includes = filter.getClass().getDeclaredField("includes"); |
| 106 | + includes.setAccessible(true); |
| 107 | + assertTrue(Collection.class.cast(includes.get(filter)).isEmpty()); |
| 108 | + } |
| 109 | + |
63 | 110 | public void testShaderWithDefaultShadedPattern()
|
64 | 111 | throws Exception
|
65 | 112 | {
|
@@ -124,11 +171,45 @@ public void testShadeWithFilter()
|
124 | 171 | createSourcesJar.setAccessible( true );
|
125 | 172 | createSourcesJar.set( mojo, Boolean.TRUE );
|
126 | 173 |
|
| 174 | + // setup a project |
| 175 | + setProject(mojo); |
| 176 | + |
| 177 | + // create and configure the ArchiveFilter |
| 178 | + ArchiveFilter archiveFilter = new ArchiveFilter(); |
| 179 | + Field archiveFilterArtifact = ArchiveFilter.class.getDeclaredField( "artifact" ); |
| 180 | + archiveFilterArtifact.setAccessible( true ); |
| 181 | + archiveFilterArtifact.set( archiveFilter, "org.apache.myfaces.core:myfaces-impl" ); |
| 182 | + |
| 183 | + // add ArchiveFilter to mojo |
| 184 | + Field filtersField = ShadeMojo.class.getDeclaredField( "filters" ); |
| 185 | + filtersField.setAccessible( true ); |
| 186 | + filtersField.set( mojo, new ArchiveFilter[]{ archiveFilter } ); |
| 187 | + |
| 188 | + Field sessionField = ShadeMojo.class.getDeclaredField( "session" ); |
| 189 | + sessionField.setAccessible( true ); |
| 190 | + sessionField.set( mojo, mock( MavenSession.class ) ); |
| 191 | + |
| 192 | + // invoke getFilters() |
| 193 | + Method getFilters = ShadeMojo.class.getDeclaredMethod( "getFilters", new Class[0] ); |
| 194 | + getFilters.setAccessible( true ); |
| 195 | + List<Filter> filters = (List<Filter>) getFilters.invoke( mojo); |
| 196 | + |
| 197 | + // assertions - there must be one filter |
| 198 | + assertEquals( 2, filters.size() ); |
| 199 | + |
| 200 | + // the filter must be able to filter the binary and the sources jar |
| 201 | + Filter filter = filters.get( 1 ); // 0 is the built-in META-INF/* |
| 202 | + assertTrue( filter.canFilter( new File( "myfaces-impl-2.0.1-SNAPSHOT.jar" ) ) ); // binary jar |
| 203 | + assertTrue( filter.canFilter( new File( "myfaces-impl-2.0.1-SNAPSHOT-sources.jar" ) ) ); // sources jar |
| 204 | + } |
| 205 | + |
| 206 | + private void setProject(final ShadeMojo mojo) throws Exception |
| 207 | + { |
127 | 208 | // configure artifactResolver (mocked) for mojo
|
128 | 209 | ArtifactResolver mockArtifactResolver = new ArtifactResolver()
|
129 | 210 | {
|
130 | 211 | @Override
|
131 |
| - public ArtifactResult resolveArtifact( ProjectBuildingRequest req, final Artifact art ) |
| 212 | + public ArtifactResult resolveArtifact(ProjectBuildingRequest req, final Artifact art ) |
132 | 213 | throws ArtifactResolverException
|
133 | 214 | {
|
134 | 215 | return new ArtifactResult()
|
@@ -185,34 +266,6 @@ public Artifact getArtifact()
|
185 | 266 | Field projectField = ShadeMojo.class.getDeclaredField( "project" );
|
186 | 267 | projectField.setAccessible( true );
|
187 | 268 | projectField.set( mojo, project );
|
188 |
| - |
189 |
| - // create and configure the ArchiveFilter |
190 |
| - ArchiveFilter archiveFilter = new ArchiveFilter(); |
191 |
| - Field archiveFilterArtifact = ArchiveFilter.class.getDeclaredField( "artifact" ); |
192 |
| - archiveFilterArtifact.setAccessible( true ); |
193 |
| - archiveFilterArtifact.set( archiveFilter, "org.apache.myfaces.core:myfaces-impl" ); |
194 |
| - |
195 |
| - // add ArchiveFilter to mojo |
196 |
| - Field filtersField = ShadeMojo.class.getDeclaredField( "filters" ); |
197 |
| - filtersField.setAccessible( true ); |
198 |
| - filtersField.set( mojo, new ArchiveFilter[]{ archiveFilter } ); |
199 |
| - |
200 |
| - Field sessionField = ShadeMojo.class.getDeclaredField( "session" ); |
201 |
| - sessionField.setAccessible( true ); |
202 |
| - sessionField.set( mojo, mock( MavenSession.class ) ); |
203 |
| - |
204 |
| - // invoke getFilters() |
205 |
| - Method getFilters = ShadeMojo.class.getDeclaredMethod( "getFilters" ); |
206 |
| - getFilters.setAccessible( true ); |
207 |
| - List<Filter> filters = (List<Filter>) getFilters.invoke( mojo); |
208 |
| - |
209 |
| - // assertions - there must be one filter |
210 |
| - assertEquals( 1, filters.size() ); |
211 |
| - |
212 |
| - // the filter must be able to filter the binary and the sources jar |
213 |
| - Filter filter = filters.get( 0 ); |
214 |
| - assertTrue( filter.canFilter( new File( "myfaces-impl-2.0.1-SNAPSHOT.jar" ) ) ); // binary jar |
215 |
| - assertTrue( filter.canFilter( new File( "myfaces-impl-2.0.1-SNAPSHOT-sources.jar" ) ) ); // sources jar |
216 | 269 | }
|
217 | 270 |
|
218 | 271 | public void shaderWithPattern( String shadedPattern, File jar )
|
|
0 commit comments