View Javadoc
1   package org.apache.maven.shared.release.util;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * Tests for ReleaseUtil methods
37   */
38  public class ReleaseUtilTest
39  {
40      /**
41       * MRELEASE-273 : Tests if there no pom passed as parameter
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         // finish with slash
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         // finish with slash
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         // finish with slash
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      * MRELEASE-663
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 }