View Javadoc
1   package org.codehaus.plexus.languages.java.version;
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 org.junit.jupiter.api.Test;
23  
24  import static org.assertj.core.api.Assertions.assertThat;
25  import static org.junit.jupiter.api.Assertions.assertEquals;
26  import static org.junit.jupiter.api.Assertions.assertFalse;
27  import static org.junit.jupiter.api.Assertions.assertNotEquals;
28  import static org.junit.jupiter.api.Assertions.assertTrue;
29  
30  /*
31   * Parsing is lazy, only triggered when comparing
32   */
33  class JavaVersionTest {
34      @Test
35      void testParse() {
36          assertThat(JavaVersion.parse("1.4").compareTo(JavaVersion.parse("1.4.2")))
37                  .isNegative();
38          assertThat(JavaVersion.parse("1.4").compareTo(JavaVersion.parse("1.5"))).isNegative();
39          assertThat(JavaVersion.parse("1.8").compareTo(JavaVersion.parse("9"))).isNegative();
40  
41          assertThat(JavaVersion.parse("1.4").compareTo(JavaVersion.parse("1.4"))).isZero();
42          assertThat(JavaVersion.parse("1.4.2").compareTo(JavaVersion.parse("1.4.2")))
43                  .isZero();
44          assertThat(JavaVersion.parse("9").compareTo(JavaVersion.parse("9"))).isZero();
45  
46          assertThat(JavaVersion.parse("1.4.2").compareTo(JavaVersion.parse("1.4")))
47                  .isPositive();
48          assertThat(JavaVersion.parse("1.5").compareTo(JavaVersion.parse("1.4"))).isPositive();
49          assertThat(JavaVersion.parse("9").compareTo(JavaVersion.parse("1.8"))).isPositive();
50      }
51  
52      @Test
53      void testVersionNamingExamples() {
54          // All GA (FCS) versions are ordered based on the standard dot-notation. For example: 1.3.0 < 1.3.0_01 < 1.3.1 <
55          // 1.3.1_01.
56          // Source: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html
57  
58          assertThat(JavaVersion.parse("1.3.0").compareTo(JavaVersion.parse("1.3.0_01")))
59                  .isNegative();
60          assertThat(JavaVersion.parse("1.3.0_01").compareTo(JavaVersion.parse("1.3.1")))
61                  .isNegative();
62          assertThat(JavaVersion.parse("1.3.1").compareTo(JavaVersion.parse("1.3.1_01")))
63                  .isNegative();
64  
65          assertThat(JavaVersion.parse("1.3.0").compareTo(JavaVersion.parse("1.3.0-b24")))
66                  .isNegative();
67      }
68  
69      @Test
70      void testJEP223Short() {
71          // http://openjdk.java.net/jeps/223
72          assertThat(JavaVersion.parse("9-ea").compareTo(JavaVersion.parse("9"))).isNegative();
73          assertThat(JavaVersion.parse("9").compareTo(JavaVersion.parse("9.0.1"))).isNegative();
74          assertThat(JavaVersion.parse("9.0.1").compareTo(JavaVersion.parse("9.0.2")))
75                  .isNegative();
76          assertThat(JavaVersion.parse("9.0.2").compareTo(JavaVersion.parse("9.1.2")))
77                  .isNegative();
78          assertThat(JavaVersion.parse("9.1.2").compareTo(JavaVersion.parse("9.1.3")))
79                  .isNegative();
80          assertThat(JavaVersion.parse("9.1.3").compareTo(JavaVersion.parse("9.1.4")))
81                  .isNegative();
82          assertThat(JavaVersion.parse("9.1.4").compareTo(JavaVersion.parse("9.2.4")))
83                  .isNegative();
84      }
85  
86      @Test
87      void testIsAtLeastString() {
88          JavaVersion base = JavaVersion.parse("7");
89          assertTrue(base.isAtLeast("7"));
90          assertFalse(base.isAtLeast("8"));
91      }
92  
93      @Test
94      void testIsAtLeastVersion() {
95          // e.g. can I use the module-path, which is supported since java 9
96          JavaVersion j9 = JavaVersion.parse("9");
97          assertFalse(JavaVersion.parse("8").isAtLeast(j9));
98          assertTrue(JavaVersion.parse("9").isAtLeast(j9));
99      }
100 
101     @Test
102     void testIsBeforeString() {
103         JavaVersion base = JavaVersion.parse("7");
104         assertFalse(base.isBefore("7"));
105         assertTrue(base.isBefore("8"));
106     }
107 
108     @Test
109     void testIsBeforeStringVersion() {
110         // e.g. can I use -XX:MaxPermSize, which has been removed in Java 9
111         JavaVersion j9 = JavaVersion.parse("9");
112         assertTrue(JavaVersion.parse("8").isBefore(j9));
113         assertFalse(JavaVersion.parse("9").isBefore(j9));
114     }
115 
116     @Test
117     void testEquals() {
118         JavaVersion seven = JavaVersion.parse("7");
119         JavaVersion other = JavaVersion.parse("7");
120 
121         assertThat(seven).isEqualTo(seven);
122         assertEquals(seven, other);
123         assertNotEquals(null, seven);
124         assertNotEquals(seven, new Object());
125         assertNotEquals(seven, JavaVersion.parse("8"));
126     }
127 
128     @Test
129     void testHascode() {
130         JavaVersion seven = JavaVersion.parse("7");
131         JavaVersion other = JavaVersion.parse("7");
132 
133         assertEquals(seven.hashCode(), other.hashCode());
134     }
135 
136     @Test
137     void testToString() {
138         assertEquals("7", JavaVersion.parse("7").toString());
139 
140         assertEquals("!@#$%^&*()", JavaVersion.parse("!@#$%^&*()").toString(), "Raw version should not be parsed");
141     }
142 
143     @Test
144     void testAsMajor() {
145         assertEquals(JavaVersion.parse("2"), JavaVersion.parse("1.2").asMajor());
146         assertEquals(JavaVersion.parse("5.0"), JavaVersion.parse("5.0").asMajor());
147         // only shift one time
148         assertEquals("1.2", JavaVersion.parse("1.1.2").asMajor().asMajor().toString());
149     }
150 
151     @Test
152     void testAsMajorEquals() {
153         JavaVersion version = JavaVersion.parse("1.2");
154         assertEquals(version, version.asMajor());
155     }
156 
157     @Test
158     void testValueWithGroups() {
159         assertThat(JavaVersion.parse("1").getValue(1)).isEqualTo("1");
160         assertThat(JavaVersion.parse("1").getValue(2)).isEqualTo("1.0");
161         assertThat(JavaVersion.parse("1").getValue(3)).isEqualTo("1.0.0");
162         assertThat(JavaVersion.parse("2.1").getValue(1)).isEqualTo("2");
163         assertThat(JavaVersion.parse("2.1").getValue(2)).isEqualTo("2.1");
164         assertThat(JavaVersion.parse("2.1").getValue(3)).isEqualTo("2.1.0");
165         assertThat(JavaVersion.parse("3.2.1").getValue(1)).isEqualTo("3");
166         assertThat(JavaVersion.parse("3.2.1").getValue(2)).isEqualTo("3.2");
167         assertThat(JavaVersion.parse("3.2.1").getValue(3)).isEqualTo("3.2.1");
168     }
169 }