1 /* 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. 3 * 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * The contents of this file are subject to the terms of either the Universal Permissive License 7 * v 1.0 as shown at http://oss.oracle.com/licenses/upl 8 * 9 * or the following license: 10 * 11 * Redistribution and use in source and binary forms, with or without modification, are permitted 12 * provided that the following conditions are met: 13 * 14 * 1. Redistributions of source code must retain the above copyright notice, this list of conditions 15 * and the following disclaimer. 16 * 17 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of 18 * conditions and the following disclaimer in the documentation and/or other materials provided with 19 * the distribution. 20 * 21 * 3. Neither the name of the copyright holder nor the names of its contributors may be used to 22 * endorse or promote products derived from this software without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 25 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 26 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 30 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY 31 * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 package org.openjdk.jmc.common.version; 34 35 import static org.junit.Assert.assertEquals; 36 import static org.junit.Assert.assertFalse; 37 import static org.junit.Assert.assertTrue; 38 39 import org.junit.Test; 40 41 public class JavaVersionTest { 42 43 @Test 44 public void testJava9NewShortGEQJava9OldVersion() { 45 JavaVersion ver1 = new JavaVersion("9"); //$NON-NLS-1$ 46 JavaVersion ver2 = new JavaVersion("1.9.foo"); //$NON-NLS-1$ 47 48 assertTrue(ver1.isGreaterOrEqualThan(ver2)); 49 } 50 51 @Test 52 public void testJava9NewShortEQJava9NewLongSameVersion() { 53 JavaVersion version9 = new JavaVersion("9-ea"); //$NON-NLS-1$ 54 JavaVersion version9000 = new JavaVersion("9.0.0.0-ea"); //$NON-NLS-1$ 55 56 assertTrue(version9000.equals(version9)); 57 } 58 59 @Test 60 public void testJava9NewShortWithExtraEQJava9NewLongSameVersion() { 61 JavaVersion version190 = new JavaVersion("9-ea+19-BR-435345"); //$NON-NLS-1$ 62 JavaVersion version900 = new JavaVersion("9.0.0.0-ea"); //$NON-NLS-1$ 63 64 assertTrue(version900.equals(version190)); 65 } 66 67 @Test 68 public void testJava9NewWithExtraGEQJava9OldVersion() { 69 JavaVersion version913 = new JavaVersion("9.1.3.0"); //$NON-NLS-1$ 70 JavaVersion version190 = new JavaVersion("1.9.0-ea+19-BR-435345"); //$NON-NLS-1$ 71 72 assertTrue(version913.isGreaterOrEqualThan(version190)); 73 } 74 75 /* 76 * NOTE: This test does not really have to pass when the new Java 9 version is committed, but 77 * since we are using this for testing before that happens, we need this to work. 78 */ 79 @Test 80 public void testJava9OldVersionGEQJava9NewWithExtra() { 81 JavaVersion version913 = new JavaVersion("9.1.3.0"); //$NON-NLS-1$ 82 JavaVersion version192 = new JavaVersion("1.9.2-ea+19-BR-435345"); //$NON-NLS-1$ 83 84 assertTrue(version192.isGreaterOrEqualThan(version913)); 85 } 86 87 @Test 88 public void testJava9LongVersionisGreaterOrEqualsJava9ShortVersion() { 89 JavaVersion version9 = new JavaVersion("9"); //$NON-NLS-1$ 90 JavaVersion version921 = new JavaVersion("9.2.1.0"); //$NON-NLS-1$ 91 92 assertTrue(version921.isGreaterOrEqualThan(version9)); 93 } 94 95 @Test 96 public void testJava9isGreaterOrEqualsVersion() { 97 JavaVersion version913 = new JavaVersion("9.1.3.0-ea"); //$NON-NLS-1$ 98 JavaVersion version921 = new JavaVersion("9.2.1.0"); //$NON-NLS-1$ 99 100 assertTrue(version921.isGreaterOrEqualThan(version913)); 101 } 102 103 @Test 104 public void testJava9isGreaterOrEqualsVersionEA() { 105 JavaVersion version921ea = new JavaVersion("9.2.1.0-ea"); //$NON-NLS-1$ 106 JavaVersion version921 = new JavaVersion("9.2.1.0"); //$NON-NLS-1$ 107 108 assertTrue(version921.isGreaterOrEqualThan(version921ea)); 109 assertTrue(!version921ea.isGreaterOrEqualThan(version921)); 110 } 111 112 @Test 113 public void testGreaterOrEqualsMediumVsLongVersion() { 114 JavaVersion version123 = new JavaVersion("1.2.3"); //$NON-NLS-1$ 115 JavaVersion version12245 = new JavaVersion("1.2.2.4.5"); //$NON-NLS-1$ 116 117 assertTrue(version123.isGreaterOrEqualThan(version12245)); 118 } 119 120 @Test 121 public void testGreaterOrEqualsLongVsMediumVersion() { 122 JavaVersion version12345 = new JavaVersion("1.2.3.4.5"); //$NON-NLS-1$ 123 JavaVersion version12 = new JavaVersion("1.2"); //$NON-NLS-1$ 124 125 assertTrue(version12345.isGreaterOrEqualThan(version12)); 126 } 127 128 @Test 129 public void testJava9isGreaterOrEqualsThanJava8Version() { 130 JavaVersion version903 = new JavaVersion("9.0.3.0-ea"); //$NON-NLS-1$ 131 JavaVersion version8u40 = new JavaVersion("1.8.0_40"); //$NON-NLS-1$ 132 133 assertTrue(version903.isGreaterOrEqualThan(version8u40)); 134 } 135 136 @Test 137 public void testGEQ() { 138 JavaVersion version16 = new JavaVersion("1.6.0_14ea"); //$NON-NLS-1$ 139 JavaVersion version17 = new JavaVersion("1.7.0_0"); //$NON-NLS-1$ 140 141 assertTrue(version17.isGreaterOrEqualThan(version16)); 142 assertFalse(version16.isGreaterOrEqualThan(version17)); 143 assertTrue(version16.isGreaterOrEqualThan(version16)); 144 assertTrue(version17.equals(version17)); 145 } 146 147 @Test 148 public void testGEQJava7EA() { 149 JavaVersion version17ea = new JavaVersion("1.7.0_0ea"); //$NON-NLS-1$ 150 JavaVersion version17 = new JavaVersion("1.7.0_0"); //$NON-NLS-1$ 151 152 assertTrue(version17.isGreaterOrEqualThan(version17ea)); 153 assertFalse(version17ea.isGreaterOrEqualThan(version17)); 154 } 155 156 @Test 157 public void testGEQWithMicro() { 158 JavaVersion version142 = new JavaVersion("1.4.2_14"); //$NON-NLS-1$ 159 JavaVersion version131 = new JavaVersion("1.3.1_67"); //$NON-NLS-1$ 160 161 assertTrue(version142.isGreaterOrEqualThan(version131)); 162 assertFalse(version131.isGreaterOrEqualThan(version142)); 163 assertTrue(version131.isGreaterOrEqualThan(version131)); 164 assertTrue(version142.equals(version142)); 165 } 166 167 @Test 168 public void testGEQCropped() { 169 JavaVersion version17 = new JavaVersion("1.7"); //$NON-NLS-1$ 170 JavaVersion version17u12 = new JavaVersion("1.7.0_12"); //$NON-NLS-1$ 171 172 assertTrue(version17u12.isGreaterOrEqualThan(version17)); 173 assertFalse(version17u12.equals(version17)); 174 } 175 176 @Test 177 public void testIsReverseNumbers() { 178 JavaVersion version17u13 = new JavaVersion("1.7.12_13ea"); //$NON-NLS-1$ 179 JavaVersion version17u31 = new JavaVersion("1.7.12_31"); //$NON-NLS-1$ 180 181 assertTrue(version17u31.isGreaterOrEqualThan(version17u13)); 182 assertFalse(version17u31.equals(version17u13)); 183 } 184 185 @Test 186 public void testOldVersionShortAndLongEquals() { 187 JavaVersion version17u0 = new JavaVersion("1.7.0_0"); //$NON-NLS-1$ 188 JavaVersion version17 = new JavaVersion("1.7"); //$NON-NLS-1$ 189 190 assertTrue(version17u0.equals(version17)); 191 } 192 193 @Test 194 public void testNullStringArgument() { 195 JavaVersion nullVersion = new JavaVersion((String) null); 196 assertEquals(JavaVersion.UNKNOWN, nullVersion.getMajorVersion()); 197 } 198 }