View Javadoc

1   package org.apache.maven.shared.release.config;
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 junit.framework.TestCase;
23  import org.apache.maven.model.Scm;
24  import org.apache.maven.shared.release.phase.AbstractReleaseTestCase;
25  
26  import java.io.File;
27  import java.io.IOException;
28  
29  /**
30   * ReleaseDescriptor Tester.
31   *
32   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
33   */
34  public class ReleaseUtilsTest
35      extends TestCase
36  {
37      public void testMergeConfigurationSourceEmpty() 
38          throws IOException
39      {
40          ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
41          ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
42          ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
43          ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
44  
45          assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
46      }
47  
48      public void testMergeEqualsWithUpdateWorkingCopyTrue() 
49          throws IOException
50      {
51          ReleaseDescriptor mergeDescriptor = createReleaseDescriptor();
52          ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
53          
54          ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
55          ReleaseDescriptor mergedMergeDescriptor = ReleaseUtils.merge( mergeDescriptor, releaseDescriptor );
56  
57          assertEquals( "Check merge", mergedReleaseDescriptor, mergedMergeDescriptor );
58      }
59  
60      public void testMergeConfigurationDestEmpty() 
61          throws IOException
62      {
63          ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
64          ReleaseDescriptor mergedReleaseDescriptor = ReleaseUtils.merge( releaseDescriptor, new ReleaseDescriptor() );
65          ReleaseDescriptor expectedDescriptor = copyReleaseDescriptor( mergedReleaseDescriptor );
66  
67          assertEquals( "Check merge", expectedDescriptor, releaseDescriptor );
68      }
69  
70      public void testMergeConfiguration() 
71          throws IOException
72      {
73          File workingDirectory = new File( "." );
74  
75          ReleaseDescriptor mergeDescriptor =
76              createMergeDescriptor( AbstractReleaseTestCase.getPath( workingDirectory ), "completed-phase-merge" );
77  
78          ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
79          releaseDescriptor = ReleaseUtils.merge( releaseDescriptor, mergeDescriptor );
80  
81          ReleaseDescriptor expected =
82              createMergeDescriptor( releaseDescriptor.getWorkingDirectory(), releaseDescriptor.getCompletedPhase() );
83          assertEquals( "Check merge", expected, releaseDescriptor );
84      }
85  
86      public void testEquals() 
87          throws IOException
88      {
89          ReleaseDescriptor originalReleaseDescriptor = createReleaseDescriptor();
90          ReleaseDescriptor releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
91          doEqualsAssertions( releaseDescriptor, originalReleaseDescriptor, "other", new File( "f" ) );
92          originalReleaseDescriptor = createReleaseDescriptor();
93          releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
94          doEqualsAssertions( originalReleaseDescriptor, releaseDescriptor, "other", new File( "f" ) );
95  
96          originalReleaseDescriptor = createReleaseDescriptor();
97          releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
98          doEqualsAssertions( releaseDescriptor, originalReleaseDescriptor, null, null );
99          originalReleaseDescriptor = createReleaseDescriptor();
100         releaseDescriptor = copyReleaseDescriptor( originalReleaseDescriptor );
101         doEqualsAssertions( originalReleaseDescriptor, releaseDescriptor, null, null );
102 
103         assertEquals( "test ==", releaseDescriptor, releaseDescriptor );
104         Object obj = this;
105         assertFalse( "test class instance", releaseDescriptor.equals( obj ) );
106     }
107 
108     private static void doEqualsAssertions( ReleaseDescriptor releaseDescriptor,
109                                             ReleaseDescriptor originalReleaseDescriptor, String other, File otherFile ) 
110         throws IOException
111     {
112         ReleaseDescriptor origConfig = originalReleaseDescriptor;
113         ReleaseDescriptor config = releaseDescriptor;
114         assertEquals( "Check original comparison", config, origConfig );
115 
116         config.setScmSourceUrl( other );
117         assertFalse( "Check original comparison", config.equals( origConfig ) );
118         config.setScmSourceUrl( origConfig.getScmSourceUrl() );
119 
120         config.setAdditionalArguments( other );
121         assertFalse( "Check original comparison", config.equals( origConfig ) );
122         config.setAdditionalArguments( origConfig.getAdditionalArguments() );
123 
124         config.setAddSchema( !origConfig.isAddSchema() );
125         assertFalse( "Check original comparison", config.equals( origConfig ) );
126         config.setAddSchema( origConfig.isAddSchema() );
127 
128         config.setGenerateReleasePoms( !origConfig.isAddSchema() );
129         assertFalse( "Check original comparison", config.equals( origConfig ) );
130         config.setGenerateReleasePoms( origConfig.isGenerateReleasePoms() );
131 
132         config.setScmUseEditMode( !origConfig.isScmUseEditMode() );
133         assertFalse( "Check original comparison", config.equals( origConfig ) );
134         config.setScmUseEditMode( origConfig.isScmUseEditMode() );
135 
136         config.setInteractive( !origConfig.isInteractive() );
137         assertFalse( "Check original comparison", config.equals( origConfig ) );
138         config.setInteractive( origConfig.isInteractive() );
139 
140         config.setCommitByProject( !origConfig.isCommitByProject() );
141         assertFalse( "Check original comparison", config.equals( origConfig ) );
142         config.setCommitByProject( origConfig.isCommitByProject() );
143 
144         config.setCompletedPhase( other );
145         assertFalse( "Check original comparison", config.equals( origConfig ) );
146         config.setCompletedPhase( origConfig.getCompletedPhase() );
147         
148         config.setScmPrivateKeyPassPhrase( other );
149         assertFalse( "Check original comparison", config.equals( origConfig ) );
150         config.setScmPrivateKeyPassPhrase( origConfig.getScmPrivateKeyPassPhrase() );
151 
152         config.setScmPassword( other );
153         assertFalse( "Check original comparison", config.equals( origConfig ) );
154         config.setScmPassword( origConfig.getScmPassword() );
155 
156         config.setScmUsername( other );
157         assertFalse( "Check original comparison", config.equals( origConfig ) );
158         config.setScmUsername( origConfig.getScmUsername() );
159 
160         config.setScmPrivateKey( other );
161         assertFalse( "Check original comparison", config.equals( origConfig ) );
162         config.setScmPrivateKey( origConfig.getScmPrivateKey() );
163 
164         config.setPomFileName( other );
165         assertFalse( "Check original comparison", config.equals( origConfig ) );
166         config.setPomFileName( origConfig.getPomFileName() );
167 
168         config.setPreparationGoals( other );
169         assertFalse( "Check original comparison", config.equals( origConfig ) );
170         config.setPreparationGoals( origConfig.getPreparationGoals() );
171 
172         config.setScmReleaseLabel( other );
173         assertFalse( "Check original comparison", config.equals( origConfig ) );
174         config.setScmReleaseLabel( origConfig.getScmReleaseLabel() );
175 
176         config.setScmTagBase( other );
177         assertFalse( "Check original comparison", config.equals( origConfig ) );
178         config.setScmTagBase( origConfig.getScmTagBase() );
179 
180         if ( otherFile != null )
181         {
182             config.setWorkingDirectory( AbstractReleaseTestCase.getPath( otherFile ) );
183             assertFalse( "Check original comparison", config.equals( origConfig ) );
184         }
185 
186         config.setWorkingDirectory( origConfig.getWorkingDirectory() );
187 
188         // sanity check the test was resetting correctly
189         assertEquals( "Check original comparison", config, origConfig );
190 
191         config.mapDevelopmentVersion( "groupId:artifactId", "1.0-SNAPSHOT" );
192         assertFalse( "Check original comparison", config.equals( origConfig ) );
193         config = copyReleaseDescriptor( origConfig );
194 
195         config.mapReleaseVersion( "groupId:artifactId", "1.0" );
196         assertFalse( "Check original comparison", config.equals( origConfig ) );
197         config = copyReleaseDescriptor( origConfig );
198 
199         config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
200         assertFalse( "Check original comparison", config.equals( origConfig ) );
201         config = copyReleaseDescriptor( origConfig );
202 
203         config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
204         origConfig.mapOriginalScmInfo( "foo", new Scm() );
205         assertFalse( "Check original comparison", config.equals( origConfig ) );
206         origConfig = createReleaseDescriptor();
207         config = copyReleaseDescriptor( origConfig );
208 
209         config.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
210         origConfig.mapOriginalScmInfo( "groupId:artifactId", new Scm() );
211         assertEquals( "Check original comparison", config, origConfig );
212         origConfig = createReleaseDescriptor();
213         config = copyReleaseDescriptor( origConfig );
214 
215         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
216         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
217         assertEquals( "Check original comparison", config, origConfig );
218         origConfig = createReleaseDescriptor();
219         config = copyReleaseDescriptor( origConfig );
220 
221         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "-", "dev", "url", "tag" ) );
222         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
223         assertFalse( "Check original comparison", config.equals( origConfig ) );
224         origConfig = createReleaseDescriptor();
225         config = copyReleaseDescriptor( origConfig );
226 
227         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "-", "url", "tag" ) );
228         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
229         assertFalse( "Check original comparison", config.equals( origConfig ) );
230         origConfig = createReleaseDescriptor();
231         config = copyReleaseDescriptor( origConfig );
232 
233         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "-", "tag" ) );
234         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
235         assertFalse( "Check original comparison", config.equals( origConfig ) );
236         origConfig = createReleaseDescriptor();
237         config = copyReleaseDescriptor( origConfig );
238 
239         config.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "-" ) );
240         origConfig.mapOriginalScmInfo( "groupId:artifactId", getScm( "conn", "dev", "url", "tag" ) );
241         assertFalse( "Check original comparison", config.equals( origConfig ) );
242     }
243 
244     public void testHashCode() 
245         throws IOException
246     {
247         ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
248 
249         assertEquals( "Check hash code", releaseDescriptor.hashCode(),
250                       createReleaseDescriptor( releaseDescriptor.getWorkingDirectory() ).hashCode() );
251     }
252 
253     private static ReleaseDescriptor copyReleaseDescriptor( ReleaseDescriptor originalReleaseDescriptor )
254     {
255         return createReleaseDescriptor( originalReleaseDescriptor.getWorkingDirectory() );
256     }
257 
258     private static Scm getScm( String connection, String developerConnection, String url, String tag )
259     {
260         Scm scm = new Scm();
261         scm.setConnection( connection );
262         scm.setDeveloperConnection( developerConnection );
263         scm.setTag( tag );
264         scm.setUrl( url );
265         return scm;
266     }
267 
268     private static ReleaseDescriptor createMergeDescriptor( String workingDirectory, String completedPhase )
269     {
270         ReleaseDescriptor mergeDescriptor = new ReleaseDescriptor();
271         mergeDescriptor.setScmSourceUrl( "scm-url-merge" );
272         mergeDescriptor.setCompletedPhase( completedPhase );
273         mergeDescriptor.setScmPrivateKeyPassPhrase( "passphrase-merge" );
274         mergeDescriptor.setScmPassword( "password-merge" );
275         mergeDescriptor.setScmPrivateKey( "private-key-merge" );
276         mergeDescriptor.setScmTagBase( "tag-base-merge" );
277         mergeDescriptor.setScmReleaseLabel( "tag-merge" );
278         mergeDescriptor.setScmUsername( "username-merge" );
279         mergeDescriptor.setAdditionalArguments( "additional-arguments-merge" );
280         mergeDescriptor.setPomFileName( "pom-file-name-merge" );
281         mergeDescriptor.setPreparationGoals( "preparation-goals-merge" );
282         mergeDescriptor.setWorkingDirectory( workingDirectory );
283         return mergeDescriptor;
284     }
285 
286     private static ReleaseDescriptor createReleaseDescriptor()
287         throws IOException
288     {
289         File workingDirectory = new File( "." );
290 
291         return createReleaseDescriptor(AbstractReleaseTestCase.getPath( workingDirectory ) );
292     }
293 
294     private static ReleaseDescriptor createReleaseDescriptor( String workingDirectory )
295     {
296         ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
297         releaseDescriptor.setScmSourceUrl( "scm-url" );
298         releaseDescriptor.setCompletedPhase( "completed-phase" );
299         releaseDescriptor.setScmPrivateKeyPassPhrase( "passphrase" );
300         releaseDescriptor.setScmPassword( "password" );
301         releaseDescriptor.setScmPrivateKey( "private-key" );
302         releaseDescriptor.setScmTagBase( "tag-base" );
303         releaseDescriptor.setScmReleaseLabel( "tag" );
304         releaseDescriptor.setScmUsername( "username" );
305         releaseDescriptor.setWorkingDirectory( workingDirectory );
306         releaseDescriptor.setAdditionalArguments( "additional-arguments" );
307         releaseDescriptor.setPomFileName( "pom-file-name" );
308         releaseDescriptor.setPreparationGoals( "preparation-goals" );
309 
310         return releaseDescriptor;
311     }
312 }