1 package org.apache.maven.artifact.versioning;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import junit.framework.TestCase;
23
24
25
26
27
28
29
30 public class DefaultArtifactVersionTest
31 extends TestCase
32 {
33 private ArtifactVersion newArtifactVersion( String version )
34 {
35 return new DefaultArtifactVersion( version );
36 }
37
38 private void checkVersionParsing( String version, int major, int minor, int incremental, int buildnumber,
39 String qualifier )
40 {
41 ArtifactVersion artifactVersion = newArtifactVersion( version );
42 String parsed = "'" + version + "' parsed as ('" + artifactVersion.getMajorVersion() + "', '"
43 + artifactVersion.getMinorVersion() + "', '" + artifactVersion.getIncrementalVersion() + "', '"
44 + artifactVersion.getBuildNumber() + "', '" + artifactVersion.getQualifier() + "'), ";
45 assertEquals( parsed + "check major version", major, artifactVersion.getMajorVersion() );
46 assertEquals( parsed + "check minor version", minor, artifactVersion.getMinorVersion() );
47 assertEquals( parsed + "check incremental version", incremental, artifactVersion.getIncrementalVersion() );
48 assertEquals( parsed + "check build number", buildnumber, artifactVersion.getBuildNumber() );
49 assertEquals( parsed + "check qualifier", qualifier, artifactVersion.getQualifier() );
50 assertEquals( "check " + version + " string value", version, artifactVersion.toString() );
51 }
52
53 public void testVersionParsing()
54 {
55 checkVersionParsing( "1" , 1, 0, 0, 0, null );
56 checkVersionParsing( "1.2" , 1, 2, 0, 0, null );
57 checkVersionParsing( "1.2.3" , 1, 2, 3, 0, null );
58 checkVersionParsing( "1.2.3-1" , 1, 2, 3, 1, null );
59 checkVersionParsing( "1.2.3-alpha-1" , 1, 2, 3, 0, "alpha-1" );
60 checkVersionParsing( "1.2-alpha-1" , 1, 2, 0, 0, "alpha-1" );
61 checkVersionParsing( "1.2-alpha-1-20050205.060708-1" , 1, 2, 0, 0, "alpha-1-20050205.060708-1" );
62 checkVersionParsing( "RELEASE" , 0, 0, 0, 0, "RELEASE" );
63 checkVersionParsing( "2.0-1" , 2, 0, 0, 1, null );
64
65
66 checkVersionParsing( "02" , 0, 0, 0, 0, "02" );
67 checkVersionParsing( "0.09" , 0, 0, 0, 0, "0.09" );
68 checkVersionParsing( "0.2.09" , 0, 0, 0, 0, "0.2.09" );
69 checkVersionParsing( "2.0-01" , 2, 0, 0, 0, "01" );
70
71
72 checkVersionParsing( "1.0.1b" , 0, 0, 0, 0, "1.0.1b" );
73 checkVersionParsing( "1.0M2" , 0, 0, 0, 0, "1.0M2" );
74 checkVersionParsing( "1.0RC2" , 0, 0, 0, 0, "1.0RC2" );
75 checkVersionParsing( "1.7.3.0" , 0, 0, 0, 0, "1.7.3.0" );
76 checkVersionParsing( "1.7.3.0-1" , 0, 0, 0, 0, "1.7.3.0-1" );
77 checkVersionParsing( "PATCH-1193602" , 0, 0, 0, 0, "PATCH-1193602" );
78 checkVersionParsing( "5.0.0alpha-2006020117" , 0, 0, 0, 0, "5.0.0alpha-2006020117" );
79 checkVersionParsing( "1.0.0.-SNAPSHOT", 0, 0, 0, 0, "1.0.0.-SNAPSHOT" );
80 checkVersionParsing( "1..0-SNAPSHOT", 0, 0, 0, 0, "1..0-SNAPSHOT" );
81 checkVersionParsing( "1.0.-SNAPSHOT", 0, 0, 0, 0, "1.0.-SNAPSHOT" );
82 checkVersionParsing( ".1.0-SNAPSHOT", 0, 0, 0, 0, ".1.0-SNAPSHOT" );
83
84 checkVersionParsing( "1.2.3.200705301630" , 0, 0, 0, 0, "1.2.3.200705301630" );
85 checkVersionParsing( "1.2.3-200705301630" , 1, 2, 3, 0, "200705301630" );
86 }
87
88 public void testVersionComparing()
89 {
90 assertVersionEqual( "1", "1" );
91 assertVersionOlder( "1", "2" );
92 assertVersionOlder( "1.5", "2" );
93 assertVersionOlder( "1", "2.5" );
94 assertVersionEqual( "1", "1.0" );
95 assertVersionEqual( "1", "1.0.0" );
96 assertVersionOlder( "1.0", "1.1" );
97 assertVersionOlder( "1.1", "1.2" );
98 assertVersionOlder( "1.0.0", "1.1" );
99 assertVersionOlder( "1.1", "1.2.0" );
100 assertVersionOlder( "1.2", "1.10" );
101
102 assertVersionOlder( "1.0-alpha-1", "1.0" );
103 assertVersionOlder( "1.0-alpha-1", "1.0-alpha-2" );
104
105 assertVersionOlder( "1.0-alpha-1", "1.0-beta-1" );
106
107 assertVersionOlder( "1.0-SNAPSHOT", "1.0-beta-1" );
108 assertVersionOlder( "1.0-SNAPSHOT", "1.0" );
109 assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-alpha-1" );
110
111 assertVersionOlder( "1.0", "1.0-1" );
112 assertVersionOlder( "1.0-1", "1.0-2" );
113 assertVersionEqual( "2.0-0", "2.0" );
114 assertVersionOlder( "2.0", "2.0-1" );
115 assertVersionOlder( "2.0.0", "2.0-1" );
116 assertVersionOlder( "2.0-1", "2.0.1" );
117
118 assertVersionOlder( "2.0.1-klm", "2.0.1-lmn" );
119 assertVersionOlder( "2.0.1-xyz", "2.0.1" );
120
121 assertVersionOlder( "2.0.1", "2.0.1-123" );
122 assertVersionOlder( "2.0.1-xyz", "2.0.1-123" );
123
124 }
125
126 public void testVersionSnapshotComparing()
127 {
128 assertVersionEqual( "1-SNAPSHOT", "1-SNAPSHOT" );
129 assertVersionOlder( "1-SNAPSHOT", "2-SNAPSHOT" );
130 assertVersionOlder( "1.5-SNAPSHOT", "2-SNAPSHOT" );
131 assertVersionOlder( "1-SNAPSHOT", "2.5-SNAPSHOT" );
132 assertVersionEqual( "1-SNAPSHOT", "1.0-SNAPSHOT" );
133 assertVersionEqual( "1-SNAPSHOT", "1.0.0-SNAPSHOT" );
134 assertVersionOlder( "1.0-SNAPSHOT", "1.1-SNAPSHOT" );
135 assertVersionOlder( "1.1-SNAPSHOT", "1.2-SNAPSHOT" );
136 assertVersionOlder( "1.0.0-SNAPSHOT", "1.1-SNAPSHOT" );
137 assertVersionOlder( "1.1-SNAPSHOT", "1.2.0-SNAPSHOT" );
138
139
140 assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-alpha-2-SNAPSHOT" );
141 assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-beta-1-SNAPSHOT" );
142
143 assertVersionOlder( "1.0-SNAPSHOT-SNAPSHOT", "1.0-beta-1-SNAPSHOT" );
144 assertVersionOlder( "1.0-SNAPSHOT-SNAPSHOT", "1.0-SNAPSHOT" );
145 assertVersionOlder( "1.0-alpha-1-SNAPSHOT-SNAPSHOT", "1.0-alpha-1-SNAPSHOT" );
146
147
148
149
150
151
152 assertVersionOlder( "2.0-1-SNAPSHOT", "2.0.1-SNAPSHOT" );
153
154 assertVersionOlder( "2.0.1-klm-SNAPSHOT", "2.0.1-lmn-SNAPSHOT" );
155
156
157
158 }
159
160
161 public void testSnapshotVsReleases()
162 {
163 assertVersionOlder( "1.0-RC1", "1.0-SNAPSHOT" );
164
165
166 }
167
168 private void assertVersionOlder( String left, String right )
169 {
170 assertTrue( left + " should be older than " + right,
171 newArtifactVersion( left ).compareTo( newArtifactVersion( right ) ) < 0 );
172 assertTrue( right + " should be newer than " + left,
173 newArtifactVersion( right ).compareTo( newArtifactVersion( left ) ) > 0 );
174 }
175
176 private void assertVersionEqual( String left, String right )
177 {
178 assertTrue( left + " should be equal to " + right,
179 newArtifactVersion( left ).compareTo( newArtifactVersion( right ) ) == 0 );
180 assertTrue( right + " should be equal to " + left,
181 newArtifactVersion( right ).compareTo( newArtifactVersion( left ) ) == 0 );
182 }
183
184 public void testVersionComparingWithBuildNumberZero()
185 {
186 ArtifactVersion v1 = newArtifactVersion( "2.0" );
187 ArtifactVersion v2 = newArtifactVersion( "2.0-0" );
188 ArtifactVersion v3 = newArtifactVersion( "2.0-alpha1" );
189 ArtifactVersion v4 = newArtifactVersion( "2.0-1" );
190
191
192 assertTrue( v1.compareTo( v2 ) == 0 );
193 assertTrue( v2.compareTo( v1 ) == 0 );
194
195
196 assertTrue( v1.compareTo( v3 ) > 0 );
197 assertTrue( v3.compareTo( v1 ) < 0 );
198
199
200 assertTrue( v2.compareTo( v3 ) > 0 );
201 assertTrue( v3.compareTo( v1 ) < 0 );
202
203
204 assertTrue( v1.compareTo( v4 ) < 0 );
205 assertTrue( v4.compareTo( v1 ) > 0 );
206 assertTrue( v2.compareTo( v4 ) < 0 );
207 assertTrue( v4.compareTo( v2 ) > 0 );
208 assertTrue( v3.compareTo( v4 ) < 0 );
209 assertTrue( v4.compareTo( v3 ) > 0 );
210 }
211
212 public void testCompareToEqualsHashCodeConsistency()
213 {
214 ArtifactVersion v1;
215 ArtifactVersion v2;
216
217
218 v1 = newArtifactVersion( "1.3" );
219 v2 = v1;
220 assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.hashCode() == v2.hashCode() )
221 && ( v1.compareTo( v2 ) == 0 ) && ( v2.compareTo( v1 ) == 0 ) );
222
223
224 v1 = newArtifactVersion( "1" );
225 v2 = newArtifactVersion( "1.0.0-0" );
226 assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.hashCode() == v2.hashCode() )
227 && ( v1.compareTo( v2 ) == 0 ) && ( v2.compareTo( v1 ) == 0 ) );
228
229
230 v1 = newArtifactVersion( "1.3-alpha1" );
231 v2 = newArtifactVersion( "1.3-alpha1" );
232 assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.hashCode() == v2.hashCode() )
233 && ( v1.compareTo( v2 ) == 0 ) && ( v2.compareTo( v1 ) == 0 ) );
234
235
236 v1 = newArtifactVersion( "1.3-alpha1" );
237 v2 = newArtifactVersion( "1.3-alpha1-1" );
238 assertTrue( !v1.equals( v2 ) && !v2.equals( v1 ) && ( v1.compareTo( v2 ) > 0 ) && ( v2.compareTo( v1 ) < 0 ) );
239
240
241 v1 = newArtifactVersion( "1.3-alpha1" );
242 v2 = newArtifactVersion( "1.3-beta1" );
243 assertTrue( !v1.equals( v2 ) && !v2.equals( v1 ) && ( v1.compareTo( v2 ) < 0 ) && ( v2.compareTo( v1 ) > 0 ) );
244 }
245
246 public void testTransitivity()
247 {
248 ArtifactVersion v1 = newArtifactVersion( "1" );
249 ArtifactVersion v2 = newArtifactVersion( "1.0-0" );
250 ArtifactVersion v3 = newArtifactVersion( "1.0.1" );
251 ArtifactVersion v4 = newArtifactVersion( "1.0-beta1" );
252
253
254 assertTrue( v1.equals( v2 ) && v2.equals( v1 ) && ( v1.compareTo( v2 ) == 0 ) && ( v2.compareTo( v1 ) == 0 ) );
255
256
257 assertTrue( !v1.equals( v3 ) && !v3.equals( v1 ) && ( v1.compareTo( v3 ) < 0 ) && ( v3.compareTo( v1 ) > 0 ) );
258
259
260 assertTrue( !v2.equals( v3 ) && !v3.equals( v2 ) && ( v2.compareTo( v3 ) < 0 ) && ( v3.compareTo( v2 ) > 0 ) );
261
262
263 assertTrue( !v1.equals( v4 ) && !v4.equals( v1 ) && ( v1.compareTo( v4 ) > 0 ) && ( v4.compareTo( v1 ) < 0 ) );
264
265
266 assertTrue( !v2.equals( v4 ) && !v4.equals( v2 ) && ( v2.compareTo( v4 ) > 0 ) && ( v4.compareTo( v2 ) < 0 ) );
267 }
268
269 private void testInterfaceCompare( String version )
270 {
271 final ArtifactVersion dav = newArtifactVersion( version );
272
273
274 ArtifactVersion av = new ArtifactVersion()
275 {
276 public int getMajorVersion()
277 {
278 return dav.getMajorVersion();
279 }
280
281 public int getMinorVersion()
282 {
283 return dav.getMinorVersion();
284 }
285
286 public int getIncrementalVersion()
287 {
288 return dav.getIncrementalVersion();
289 }
290
291 public int getBuildNumber()
292 {
293 return dav.getBuildNumber();
294 }
295
296 public String getQualifier()
297 {
298 return dav.getQualifier();
299 }
300
301
302 public int compareTo( Object o )
303 {
304 return 0;
305 }
306
307 public void parseVersion( String s )
308 {
309 }
310 };
311
312 assertTrue( dav.equals( av ) );
313 assertTrue( dav.compareTo( av ) == 0 );
314 }
315
316 public void testInterfaceCompares()
317 {
318 testInterfaceCompare( "1" );
319 testInterfaceCompare( "1.2" );
320 testInterfaceCompare( "1.2.3" );
321 testInterfaceCompare( "1.2.3-4" );
322 testInterfaceCompare( "1.2.3-four" );
323 testInterfaceCompare( "1-2" );
324 testInterfaceCompare( "1-two" );
325 }
326 }