1   package org.apache.maven.artifact.versioning;
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  
24  /**
25   * Test DefaultArtifactVersion.
26   *
27   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
28   * @version $Id: DefaultArtifactVersionTest.java 688884 2008-08-25 21:11:19Z jdcasey $
29   */
30  public class DefaultArtifactVersionTest
31      extends TestCase
32  {
33      public void testVersionParsing()
34      {
35          DefaultArtifactVersion version = new DefaultArtifactVersion( "1" );
36          assertEquals( "check major version", 1, version.getMajorVersion() );
37          assertEquals( "check minor version", 0, version.getMinorVersion() );
38          assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
39          assertEquals( "check build number", 0, version.getBuildNumber() );
40          assertNull( "check qualifier", version.getQualifier() );
41  
42          version = new DefaultArtifactVersion( "1.2" );
43          assertEquals( "check major version", 1, version.getMajorVersion() );
44          assertEquals( "check minor version", 2, version.getMinorVersion() );
45          assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
46          assertEquals( "check build number", 0, version.getBuildNumber() );
47          assertNull( "check qualifier", version.getQualifier() );
48  
49          version = new DefaultArtifactVersion( "1.2.3" );
50          assertEquals( "check major version", 1, version.getMajorVersion() );
51          assertEquals( "check minor version", 2, version.getMinorVersion() );
52          assertEquals( "check incremental version", 3, version.getIncrementalVersion() );
53          assertEquals( "check build number", 0, version.getBuildNumber() );
54          assertNull( "check qualifier", version.getQualifier() );
55  
56          version = new DefaultArtifactVersion( "1.2.3-1" );
57          assertEquals( "check major version", 1, version.getMajorVersion() );
58          assertEquals( "check minor version", 2, version.getMinorVersion() );
59          assertEquals( "check incremental version", 3, version.getIncrementalVersion() );
60          assertEquals( "check build number", 1, version.getBuildNumber() );
61          assertNull( "check qualifier", version.getQualifier() );
62  
63          version = new DefaultArtifactVersion( "1.2.3-alpha-1" );
64          assertEquals( "check major version", 1, version.getMajorVersion() );
65          assertEquals( "check minor version", 2, version.getMinorVersion() );
66          assertEquals( "check incremental version", 3, version.getIncrementalVersion() );
67          assertEquals( "check build number", 0, version.getBuildNumber() );
68          assertEquals( "check qualifier", "alpha-1", version.getQualifier() );
69  
70          version = new DefaultArtifactVersion( "1.2-alpha-1" );
71          assertEquals( "check major version", 1, version.getMajorVersion() );
72          assertEquals( "check minor version", 2, version.getMinorVersion() );
73          assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
74          assertEquals( "check build number", 0, version.getBuildNumber() );
75          assertEquals( "check qualifier", "alpha-1", version.getQualifier() );
76  
77          version = new DefaultArtifactVersion( "1.2-alpha-1-20050205.060708-1" );
78          assertEquals( "check major version", 1, version.getMajorVersion() );
79          assertEquals( "check minor version", 2, version.getMinorVersion() );
80          assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
81          assertEquals( "check build number", 0, version.getBuildNumber() );
82          assertEquals( "check qualifier", "alpha-1-20050205.060708-1", version.getQualifier() );
83  
84          version = new DefaultArtifactVersion( "RELEASE" );
85          assertEquals( "check major version", 0, version.getMajorVersion() );
86          assertEquals( "check minor version", 0, version.getMinorVersion() );
87          assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
88          assertEquals( "check build number", 0, version.getBuildNumber() );
89          assertEquals( "check qualifier", "RELEASE", version.getQualifier() );
90  
91          version = new DefaultArtifactVersion( "1.0.1b" );
92          assertEquals( "check major version", 0, version.getMajorVersion() );
93          assertEquals( "check minor version", 0, version.getMinorVersion() );
94          assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
95          assertEquals( "check build number", 0, version.getBuildNumber() );
96          assertEquals( "check qualifier", "1.0.1b", version.getQualifier() );
97  
98          version = new DefaultArtifactVersion( "1.0RC2" );
99          assertEquals( "check major version", 0, version.getMajorVersion() );
100         assertEquals( "check minor version", 0, version.getMinorVersion() );
101         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
102         assertEquals( "check build number", 0, version.getBuildNumber() );
103         assertEquals( "check qualifier", "1.0RC2", version.getQualifier() );
104 
105         version = new DefaultArtifactVersion( "1.7.3.0" );
106         assertEquals( "check major version", 0, version.getMajorVersion() );
107         assertEquals( "check minor version", 0, version.getMinorVersion() );
108         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
109         assertEquals( "check build number", 0, version.getBuildNumber() );
110         assertEquals( "check qualifier", "1.7.3.0", version.getQualifier() );
111 
112         version = new DefaultArtifactVersion( "0.09" );
113         assertEquals( "check major version", 0, version.getMajorVersion() );
114         assertEquals( "check minor version", 0, version.getMinorVersion() );
115         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
116         assertEquals( "check build number", 0, version.getBuildNumber() );
117         assertEquals( "check qualifier", "0.09", version.getQualifier() );
118 
119         version = new DefaultArtifactVersion( "02" );
120         assertEquals( "check major version", 0, version.getMajorVersion() );
121         assertEquals( "check minor version", 0, version.getMinorVersion() );
122         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
123         assertEquals( "check build number", 0, version.getBuildNumber() );
124         assertEquals( "check qualifier", "02", version.getQualifier() );
125 
126         version = new DefaultArtifactVersion( "PATCH-1193602" );
127         assertEquals( "check major version", 0, version.getMajorVersion() );
128         assertEquals( "check minor version", 0, version.getMinorVersion() );
129         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
130         assertEquals( "check build number", 0, version.getBuildNumber() );
131         assertEquals( "check qualifier", "PATCH-1193602", version.getQualifier() );
132 
133         version = new DefaultArtifactVersion( "2.0-1" );
134         assertEquals( "check major version", 2, version.getMajorVersion() );
135         assertEquals( "check minor version", 0, version.getMinorVersion() );
136         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
137         assertEquals( "check build number", 1, version.getBuildNumber() );
138         assertNull( "check qualifier", version.getQualifier() );
139         assertEquals( "check string value", "2.0-1", version.toString() );
140 
141         version = new DefaultArtifactVersion( "5.0.0alpha-2006020117" );
142         assertEquals( "check major version", 0, version.getMajorVersion() );
143         assertEquals( "check minor version", 0, version.getMinorVersion() );
144         assertEquals( "check incremental version", 0, version.getIncrementalVersion() );
145         assertEquals( "check build number", 0, version.getBuildNumber() );
146         assertEquals( "check qualifier", "5.0.0alpha-2006020117", version.getQualifier() );
147     }
148 
149     public void testVersionComparing()
150     {
151         DefaultArtifactVersion version = new DefaultArtifactVersion( "1" );
152         assertTrue( version.compareTo( new DefaultArtifactVersion( "2" ) ) < 0 );
153 
154         version = new DefaultArtifactVersion( "1.5" );
155         assertTrue( version.compareTo( new DefaultArtifactVersion( "2" ) ) < 0 );
156 
157         version = new DefaultArtifactVersion( "1" );
158         assertEquals( 0, version.compareTo( new DefaultArtifactVersion( "1" ) ) );
159 
160         version = new DefaultArtifactVersion( "2" );
161         assertTrue( version.compareTo( new DefaultArtifactVersion( "1" ) ) > 0 );
162 
163         version = new DefaultArtifactVersion( "2.5" );
164         assertTrue( version.compareTo( new DefaultArtifactVersion( "1" ) ) > 0 );
165 
166         version = new DefaultArtifactVersion( "1.0" );
167         assertTrue( version.compareTo( new DefaultArtifactVersion( "1" ) ) == 0 );
168 
169         version = new DefaultArtifactVersion( "1.0.0" );
170         assertTrue( version.compareTo( new DefaultArtifactVersion( "1" ) ) == 0 );
171 
172         version = new DefaultArtifactVersion( "1.0" );
173         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.1" ) ) < 0 );
174 
175         version = new DefaultArtifactVersion( "1.2" );
176         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.1" ) ) > 0 );
177 
178         version = new DefaultArtifactVersion( "1.0.0" );
179         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.1" ) ) < 0 );
180 
181         version = new DefaultArtifactVersion( "1.2.0" );
182         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.1" ) ) > 0 );
183 
184         version = new DefaultArtifactVersion( "1.0-alpha-1" );
185         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0" ) ) < 0 );
186 
187         version = new DefaultArtifactVersion( "1.0-alpha-1" );
188         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-alpha-2" ) ) < 0 );
189 
190         version = new DefaultArtifactVersion( "1.0-alpha-1" );
191         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-beta-1" ) ) < 0 );
192 
193         version = new DefaultArtifactVersion( "1.0" );
194         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-alpha-1" ) ) > 0 );
195 
196         version = new DefaultArtifactVersion( "1.0-alpha-2" );
197         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-alpha-1" ) ) > 0 );
198 
199         version = new DefaultArtifactVersion( "1.0-beta-1" );
200         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-alpha-1" ) ) > 0 );
201 
202         version = new DefaultArtifactVersion( "1.0-beta-1" );
203         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-SNAPSHOT" ) ) > 0 );
204 
205         version = new DefaultArtifactVersion( "1.0-SNAPSHOT" );
206         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-beta-1" ) ) < 0 );
207 
208         version = new DefaultArtifactVersion( "1.0-SNAPSHOT" );
209         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0" ) ) < 0 );
210 
211         version = new DefaultArtifactVersion( "1.0" );
212         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-SNAPSHOT" ) ) > 0 );
213 
214         version = new DefaultArtifactVersion( "1.0-alpha-1-SNAPSHOT" );
215         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-alpha-1" ) ) < 0 );
216 
217         version = new DefaultArtifactVersion( "1.0-alpha-1" );
218         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-alpha-1-SNAPSHOT" ) ) > 0 );
219 
220         version = new DefaultArtifactVersion( "1.0" );
221         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-1" ) ) < 0 );
222 
223         version = new DefaultArtifactVersion( "1.0-1" );
224         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-2" ) ) < 0 );
225 
226         version = new DefaultArtifactVersion( "1.0-1" );
227         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0" ) ) > 0 );
228 
229         version = new DefaultArtifactVersion( "1.0-2" );
230         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.0-1" ) ) > 0 );
231 
232         version = new DefaultArtifactVersion( "2.0-0" );
233         assertTrue( version.compareTo( new DefaultArtifactVersion( "2.0" ) ) == 0 );
234 
235         version = new DefaultArtifactVersion( "2.0-1" );
236         assertTrue( version.compareTo( new DefaultArtifactVersion( "2.0" ) ) > 0 );
237 
238         version = new DefaultArtifactVersion( "2.0-1" );
239         assertTrue( version.compareTo( new DefaultArtifactVersion( "2.0.0" ) ) > 0 );
240 
241         version = new DefaultArtifactVersion( "2.0-1" );
242         assertTrue( version.compareTo( new DefaultArtifactVersion( "2.0.1" ) ) < 0 );
243 
244         version = new DefaultArtifactVersion( "1.10" );
245         assertTrue( version.compareTo( new DefaultArtifactVersion( "1.2" ) ) > 0 );
246 
247         // version = new DefaultArtifactVersion( "1.1-foo-10" );
248         // assertTrue( version.compareTo( new DefaultArtifactVersion( "1.1-foo-2" ) ) > 0 );
249     }
250 
251     public void testVersionComparingWithBuildNumberZero()
252     {
253         DefaultArtifactVersion v1 = new DefaultArtifactVersion( "2.0" );
254         DefaultArtifactVersion v2 = new DefaultArtifactVersion( "2.0-0" );
255         DefaultArtifactVersion v3 = new DefaultArtifactVersion( "2.0-alpha1" );
256         DefaultArtifactVersion v4 = new DefaultArtifactVersion( "2.0-1" );
257 
258         // v1 and v2 are equal
259         assertTrue( v1.compareTo( v2 ) == 0 );
260         assertTrue( v2.compareTo( v1 ) == 0 );
261 
262         // v1 is newer than v3
263         assertTrue( v1.compareTo( v3 ) > 0 );
264         assertTrue( v3.compareTo( v1 ) < 0 );
265 
266         // ergo, v2 should also be newer than v3
267         assertTrue( v2.compareTo( v3 ) > 0 );
268         assertTrue( v3.compareTo( v1 ) < 0 );
269 
270         // nonzero build numbers still respected
271         assertTrue( v1.compareTo( v4 ) < 0 ); // build number one is always newer
272         assertTrue( v4.compareTo( v1 ) > 0 );
273         assertTrue( v2.compareTo( v4 ) < 0 ); // same results as v1
274         assertTrue( v4.compareTo( v2 ) > 0 );
275         assertTrue( v3.compareTo( v4 ) < 0 ); // qualifier is always older
276         assertTrue( v4.compareTo( v3 ) > 0 );
277     }
278 
279     public void testCompareToEqualsHashCodeConsistency()
280     {
281         DefaultArtifactVersion v1;
282         DefaultArtifactVersion v2;
283 
284         // equal to itself
285         v1 = new DefaultArtifactVersion( "1.3" );
286         v2 = v1;
287         assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.hashCode() == v2.hashCode() ) && ( v1.compareTo( v2 ) == 0 )
288                     && ( v2.compareTo( v1 ) == 0 ) );
289 
290         // equal to something that means the same
291         v1 = new DefaultArtifactVersion( "1" );
292         v2 = new DefaultArtifactVersion( "1.0.0-0" );
293         assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.hashCode() == v2.hashCode() ) && ( v1.compareTo( v2 ) == 0 )
294                     && ( v2.compareTo( v1 ) == 0 ) );
295 
296         // equal with qualifier
297         v1 = new DefaultArtifactVersion( "1.3-alpha1" );
298         v2 = new DefaultArtifactVersion( "1.3-alpha1" );
299         assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.hashCode() == v2.hashCode() ) && ( v1.compareTo( v2 ) == 0 )
300                     && ( v2.compareTo( v1 ) == 0 ) );
301 
302         // longer qualifier with same start is *newer*
303         v1 = new DefaultArtifactVersion( "1.3-alpha1" );
304         v2 = new DefaultArtifactVersion( "1.3-alpha1-1" );
305         assertTrue( !v1.equals( v2 ) && !v2.equals( v1 ) && ( v1.compareTo( v2 ) > 0 ) && ( v2.compareTo( v1 ) < 0 ) );
306 
307         // different qualifiers alpha compared
308         v1 = new DefaultArtifactVersion( "1.3-alpha1" );
309         v2 = new DefaultArtifactVersion( "1.3-beta1" );
310         assertTrue( !v1.equals( v2 ) && !v2.equals( v1 ) && ( v1.compareTo( v2 ) < 0 ) && ( v2.compareTo( v1 ) > 0 ) );
311     }
312 
313     public void testTransitivity()
314     {
315         DefaultArtifactVersion v1 = new DefaultArtifactVersion( "1" );
316         DefaultArtifactVersion v2 = new DefaultArtifactVersion( "1.0-0" );
317         DefaultArtifactVersion v3 = new DefaultArtifactVersion( "1.0.1" );
318         DefaultArtifactVersion v4 = new DefaultArtifactVersion( "1.0-beta1" );
319 
320         // v1 and v2 are equal
321         assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.compareTo( v2 ) == 0 ) && ( v2.compareTo( v1 ) == 0 ) );
322 
323         // v1 is older than v3
324         assertTrue( !v1.equals( v3 ) && !v3.equals( v1 ) && ( v1.compareTo( v3 ) < 0 ) && ( v3.compareTo( v1 ) > 0 ) );
325 
326         // ergo, v2 is older than v3
327         assertTrue( !v2.equals( v3 ) && !v3.equals( v2 ) && ( v2.compareTo( v3 ) < 0 ) && ( v3.compareTo( v2 ) > 0 ) );
328 
329         // v1 is newer than v4
330         assertTrue( !v1.equals( v4 ) && !v4.equals( v1 ) && ( v1.compareTo( v4 ) > 0 ) && ( v4.compareTo( v1 ) < 0 ) );
331 
332         // ergo, v2 is newer than v4
333         assertTrue( !v2.equals( v4 ) && !v4.equals( v2 ) && ( v2.compareTo( v4 ) > 0 ) && ( v4.compareTo( v2 ) < 0 ) );
334     }
335 
336     private void testInterfaceCompare( String version )
337     {
338         final DefaultArtifactVersion dav = new DefaultArtifactVersion( version );
339 
340         // create an anonymous instance to compare the big daddy to
341         ArtifactVersion av = new ArtifactVersion()
342         {
343             public int getMajorVersion()
344             {
345                 return dav.getMajorVersion();
346             }
347 
348             public int getMinorVersion()
349             {
350                 return dav.getMinorVersion();
351             }
352 
353             public int getIncrementalVersion()
354             {
355                 return dav.getIncrementalVersion();
356             }
357 
358             public int getBuildNumber()
359             {
360                 return dav.getBuildNumber();
361             }
362 
363             public String getQualifier()
364             {
365                 return dav.getQualifier();
366             }
367 
368             // required by interface but unused for our test
369             public int compareTo( Object o )
370             {
371                 return 0; /* bogus */
372             }
373 
374             public void parseVersion( String s )
375             { /* bogus */
376             }
377         };
378 
379         assertTrue( dav.equals( av ) );
380         assertTrue( dav.compareTo( av ) == 0 );
381     }
382 
383     public void testInterfaceCompares()
384     {
385         testInterfaceCompare( "1" );
386         testInterfaceCompare( "1.2" );
387         testInterfaceCompare( "1.2.3" );
388         testInterfaceCompare( "1.2.3-4" );
389         testInterfaceCompare( "1.2.3-four" );
390         testInterfaceCompare( "1-2" );
391         testInterfaceCompare( "1-two" );
392     }
393 }