View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.artifact.versioning;
20  
21  import org.junit.jupiter.api.Test;
22  
23  import static org.junit.jupiter.api.Assertions.assertEquals;
24  import static org.junit.jupiter.api.Assertions.assertFalse;
25  import static org.junit.jupiter.api.Assertions.assertTrue;
26  
27  /**
28   * Test DefaultArtifactVersion.
29   *
30   */
31  class DefaultArtifactVersionTest {
32      private ArtifactVersion newArtifactVersion(String version) {
33          return new DefaultArtifactVersion(version);
34      }
35  
36      private void checkVersionParsing(
37              String version, int major, int minor, int incremental, int buildnumber, String qualifier) {
38          ArtifactVersion artifactVersion = newArtifactVersion(version);
39          String parsed = "'" + version + "' parsed as ('" + artifactVersion.getMajorVersion() + "', '"
40                  + artifactVersion.getMinorVersion() + "', '" + artifactVersion.getIncrementalVersion() + "', '"
41                  + artifactVersion.getBuildNumber() + "', '" + artifactVersion.getQualifier() + "'), ";
42          assertEquals(major, artifactVersion.getMajorVersion(), parsed + "check major version");
43          assertEquals(minor, artifactVersion.getMinorVersion(), parsed + "check minor version");
44          assertEquals(incremental, artifactVersion.getIncrementalVersion(), parsed + "check incremental version");
45          assertEquals(buildnumber, artifactVersion.getBuildNumber(), parsed + "check build number");
46          assertEquals(qualifier, artifactVersion.getQualifier(), parsed + "check qualifier");
47          assertEquals(version, artifactVersion.toString(), "check " + version + " string value");
48      }
49  
50      @Test
51      void testVersionParsing() {
52          checkVersionParsing("1", 1, 0, 0, 0, null);
53          checkVersionParsing("1.2", 1, 2, 0, 0, null);
54          checkVersionParsing("1.2.3", 1, 2, 3, 0, null);
55          checkVersionParsing("1.2.3-1", 1, 2, 3, 1, null);
56          checkVersionParsing("1.2.3-alpha-1", 1, 2, 3, 0, "alpha-1");
57          checkVersionParsing("1.2-alpha-1", 1, 2, 0, 0, "alpha-1");
58          checkVersionParsing("1.2-alpha-1-20050205.060708-1", 1, 2, 0, 0, "alpha-1-20050205.060708-1");
59          checkVersionParsing("RELEASE", 0, 0, 0, 0, "RELEASE");
60          checkVersionParsing("2.0-1", 2, 0, 0, 1, null);
61  
62          // 0 at the beginning of a number has a special handling
63          checkVersionParsing("02", 0, 0, 0, 0, "02");
64          checkVersionParsing("0.09", 0, 0, 0, 0, "0.09");
65          checkVersionParsing("0.2.09", 0, 0, 0, 0, "0.2.09");
66          checkVersionParsing("2.0-01", 2, 0, 0, 0, "01");
67  
68          // version schemes not really supported: fully transformed as qualifier
69          checkVersionParsing("1.0.1b", 0, 0, 0, 0, "1.0.1b");
70          checkVersionParsing("1.0M2", 0, 0, 0, 0, "1.0M2");
71          checkVersionParsing("1.0RC2", 0, 0, 0, 0, "1.0RC2");
72          checkVersionParsing("1.1.2.beta1", 1, 1, 2, 0, "beta1");
73          checkVersionParsing("1.7.3.beta1", 1, 7, 3, 0, "beta1");
74          checkVersionParsing("1.7.3.0", 0, 0, 0, 0, "1.7.3.0");
75          checkVersionParsing("1.7.3.0-1", 0, 0, 0, 0, "1.7.3.0-1");
76          checkVersionParsing("PATCH-1193602", 0, 0, 0, 0, "PATCH-1193602");
77          checkVersionParsing("5.0.0alpha-2006020117", 0, 0, 0, 0, "5.0.0alpha-2006020117");
78          checkVersionParsing("1.0.0.-SNAPSHOT", 0, 0, 0, 0, "1.0.0.-SNAPSHOT");
79          checkVersionParsing("1..0-SNAPSHOT", 0, 0, 0, 0, "1..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  
83          checkVersionParsing("1.2.3.200705301630", 0, 0, 0, 0, "1.2.3.200705301630");
84          checkVersionParsing("1.2.3-200705301630", 1, 2, 3, 0, "200705301630");
85      }
86  
87      @Test
88      void testVersionComparing() {
89          assertVersionEqual("1", "1");
90          assertVersionOlder("1", "2");
91          assertVersionOlder("1.5", "2");
92          assertVersionOlder("1", "2.5");
93          assertVersionEqual("1", "1.0");
94          assertVersionEqual("1", "1.0.0");
95          assertVersionOlder("1.0", "1.1");
96          assertVersionOlder("1.1", "1.2");
97          assertVersionOlder("1.0.0", "1.1");
98          assertVersionOlder("1.1", "1.2.0");
99  
100         assertVersionOlder("1.1.2.alpha1", "1.1.2");
101         assertVersionOlder("1.1.2.alpha1", "1.1.2.beta1");
102         assertVersionOlder("1.1.2.beta1", "1.2");
103 
104         assertVersionOlder("1.0-alpha-1", "1.0");
105         assertVersionOlder("1.0-alpha-1", "1.0-alpha-2");
106         assertVersionOlder("1.0-alpha-2", "1.0-alpha-15");
107         assertVersionOlder("1.0-alpha-1", "1.0-beta-1");
108 
109         assertVersionOlder("1.0-beta-1", "1.0-SNAPSHOT");
110         assertVersionOlder("1.0-SNAPSHOT", "1.0");
111         assertVersionOlder("1.0-alpha-1-SNAPSHOT", "1.0-alpha-1");
112 
113         assertVersionOlder("1.0", "1.0-1");
114         assertVersionOlder("1.0-1", "1.0-2");
115         assertVersionEqual("2.0-0", "2.0");
116         assertVersionOlder("2.0", "2.0-1");
117         assertVersionOlder("2.0.0", "2.0-1");
118         assertVersionOlder("2.0-1", "2.0.1");
119 
120         assertVersionOlder("2.0.1-klm", "2.0.1-lmn");
121         assertVersionOlder("2.0.1", "2.0.1-xyz");
122         assertVersionOlder("2.0.1-xyz-1", "2.0.1-1-xyz");
123 
124         assertVersionOlder("2.0.1", "2.0.1-123");
125         assertVersionOlder("2.0.1-xyz", "2.0.1-123");
126 
127         assertVersionOlder("1.2.3-10000000000", "1.2.3-10000000001");
128         assertVersionOlder("1.2.3-1", "1.2.3-10000000001");
129         assertVersionOlder("2.3.0-v200706262000", "2.3.0-v200706262130"); // org.eclipse:emf:2.3.0-v200706262000
130         // org.eclipse.wst.common_core.feature_2.0.0.v200706041905-7C78EK9E_EkMNfNOd2d8qq
131         assertVersionOlder("2.0.0.v200706041905-7C78EK9E_EkMNfNOd2d8qq", "2.0.0.v200706041906-7C78EK9E_EkMNfNOd2d8qq");
132     }
133 
134     @Test
135     void testVersionSnapshotComparing() {
136         assertVersionEqual("1-SNAPSHOT", "1-SNAPSHOT");
137         assertVersionOlder("1-SNAPSHOT", "2-SNAPSHOT");
138         assertVersionOlder("1.5-SNAPSHOT", "2-SNAPSHOT");
139         assertVersionOlder("1-SNAPSHOT", "2.5-SNAPSHOT");
140         assertVersionEqual("1-SNAPSHOT", "1.0-SNAPSHOT");
141         assertVersionEqual("1-SNAPSHOT", "1.0.0-SNAPSHOT");
142         assertVersionOlder("1.0-SNAPSHOT", "1.1-SNAPSHOT");
143         assertVersionOlder("1.1-SNAPSHOT", "1.2-SNAPSHOT");
144         assertVersionOlder("1.0.0-SNAPSHOT", "1.1-SNAPSHOT");
145         assertVersionOlder("1.1-SNAPSHOT", "1.2.0-SNAPSHOT");
146 
147         // assertVersionOlder( "1.0-alpha-1-SNAPSHOT", "1.0-SNAPSHOT" );
148         assertVersionOlder("1.0-alpha-1-SNAPSHOT", "1.0-alpha-2-SNAPSHOT");
149         assertVersionOlder("1.0-alpha-1-SNAPSHOT", "1.0-beta-1-SNAPSHOT");
150 
151         assertVersionOlder("1.0-beta-1-SNAPSHOT", "1.0-SNAPSHOT-SNAPSHOT");
152         assertVersionOlder("1.0-SNAPSHOT-SNAPSHOT", "1.0-SNAPSHOT");
153         assertVersionOlder("1.0-alpha-1-SNAPSHOT-SNAPSHOT", "1.0-alpha-1-SNAPSHOT");
154 
155         assertVersionOlder("1.0-SNAPSHOT", "1.0-1-SNAPSHOT");
156         assertVersionOlder("1.0-1-SNAPSHOT", "1.0-2-SNAPSHOT");
157         // assertVersionEqual( "2.0-0-SNAPSHOT", "2.0-SNAPSHOT" );
158         assertVersionOlder("2.0-SNAPSHOT", "2.0-1-SNAPSHOT");
159         assertVersionOlder("2.0.0-SNAPSHOT", "2.0-1-SNAPSHOT");
160         assertVersionOlder("2.0-1-SNAPSHOT", "2.0.1-SNAPSHOT");
161 
162         assertVersionOlder("2.0.1-klm-SNAPSHOT", "2.0.1-lmn-SNAPSHOT");
163         // assertVersionOlder( "2.0.1-xyz-SNAPSHOT", "2.0.1-SNAPSHOT" );
164         assertVersionOlder("2.0.1-SNAPSHOT", "2.0.1-123-SNAPSHOT");
165         assertVersionOlder("2.0.1-xyz-SNAPSHOT", "2.0.1-123-SNAPSHOT");
166     }
167 
168     @Test
169     void testSnapshotVsReleases() {
170         assertVersionOlder("1.0-RC1", "1.0-SNAPSHOT");
171         assertVersionOlder("1.0-rc1", "1.0-SNAPSHOT");
172         assertVersionOlder("1.0-rc-1", "1.0-SNAPSHOT");
173     }
174 
175     @Test
176     void testHashCode() {
177         ArtifactVersion v1 = newArtifactVersion("1");
178         ArtifactVersion v2 = newArtifactVersion("1.0");
179         assertTrue(v1.equals(v2));
180         assertEquals(v1.hashCode(), v2.hashCode());
181     }
182 
183     @Test
184     void testEqualsNullSafe() {
185         assertFalse(newArtifactVersion("1").equals(null));
186     }
187 
188     @Test
189     void testEqualsTypeSafe() {
190         assertFalse(newArtifactVersion("1").equals("non-an-artifact-version-instance"));
191     }
192 
193     private void assertVersionOlder(String left, String right) {
194         assertTrue(
195                 newArtifactVersion(left).compareTo(newArtifactVersion(right)) < 0,
196                 left + " should be older than " + right);
197         assertTrue(
198                 newArtifactVersion(right).compareTo(newArtifactVersion(left)) > 0,
199                 right + " should be newer than " + left);
200     }
201 
202     private void assertVersionEqual(String left, String right) {
203         assertTrue(
204                 newArtifactVersion(left).compareTo(newArtifactVersion(right)) == 0,
205                 left + " should be equal to " + right);
206         assertTrue(
207                 newArtifactVersion(right).compareTo(newArtifactVersion(left)) == 0,
208                 right + " should be equal to " + left);
209     }
210 }