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