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.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   * Tests for ReleaseUtil methods
36   */
37  public class ReleaseUtilTest
38  {
39      /**
40       * MRELEASE-273 : Tests if there no pom passed as parameter
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      * MRELEASE-663
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 }