1 package org.apache.maven.shared.release.config;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import junit.framework.TestCase;
23
24 import org.apache.maven.artifact.ArtifactUtils;
25 import org.apache.maven.model.Scm;
26 import org.apache.maven.shared.release.phase.AbstractReleaseTestCase;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.Map;
31 import java.util.Properties;
32
33
34
35
36
37
38 public class ReleaseUtilsTest
39 extends TestCase
40 {
41 public void testMergeConfigurationSourceEmpty()
42 throws IOException
43 {
44 ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
45 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
46 ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
47 ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
48
49 assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
50 }
51
52 public void testMergeEqualsWithUpdateWorkingCopyTrue()
53 throws IOException
54 {
55 ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
56 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
57
58 ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
59 ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
60
61 assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
62 }
63
64 public void testMergeConfigurationDestEmpty()
65 throws IOException
66 {
67 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
68 ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, new ReleaseDescriptor() );
69 ReleaseDescriptor expectedDescriptor = copyReleaseDescriptor( mergedReleaseDescriptor );
70
71 assertEquals( "Check merge", expectedDescriptor, releaseDescriptor );
72 }
73
74 public void testMergeConfiguration()
75 throws IOException
76 {
77 File workingDirectory = new File( "." );
78
79 ReleaseDescriptor mergeDescriptor =
80 createMergeDescriptor( AbstractReleaseTestCase.getPath( workingDirectory ), "completed-phase-merge" );
81
82 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
83 releaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
84
85 ReleaseDescriptor expected =
86 createMergeDescriptor( releaseDescriptor.getWorkingDirectory(), releaseDescriptor.getCompletedPhase() );
87 assertEquals( "Check merge", expected, releaseDescriptor );
88 }
89
90 public void testEquals()
91 throws IOException
92 {
93 ReleaseDescriptor originalReleaseDescriptor = createReleaseDescriptor();
94 ReleaseDescriptor releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
95 doEqualsAssertions( releaseDescriptor, originalReleaseDescriptor, "other", new File( "f" ) );
96 originalReleaseDescriptor = createReleaseDescriptor();
97 releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
98 doEqualsAssertions( originalReleaseDescriptor, releaseDescriptor, "other", new File( "f" ) );
99
100 originalReleaseDescriptor = createReleaseDescriptor();
101 releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
102 doEqualsAssertions( releaseDescriptor, originalReleaseDescriptor, null, null );
103 originalReleaseDescriptor = createReleaseDescriptor();
104 releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
105 doEqualsAssertions( originalReleaseDescriptor, releaseDescriptor, null, null );
106
107 assertEquals( "test ==", releaseDescriptor, releaseDescriptor );
108 Object obj = this;
109 assertFalse( "test class instance", releaseDescriptor.equals( obj ) );
110 }
111
112 private static void doEqualsAssertions( ReleaseDescriptor releaseDescriptor,
113 ReleaseDescriptor originalReleaseDescriptor, String other, File otherFile )
114 throws IOException
115 {
116 ReleaseDescriptor origConfig = originalReleaseDescriptor;
117 ReleaseDescriptor config = releaseDescriptor;
118 assertEquals( "Check original comparison", config, origConfig );
119
120 config.setScmSourceUrl( other );
121 assertFalse( "Check original comparison", config.equals( origConfig ) );
122 config.setScmSourceUrl( origConfig.getScmSourceUrl() );
123
124 config.setAdditionalArguments( other );
125 assertFalse( "Check original comparison", config.equals( origConfig ) );
126 config.setAdditionalArguments( origConfig.getAdditionalArguments() );
127
128 config.setAddSchema( !origConfig.isAddSchema() );
129 assertFalse( "Check original comparison", config.equals( origConfig ) );
130 config.setAddSchema( origConfig.isAddSchema() );
131
132 config.setGenerateReleasePoms( !origConfig.isAddSchema() );
133 assertFalse( "Check original comparison", config.equals( origConfig ) );
134 config.setGenerateReleasePoms( origConfig.isGenerateReleasePoms() );
135
136 config.setScmUseEditMode( !origConfig.isScmUseEditMode() );
137 assertFalse( "Check original comparison", config.equals( origConfig ) );
138 config.setScmUseEditMode( origConfig.isScmUseEditMode() );
139
140 config.setInteractive( !origConfig.isInteractive() );
141 assertFalse( "Check original comparison", config.equals( origConfig ) );
142 config.setInteractive( origConfig.isInteractive() );
143
144 config.setCommitByProject( !origConfig.isCommitByProject() );
145 assertFalse( "Check original comparison", config.equals( origConfig ) );
146 config.setCommitByProject( origConfig.isCommitByProject() );
147
148 config.setCompletedPhase( other );
149 assertFalse( "Check original comparison", config.equals( origConfig ) );
150 config.setCompletedPhase( origConfig.getCompletedPhase() );
151
152 config.setScmPrivateKeyPassPhrase( other );
153 assertFalse( "Check original comparison", config.equals( origConfig ) );
154 config.setScmPrivateKeyPassPhrase( origConfig.getScmPrivateKeyPassPhrase() );
155
156 config.setScmPassword( other );
157 assertFalse( "Check original comparison", config.equals( origConfig ) );
158 config.setScmPassword( origConfig.getScmPassword() );
159
160 config.setScmUsername( other );
161 assertFalse( "Check original comparison", config.equals( origConfig ) );
162 config.setScmUsername( origConfig.getScmUsername() );
163
164 config.setScmPrivateKey( other );
165 assertFalse( "Check original comparison", config.equals( origConfig ) );
166 config.setScmPrivateKey( origConfig.getScmPrivateKey() );
167
168 config.setPomFileName( other );
169 assertFalse( "Check original comparison", config.equals( origConfig ) );
170 config.setPomFileName( origConfig.getPomFileName() );
171
172 config.setPreparationGoals( other );
173 assertFalse( "Check original comparison", config.equals( origConfig ) );
174 config.setPreparationGoals( origConfig.getPreparationGoals() );
175
176 config.setScmReleaseLabel( other );
177 assertFalse( "Check original comparison", config.equals( origConfig ) );
178 config.setScmReleaseLabel( origConfig.getScmReleaseLabel() );
179
180 config.setScmTagBase( other );
181 assertFalse( "Check original comparison", config.equals( origConfig ) );
182 config.setScmTagBase( origConfig.getScmTagBase() );
183
184 if ( otherFile != null )
185 {
186 config.setWorkingDirectory( AbstractReleaseTestCase.getPath( otherFile ) );
187 assertFalse( "Check original comparison", config.equals( origConfig ) );
188 }
189
190 config.setWorkingDirectory( origConfig.getWorkingDirectory() );
191
192
193 assertEquals( "Check original comparison", config, origConfig );
194
195 config.mapDevelopmentVersion( "groupId:artifactId", "1.0-SNAPSHOT" );
196 assertFalse( "Check original comparison", config.equals( origConfig ) );
197 config = copyReleaseDescriptor( origConfig );
198
199 config.mapReleaseVersion( "groupId:artifactId", "1.0" );
200 assertFalse( "Check original comparison", config.equals( origConfig ) );
201 config = copyReleaseDescriptor( origConfig );
202
203 config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
204 assertFalse( "Check original comparison", config.equals( origConfig ) );
205 config = copyReleaseDescriptor( origConfig );
206
207 config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
208 origConfig.mapOriginalScmInfo( "foo", new Scm() );
209 assertFalse( "Check original comparison", config.equals( origConfig ) );
210 origConfig = createReleaseDescriptor();
211 config = copyReleaseDescriptor( origConfig );
212
213 config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
214 origConfig.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
215 assertEquals( "Check original comparison", config, origConfig );
216 origConfig = createReleaseDescriptor();
217 config = copyReleaseDescriptor( origConfig );
218
219 config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
220 origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
221 assertEquals( "Check original comparison", config, origConfig );
222 origConfig = createReleaseDescriptor();
223 config = copyReleaseDescriptor( origConfig );
224
225 config.mapOriginalScmInfo( "groupId:artifactId", getScm( "-", "dev", "url", "tag" ) );
226 origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
227 assertFalse( "Check original comparison", config.equals( origConfig ) );
228 origConfig = createReleaseDescriptor();
229 config = copyReleaseDescriptor( origConfig );
230
231 config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "-", "url", "tag" ) );
232 origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
233 assertFalse( "Check original comparison", config.equals( origConfig ) );
234 origConfig = createReleaseDescriptor();
235 config = copyReleaseDescriptor( origConfig );
236
237 config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "-", "tag" ) );
238 origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
239 assertFalse( "Check original comparison", config.equals( origConfig ) );
240 origConfig = createReleaseDescriptor();
241 config = copyReleaseDescriptor( origConfig );
242
243 config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "-" ) );
244 origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
245 assertFalse( "Check original comparison", config.equals( origConfig ) );
246 }
247
248 public void testHashCode()
249 throws IOException
250 {
251 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
252
253 assertEquals( "Check hash code", releaseDescriptor.hashCode(),
254 createReleaseDescriptor( releaseDescriptor.getWorkingDirectory() ).hashCode() );
255 }
256
257 public void testLoadResolvedDependencies()
258 {
259 Properties properties = new Properties();
260 String dependencyKey = ArtifactUtils.versionlessKey( "com.groupId", "artifactId" );
261 properties.put( "dependency." + dependencyKey + ".release", "1.3" );
262 properties.put( "dependency." + dependencyKey + ".development", "1.3-SNAPSHOT" );
263 ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
264
265 Map<String, String> versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( dependencyKey );
266 assertEquals( "1.3", versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
267 assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
268 }
269
270
271 public void testArtifactIdEndswithDependency()
272 {
273 Properties properties = new Properties();
274 String relDependencyKey = ArtifactUtils.versionlessKey( "com.release.magic", "dependency" );
275 properties.put( "dependency." + relDependencyKey + ".release", "1.3" );
276 String devDependencyKey = ArtifactUtils.versionlessKey( "com.development.magic", "dependency" );
277 properties.put( "dependency." + devDependencyKey + ".development", "1.3-SNAPSHOT" );
278 ReleaseDescriptor descriptor = ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
279
280 Map<String, String> versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( relDependencyKey );
281 assertEquals( "1.3", versionMap.get( ReleaseDescriptor.RELEASE_KEY ) );
282
283 versionMap = (Map<String, String>) descriptor.getResolvedSnapshotDependencies().get( devDependencyKey );
284 assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
285 }
286
287
288 public void testSystemPropertyStartingWithDependency()
289 {
290 Properties properties = new Properties();
291 properties.setProperty( "dependency.locations.enabled", "false" );
292 ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
293 }
294
295 private static ReleaseDescriptor copyReleaseDescriptor( ReleaseDescriptor originalReleaseDescriptor )
296 {
297 return createReleaseDescriptor( originalReleaseDescriptor.getWorkingDirectory() );
298 }
299
300 private static Scm getScm( String connection, String developerConnection, String url, String tag )
301 {
302 Scm scm = new Scm();
303 scm.setConnection( connection );
304 scm.setDeveloperConnection( developerConnection );
305 scm.setTag( tag );
306 scm.setUrl( url );
307 return scm;
308 }
309
310 private static ReleaseDescriptor createMergeDescriptor( String workingDirectory, String completedPhase )
311 {
312 ReleaseDescriptor mergeDescriptor = new ReleaseDescriptor();
313 mergeDescriptor.setScmSourceUrl( "scm-url-merge" );
314 mergeDescriptor.setCompletedPhase( completedPhase );
315 mergeDescriptor.setScmPrivateKeyPassPhrase( "passphrase-merge" );
316 mergeDescriptor.setScmPassword( "password-merge" );
317 mergeDescriptor.setScmPrivateKey( "private-key-merge" );
318 mergeDescriptor.setScmTagBase( "tag-base-merge" );
319 mergeDescriptor.setScmReleaseLabel( "tag-merge" );
320 mergeDescriptor.setScmUsername( "username-merge" );
321 mergeDescriptor.setAdditionalArguments( "additional-arguments-merge" );
322 mergeDescriptor.setPomFileName( "pom-file-name-merge" );
323 mergeDescriptor.setPreparationGoals( "preparation-goals-merge" );
324 mergeDescriptor.setWorkingDirectory( workingDirectory );
325 return mergeDescriptor;
326 }
327
328 private static ReleaseDescriptor createReleaseDescriptor()
329 throws IOException
330 {
331 File workingDirectory = new File( "." );
332
333 return createReleaseDescriptor(AbstractReleaseTestCase.getPath( workingDirectory ) );
334 }
335
336 private static ReleaseDescriptor createReleaseDescriptor( String workingDirectory )
337 {
338 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
339 releaseDescriptor.setScmSourceUrl( "scm-url" );
340 releaseDescriptor.setCompletedPhase( "completed-phase" );
341 releaseDescriptor.setScmPrivateKeyPassPhrase( "passphrase" );
342 releaseDescriptor.setScmPassword( "password" );
343 releaseDescriptor.setScmPrivateKey( "private-key" );
344 releaseDescriptor.setScmTagBase( "tag-base" );
345 releaseDescriptor.setScmReleaseLabel( "tag" );
346 releaseDescriptor.setScmUsername( "username" );
347 releaseDescriptor.setWorkingDirectory( workingDirectory );
348 releaseDescriptor.setAdditionalArguments( "additional-arguments" );
349 releaseDescriptor.setPomFileName( "pom-file-name" );
350 releaseDescriptor.setPreparationGoals( "preparation-goals" );
351
352 return releaseDescriptor;
353 }
354 }