1 package com.simpligility.maven.plugins.android.phase01generatesources;
2
3 import com.simpligility.maven.plugins.android.AbstractAndroidMojo;
4 import com.simpligility.maven.plugins.android.phase01generatesources.GenerateSourcesMojo;
5
6 import org.apache.maven.artifact.Artifact;
7 import org.apache.maven.plugin.MojoExecutionException;
8 import org.apache.maven.project.MavenProject;
9 import org.easymock.EasyMock;
10 import org.easymock.IAnswer;
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.junit.runner.RunWith;
14 import org.powermock.api.easymock.PowerMock;
15 import org.powermock.core.classloader.annotations.PrepareForTest;
16 import org.powermock.modules.junit4.PowerMockRunner;
17 import org.powermock.reflect.Whitebox;
18
19 import java.io.File;
20 import java.lang.reflect.Method;
21 import java.util.HashMap;
22 import java.util.HashSet;
23 import java.util.Map;
24 import java.util.Set;
25
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29
30
31
32
33
34
35
36 @RunWith( PowerMockRunner.class )
37 @PrepareForTest( GenerateSourcesMojo.class )
38 public class GetPackageCompareMapTest
39 {
40 public static final String PROJECT_ARTIFACT_ID = "main_application";
41 public static final String PROJECT_PACKAGE_NAME = "com.jayway.maven.application";
42 public static final String COM_JAYWAY_MAVEN_LIBRARY_PACKAGE = "com.jayway.maven.library";
43 public static final String COM_JAYWAY_MAVEN_LIBRARY2_PACKAGE = "com.jayway.maven.library2";
44 public static final String COM_JAYWAY_MAVEN_LIBRARY3_PACKAGE = "com.jayway.maven.library3";
45 public static final Artifact LIBRARY1_ARTIFACT = createArtifact("library1");
46 public static final Artifact LIBRARY2_ARTIFACT = createArtifact("library2");
47 public static final Artifact LIBRARY3_ARTIFACT = createArtifact("library3");
48 public static final Map<Artifact, String > TEST_DATA_1 = new HashMap<Artifact, String>()
49 {
50 {
51 put( LIBRARY1_ARTIFACT, COM_JAYWAY_MAVEN_LIBRARY_PACKAGE );
52 put( LIBRARY2_ARTIFACT, PROJECT_PACKAGE_NAME );
53 put( LIBRARY3_ARTIFACT, COM_JAYWAY_MAVEN_LIBRARY_PACKAGE );
54 }
55 };
56 public static final Map<Artifact, String > TEST_DATA_2 = new HashMap<Artifact, String>()
57 {
58 {
59 put( LIBRARY1_ARTIFACT, COM_JAYWAY_MAVEN_LIBRARY_PACKAGE );
60 put( LIBRARY2_ARTIFACT, COM_JAYWAY_MAVEN_LIBRARY2_PACKAGE );
61 put( LIBRARY3_ARTIFACT, COM_JAYWAY_MAVEN_LIBRARY3_PACKAGE );
62 }
63 };
64
65 private MavenProject project;
66 private Artifact projectArtifact;
67 private GenerateSourcesMojo mojo;
68
69 @Before
70 public void setUp() throws Exception {
71
72 mojo = PowerMock.createPartialMock( GenerateSourcesMojo.class,
73 "extractPackageNameFromAndroidManifest",
74 "extractPackageNameFromAndroidArtifact" );
75
76 setUpMainProject();
77 Whitebox.setInternalState(mojo, "project", project);
78
79 Method extractPackageNameFromAndroidManifestMethod = Whitebox.getMethod(
80 AbstractAndroidMojo.class,
81 "extractPackageNameFromAndroidManifest",
82 File.class
83 );
84 PowerMock.expectPrivate(
85 mojo,
86 extractPackageNameFromAndroidManifestMethod,
87 EasyMock.anyObject( File.class )
88 ).andReturn(PROJECT_PACKAGE_NAME).once();
89 }
90
91 @Test(expected = IllegalArgumentException.class)
92 public void testNoDependencies() throws MojoExecutionException
93 {
94 PowerMock.replay( mojo );
95
96 mojo.getPackageCompareMap(null);
97 }
98
99 @Test
100 public void testEmptyDependencies() throws MojoExecutionException
101 {
102 PowerMock.replay( mojo );
103
104 Map<String, Set<Artifact>> map = mojo.getPackageCompareMap( new HashSet<Artifact>() );
105 assertNotNull( map );
106 assertEquals( 1, map.size() );
107 assertTrue( map.containsKey( PROJECT_PACKAGE_NAME ) );
108
109 Set<Artifact> artifactSet = map.get( PROJECT_PACKAGE_NAME );
110 assertEquals( 1, artifactSet.size() );
111 assertTrue( artifactSet.contains( projectArtifact ) );
112 }
113
114 @Test
115 public void testData1() throws Exception
116 {
117 mockExtractPackageNameFromArtifactMethod( TEST_DATA_1 );
118 PowerMock.replay( mojo );
119
120 Map<String, Set<Artifact>> map = mojo.getPackageCompareMap( TEST_DATA_1.keySet() );
121 assertNotNull( map );
122 assertEquals( 2, map.size() );
123 assertTrue( map.containsKey( PROJECT_PACKAGE_NAME ) );
124 assertTrue( map.containsKey( COM_JAYWAY_MAVEN_LIBRARY_PACKAGE ) );
125
126 Set<Artifact> artifactSet1 = map.get( PROJECT_PACKAGE_NAME );
127 assertEquals( 2, artifactSet1.size() );
128 assertTrue( artifactSet1.contains( LIBRARY2_ARTIFACT ) );
129 assertTrue( artifactSet1.contains( projectArtifact ) );
130
131 Set<Artifact> artifactSet2 = map.get( COM_JAYWAY_MAVEN_LIBRARY_PACKAGE );
132 assertEquals( 2, artifactSet2.size() );
133 assertTrue( artifactSet2.contains( LIBRARY1_ARTIFACT ) );
134 assertTrue( artifactSet2.contains( LIBRARY3_ARTIFACT ) );
135
136 PowerMock.verify( mojo );
137 EasyMock.verify( project, projectArtifact );
138 }
139
140 @Test
141 public void testData2() throws Exception
142 {
143 mockExtractPackageNameFromArtifactMethod( TEST_DATA_2 );
144 PowerMock.replay( mojo );
145
146 Map<String, Set<Artifact>> map = mojo.getPackageCompareMap( TEST_DATA_2.keySet() );
147 assertNotNull( map );
148 assertEquals( 4, map.size() );
149 assertTrue( map.containsKey( PROJECT_PACKAGE_NAME ) );
150
151 Set<Artifact> artifactSet1 = map.get( PROJECT_PACKAGE_NAME );
152 assertEquals( 1, artifactSet1.size() );
153 assertTrue( artifactSet1.contains( projectArtifact ) );
154
155 Set<Artifact> artifactSet2 = map.get( COM_JAYWAY_MAVEN_LIBRARY_PACKAGE );
156 assertEquals( 1, artifactSet2.size() );
157 assertTrue( artifactSet2.contains( LIBRARY1_ARTIFACT ) );
158
159 Set<Artifact> artifactSet3 = map.get( COM_JAYWAY_MAVEN_LIBRARY2_PACKAGE );
160 assertEquals( 1, artifactSet3.size() );
161 assertTrue( artifactSet3.contains( LIBRARY2_ARTIFACT ) );
162
163 Set<Artifact> artifactSet4 = map.get( COM_JAYWAY_MAVEN_LIBRARY3_PACKAGE );
164 assertEquals( 1, artifactSet4.size() );
165 assertTrue( artifactSet4.contains( LIBRARY3_ARTIFACT ) );
166
167 PowerMock.verify( mojo );
168 EasyMock.verify( project, projectArtifact );
169
170 }
171
172 private void setUpMainProject()
173 {
174 projectArtifact = EasyMock.createMock( Artifact.class );
175 EasyMock.expect( projectArtifact.getArtifactId() ).andReturn( PROJECT_ARTIFACT_ID ).anyTimes();
176 EasyMock.replay( projectArtifact );
177
178 project = EasyMock.createNiceMock( MavenProject.class );
179 EasyMock.expect( project.getArtifact() ).andReturn( projectArtifact );
180 EasyMock.replay( project );
181 }
182
183 private void mockExtractPackageNameFromArtifactMethod( final Map<Artifact, String> testData ) throws Exception
184 {
185 Method extractPackageNameFromAndroidArtifact = Whitebox.getMethod(
186 AbstractAndroidMojo.class,
187 "extractPackageNameFromAndroidArtifact",
188 Artifact.class
189 );
190 PowerMock.expectPrivate(
191 mojo,
192 extractPackageNameFromAndroidArtifact,
193 EasyMock.anyObject( Artifact.class )
194 ).andAnswer(new IAnswer<String>() {
195 @Override
196 public String answer() throws Throwable {
197 final Object[] args = EasyMock.getCurrentArguments();
198 final Artifact inputArtifact = (Artifact)args[0];
199 return testData.get(inputArtifact);
200 }
201 }).anyTimes();
202 }
203
204 private static Artifact createArtifact( String artifactId )
205 {
206 Artifact artifactMock = EasyMock.createMock( Artifact.class );
207 EasyMock.expect( artifactMock.getArtifactId() ).andReturn( artifactId ).anyTimes();
208 EasyMock.replay( artifactMock );
209 return artifactMock;
210 }
211 }