1 package com.simpligility.maven.plugins.android; 2 3 import java.util.Collection; 4 import java.util.LinkedHashSet; 5 6 import org.apache.maven.artifact.Artifact; 7 import org.junit.Test; 8 9 import static java.util.Arrays.asList; 10 import static java.util.Collections.emptySet; 11 import static java.util.Collections.singleton; 12 13 import static com.simpligility.maven.plugins.android.InclusionExclusionResolver.filterArtifacts; 14 import static org.easymock.EasyMock.createMock; 15 import static org.easymock.EasyMock.expect; 16 import static org.easymock.EasyMock.replay; 17 import static org.junit.Assert.assertEquals; 18 19 public class InclusionExclusionResolverTest 20 { 21 22 private static final Artifact A1 = artifact( "jar", "G1", "A1", "1.0" ); 23 private static final Artifact A2 = artifact( "jar", "G2", "A1", "1.0" ); 24 private static final Artifact A3 = artifact( "aar", "G1", "A2", "1.0" ); 25 private static final Artifact A4 = artifact( "jar", "G1", "A3", "2.0-rc" ); 26 private static final Artifact A5 = artifact( "aar", "G2", "A2", "2.0-rc" ); 27 28 private static final Collection< Artifact > ALL = collect( A1, A2, A3, A4, A5 ); 29 private static final Collection< Artifact > NONE = emptySet(); 30 31 @Test 32 public void testSkipDependenciesFalse() 33 { 34 assertEquals( 35 "No artifacts must be skiped", 36 ALL, 37 filterArtifacts( ALL, false, null, null, null, null ) 38 ); 39 } 40 41 @Test 42 public void testSkipDependenciesTrue() 43 { 44 assertEquals( 45 "All artifacts must be skipped", 46 NONE, 47 filterArtifacts( ALL, true, null, null, null, null ) 48 ); 49 } 50 51 @Test 52 public void testSkipDependenciesIncludeTypes() 53 { 54 assertEquals( 55 "All artifacts must be skipped, but AAR artifacts have higher priority", 56 collect( A3, A5 ), 57 filterArtifacts( ALL, true, singleton( "aar" ), null, null, null ) 58 ); 59 assertEquals( 60 "All artifacts must be skipped, but JAR artifacts have higher priority", 61 collect( A1, A2, A4 ), 62 filterArtifacts( ALL, true, singleton( "jar" ), null, null, null ) 63 ); 64 assertEquals( 65 "No artifacts must be skipped", 66 ALL, 67 filterArtifacts( ALL, false, singleton( "aar" ), null, null, null ) 68 ); 69 assertEquals( 70 "No artifacts must be skipped", 71 ALL, 72 filterArtifacts( ALL, false, singleton( "jar" ), null, null, null ) 73 ); 74 } 75 76 @Test 77 public void testSkipDependenciesExcludeTypes() 78 { 79 assertEquals( 80 "All artifacts must be skipped, especially AAR artifacts", 81 NONE, 82 filterArtifacts(ALL, true, null, singleton( "aar" ), null, null ) 83 ); 84 assertEquals( 85 "All artifacts must be skipped, especially JAR artifacts", 86 NONE, 87 filterArtifacts( ALL, true, null, singleton( "jar" ), null, null ) 88 ); 89 assertEquals( 90 "AAR artifacts must be skipped", 91 collect( A1, A2, A4 ), 92 filterArtifacts( ALL, false, null, singleton( "aar" ), null, null ) 93 ); 94 assertEquals( 95 "JAR artifacts must be skipped", 96 collect( A3, A5 ), 97 filterArtifacts( ALL, false, null, singleton( "jar" ), null, null ) 98 ); 99 assertEquals( 100 "All artifacts must be skipped, especially both JAR and AAR artifacts", 101 NONE, 102 filterArtifacts( ALL, false, null, asList( "aar", "jar" ), null, null ) 103 ); 104 } 105 106 @Test 107 public void testMatchingArtifactTypesIncludeExcludePriority() 108 { 109 assertEquals( 110 "Include must have higher priority", 111 ALL, 112 filterArtifacts( ALL, false, singleton( "jar" ), singleton( "jar" ), null, null ) 113 ); 114 assertEquals( 115 "Include must have higher priority", 116 collect( A1, A2, A4 ), 117 filterArtifacts( ALL, false, singleton( "jar" ), asList("aar", "jar"), null, null ) 118 ); 119 assertEquals( 120 "Include must have higher priority", 121 collect( A1, A2, A4 ), 122 filterArtifacts( ALL, true, singleton( "jar" ), singleton( "jar" ), null, null ) 123 ); 124 assertEquals( 125 "Include must have higher priority", 126 collect( A1, A2, A4 ), 127 filterArtifacts( ALL, true, singleton( "jar" ), asList( "aar", "jar" ), null, null ) 128 ); 129 } 130 131 @Test 132 public void testIncludeExcludeByQualifiers() 133 { 134 assertEquals( 135 "Empty exclude must do nothing", 136 ALL, 137 filterArtifacts( ALL, false, null, null, null, singleton( "" ) ) 138 ); 139 assertEquals( 140 "Empty include must do nothing", 141 NONE, 142 filterArtifacts( ALL, true, null, null, singleton( "" ), null ) 143 ); 144 assertEquals( 145 "Skip all and must include all of group G2", 146 collect( A2, A5 ), 147 filterArtifacts( ALL, true, null, null, singleton( "G2" ), null ) 148 ); 149 assertEquals( 150 "Skip all and must include all of group G2 and artifact A2", 151 collect( A5 ), 152 filterArtifacts( ALL, true, null, null, singleton( "G2:A2" ), null ) 153 ); 154 assertEquals( 155 "Do not skip and must exclude group G2", 156 collect( A1, A3, A4 ), 157 filterArtifacts( ALL, false, null, null, null, singleton( "G2" ) ) 158 ); 159 assertEquals( 160 "Do not skip and must exclude group G2 and artifact A2", 161 collect( A1, A2, A3, A4 ), 162 filterArtifacts(ALL, false, null, null, null, singleton( "G2:A2" ) ) 163 ); 164 assertEquals( 165 "Do not skip and must exclude group G2 and artifact A2 with invalid version", 166 ALL, 167 filterArtifacts( ALL, false, null, null, null, singleton( "G2:A2:-" ) ) 168 ); 169 assertEquals( 170 "Do not skip and must exclude group G2 and artifact A2 with valid version", 171 collect( A1, A2, A3, A4 ), 172 filterArtifacts( ALL, false, null, null, null, singleton( "G2:A2:2.0-rc" ) ) 173 ); 174 } 175 176 @Test 177 public void testIncludeExcludeTypeQualifierIntersections() 178 { 179 assertEquals( 180 "Exclude all JARs but include by artifact qualifiers", 181 collect( A2, A3, A4, A5 ), 182 filterArtifacts( ALL, false, null, singleton( "jar" ), asList( "G2:A1", "G1:A3" ), null ) 183 ); 184 assertEquals( 185 "Exclude all JARs but include by artifact qualifiers", 186 collect(A2, A3, A4, A5), 187 filterArtifacts( ALL, false, null, singleton( "jar" ), asList( "G2:A1", "G1:A3" ), asList( "G2:A1", "G1:A3" ) ) 188 ); 189 assertEquals( 190 "Skip all but must include all AAR files despite the concrete artifact exclusion", 191 collect( A3, A5 ), 192 filterArtifacts( ALL, true, singleton("aar"), null, null, singleton("G2:A2:2.0-rc")) 193 ); 194 } 195 196 @Test( expected = IllegalArgumentException.class ) 197 public void testIllegalQualifier() 198 { 199 filterArtifacts( ALL, false, null, null, singleton( "G1:A1:V:X" ), null ); 200 } 201 202 private static Collection<Artifact> collect( Artifact... artifacts ) 203 { 204 return new LinkedHashSet< Artifact >( asList( artifacts ) ); 205 } 206 207 private static Artifact artifact( String type, String groupId, String artifactId, String version ) 208 { 209 final Artifact artifact = createMock( Artifact.class ); 210 expect( artifact.getType() ).andReturn( type ).anyTimes(); 211 expect( artifact.getGroupId() ).andReturn( groupId ).anyTimes(); 212 expect( artifact.getArtifactId() ).andReturn( artifactId ).anyTimes(); 213 expect( artifact.getVersion() ).andReturn(version).anyTimes(); 214 replay(artifact); 215 return artifact; 216 } 217 218 }