1 package org.apache.maven.shared.release.util;
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.assertEquals;
23 import static org.junit.Assert.assertNull;
24 import static org.junit.Assert.assertTrue;
25 import static org.junit.Assume.*;
26
27 import java.io.File;
28 import java.util.Arrays;
29 import java.util.Collections;
30
31 import org.apache.maven.project.MavenProject;
32 import org.codehaus.plexus.util.Os;
33 import org.junit.Test;
34
35
36
37
38 public class ReleaseUtilTest
39 {
40
41
42
43 @Test
44 public void testProjectIsNull()
45 {
46 assertNull( ReleaseUtil.getReleasePom( null ) );
47 assertNull( ReleaseUtil.getStandardPom( null ) );
48 }
49
50 @Test
51 public void testGetCommonBasedirSingleProject() throws Exception
52 {
53 assertEquals( "/working/directory/flat-multi-module/project", ReleaseUtil.getCommonBasedir(
54 Collections.singletonList( createProject( "/working/directory/flat-multi-module/project" ) ), "/" ) );
55 }
56
57 @Test
58 public void testGetCommonBasedirSingleProjectWindows() throws Exception
59 {
60 assertEquals( "C:\\working\\directory\\flat-multi-module\\project", ReleaseUtil.getCommonBasedir(
61 Collections.singletonList( createProject( "C:\\working\\directory\\flat-multi-module\\project" ) ),
62 "\\" ) );
63 }
64
65 @Test
66 public void testGetCommonBasedirOfFlatMultiModule()
67 throws Exception
68 {
69 assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
70 new MavenProject[]{createProject( "/working/directory/flat-multi-module/root-project" ),
71 createProject( "/working/directory/flat-multi-module/core" ),
72 createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
73 }
74
75 @Test
76 public void testGetCommonBasedirOfFlatMultiModuleWindows()
77 throws Exception
78 {
79 assertEquals( "C:\\working\\directory\\flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
80 new MavenProject[]{createProject( "C:\\working\\directory\\flat-multi-module\\root-project" ),
81 createProject( "C:\\working\\directory\\flat-multi-module\\core" ),
82 createProject( "C:\\working\\directory\\flat-multi-module\\webapp" )} ), "\\" ) );
83 }
84
85 @Test
86 public void testGetCommonBasedirUppercaseLowerCaseWindows()
87 throws Exception
88 {
89 assertEquals( "C:\\WORKING\\root", ReleaseUtil.getCommonBasedir( Arrays.asList(
90 new MavenProject[]{createProject( "c:\\WORKING\\root", "C:\\WORKING\\root" ),
91 createProject( "c:\\working\\root\\project1", "C:\\WORKING\\root\\project1" ),
92 createProject( "C:\\WORKING\\root\\project2", "C:\\WORKING\\root\\project2" )} ), "\\" ) );
93 }
94
95 @Test
96 public void testGetCommonBasedirOfFlatMultiModuleSimilarArtifactIds()
97 throws Exception
98 {
99 assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
100 new MavenProject[]{createProject( "/working/directory/flat-multi-module/release-parent" ),
101 createProject( "/working/directory/flat-multi-module/release-module1" ),
102 createProject( "/working/directory/flat-multi-module/release-module2" )} ), "/" ) );
103 }
104
105 @Test
106 public void testGetCommonBasedirOfFlatMultiModuleSimilarArtifactIdsWindows()
107 throws Exception
108 {
109 assertEquals( "c:\\working\\directory\\flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
110 new MavenProject[]{createProject( "c:\\working\\directory\\flat-multi-module\\release-parent" ),
111 createProject( "c:\\working\\directory\\flat-multi-module\\release-module1" ),
112 createProject( "c:\\working\\directory\\flat-multi-module\\release-module2" )} ), "\\" ) );
113 }
114
115 @Test
116 public void testGetCommonBasedirOfRegularMultiModule()
117 throws Exception
118 {
119 assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
120 new MavenProject[]{createProject( "/working/directory/flat-multi-module" ),
121 createProject( "/working/directory/flat-multi-module/core" ),
122 createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
123 }
124
125 @Test
126 public void testGetCommonBasedirOfRegularMultiModuleParentNotBeeingFirstInReactor()
127 throws Exception
128 {
129 assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
130 new MavenProject[]{
131 createProject( "/working/directory/flat-multi-module/core" ),
132 createProject( "/working/directory/flat-multi-module" ),
133 createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
134 }
135
136 @Test
137 public void testGetCommonBasedirOfRegularMultiModuleWindowsPath()
138 throws Exception
139 {
140 assertEquals( "c:\\working\\directory\\flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
141 new MavenProject[]{
142 createProject( "c:\\working\\directory\\flat-multi-module\\core" ),
143 createProject( "c:\\working\\directory\\flat-multi-module" ),
144 createProject( "c:\\working\\directory\\flat-multi-module\\webapp" )} ), "\\" ) );
145 }
146
147 @Test
148 public void testGetCommonBasedirOfFlatMultiModuleWithMultipleLevels()
149 throws Exception
150 {
151 assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
152 new MavenProject[]{createProject( "/working/directory/flat-multi-module/root-project" ),
153 createProject( "/working/directory/flat-multi-module/core" ),
154 createProject( "/working/directory/flat-multi-module/common/utils" ),
155 createProject( "/working/directory/flat-multi-module/common/xml" ),
156 createProject( "/working/directory/flat-multi-module/webapp" )} ), "/" ) );
157 }
158
159 @Test
160 public void testGetCommonBasedirOfFlatMultiModuleWithDescendingHierarchy()
161 throws Exception
162 {
163 assertEquals( "/working/directory/flat-multi-module", ReleaseUtil.getCommonBasedir( Arrays.asList(
164 new MavenProject[]{createProject( "/working/directory/flat-multi-module/level/1/2/3" ),
165 createProject( "/working/directory/flat-multi-module/level/1/2" ),
166 createProject( "/working/directory/flat-multi-module/level/1" ),
167 createProject( "/working/directory/flat-multi-module/level" ),
168 createProject( "/working/directory/flat-multi-module/other" )} ), "/" ) );
169 }
170
171 @Test
172 public void testGetBaseScmUrlSingleLevel()
173 throws Exception
174 {
175 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
176 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk" ) );
177 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/",
178 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/" ) );
179 }
180
181 @Test
182 public void testGetBaseScmUrlSingleLevelDotCharacter()
183 throws Exception
184 {
185 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
186 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/." ) );
187 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/",
188 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/./" ) );
189 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/project",
190 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/./project" ) );
191 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module",
192 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/.." ) );
193 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/",
194 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/../" ) );
195 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/branches",
196 ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/../branches" ) );
197 }
198
199 @Test
200 public void testGetBaseScmUrlReturnOriginal()
201 throws Exception
202 {
203 assertEquals( "no-path-elements", ReleaseUtil.realignScmUrl( 1, "no-path-elements" ) );
204 assertEquals( "no-path-elements", ReleaseUtil.realignScmUrl( 15, "no-path-elements" ) );
205 }
206
207 @Test
208 public void testGetBaseScmUrlOfFlatMultiModule()
209 throws Exception
210 {
211 String actual =
212 ReleaseUtil.realignScmUrl( 1, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project" );
213 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk", actual );
214
215 actual = ReleaseUtil.realignScmUrl( 1, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project/" );
216 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/", actual );
217 }
218
219 @Test
220 public void testGetBaseScmUrlOfFlatMultiModuleMultipleLevels()
221 throws Exception
222 {
223 String actual =
224 ReleaseUtil.realignScmUrl( 3, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project/1/2" );
225 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk", actual );
226
227 actual =
228 ReleaseUtil.realignScmUrl( 3, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/root-project/1/2/" );
229 assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/", actual );
230 }
231
232 @Test
233 public void testGetBaseWorkingDirectoryParentCountSameDirectory()
234 {
235 String workingDirectory = "/working/directory/maven/release";
236 String basedir = "/working/directory/maven/release";
237 assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
238 }
239
240 @Test
241 public void testGetBaseWorkingDirectoryParentCountSameDirectoryDotCharacter()
242 {
243 String workingDirectory = new File( "/working/directory/maven/release/." ).getAbsolutePath();
244 assertTrue( workingDirectory.contains( "." ) );
245 String basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
246 assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
247
248
249 workingDirectory = new File( "/working/directory/maven/release/./" ).getAbsolutePath();
250 assertTrue( workingDirectory.contains( "." ) );
251 basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
252 assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
253 }
254
255 @Test
256 public void testGetBaseWorkingDirectoryParentCountSubdirectory()
257 {
258 String workingDirectory = new File( "/working/directory/maven/release" ).getAbsolutePath();
259 String basedir = new File( "/working/directory/maven/release/maven-release-manager" ).getAbsolutePath();
260 assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
261 }
262
263 @Test
264 public void testGetBaseWorkingDirectoryParentCountParentDirectory()
265 {
266 String workingDirectory =
267 new File( "/working/directory/maven/release/maven-release-manager" ).getAbsolutePath();
268 String basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
269 assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
270 }
271
272 @Test
273 public void testGetBaseWorkingDirectoryParentCountParentDirectoryDotCharacter()
274 {
275 String workingDirectory =
276 new File( "/working/directory/maven/release/maven-release-manager/." ).getAbsolutePath();
277 assertTrue( workingDirectory.contains( "." ) );
278 String basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
279 assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
280
281
282 workingDirectory = new File( "/working/directory/maven/release/maven-release-manager/./" ).getAbsolutePath();
283 assertTrue( workingDirectory.contains( "." ) );
284 basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
285 assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
286 }
287
288 @Test
289 public void testGetBaseWorkingDirectoryParentCountParentDirectoryMultiple()
290 {
291 String workingDirectory =
292 new File( "/working/directory/maven/release/maven-release-manager" ).getAbsolutePath();
293 String basedir = new File( "/working/directory" ).getAbsolutePath();
294 assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
295 }
296
297 @Test
298 public void testGetBaseWorkingDirectoryParentCountParentDirectoryMultipleDotCharacter()
299 {
300 String workingDirectory =
301 new File( "/working/directory/maven/release/maven-release-manager/./." ).getAbsolutePath();
302 assertTrue( workingDirectory.contains( "." ) );
303 String basedir = new File( "/working/directory" ).getAbsolutePath();
304 assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
305
306
307 workingDirectory = new File( "/working/directory/maven/release/maven-release-manager/././" ).getAbsolutePath();
308 assertTrue( workingDirectory.contains( "." ) );
309 basedir = new File( "/working/directory" ).getAbsolutePath();
310 assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
311 }
312
313 @Test
314 public void testGetBaseWorkingDirectoryParentCountDifferentCase()
315 {
316 String workingDirectory =
317 new File( "/Working/Directory/maven/release/maven-release-manager" ).getAbsolutePath();
318 String basedir = new File( "/working/directory" ).getAbsolutePath();
319 assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
320 }
321
322
323
324
325 @Test
326 public void testGetWindowsRootBaseWorkingDirectoryParentCountDifferentCase()
327 {
328 assumeTrue( Os.isFamily( Os.FAMILY_WINDOWS ) );
329
330 assertEquals( 2, ReleaseUtil.getBaseWorkingDirectoryParentCount( "C:", "C:\\working\\directory" ) );
331 assertEquals( 2, ReleaseUtil.getBaseWorkingDirectoryParentCount( "C:", "C:\\working\\directory\\" ) );
332 assertEquals( 2, ReleaseUtil.getBaseWorkingDirectoryParentCount( "C:\\", "C:\\working\\directory" ) );
333 assertEquals( 2, ReleaseUtil.getBaseWorkingDirectoryParentCount( "C:\\", "C:\\working\\directory\\" ) );
334 }
335
336 private static MavenProject createProject( String basedir )
337 {
338 return createProject( basedir, basedir );
339 }
340
341 private static MavenProject createProject( final String basedirPath, final String basedirCanonicalPath )
342 {
343 return new MavenProject()
344 {
345 public File getBasedir()
346 {
347 return new File( basedirPath )
348 {
349 public String getCanonicalPath()
350 {
351 return basedirCanonicalPath;
352 }
353 };
354 }
355 };
356 }
357 }