/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.dev; import junit.framework.TestCase; /** * Tests GwtVersion. */ public class GwtVersionTest extends TestCase { /** * Check for compatibility between compareTo, equals, and hashCode. */ public void testCompareEqualsHashCode() { checkCompareEqualsHashCode("0.0.0", "0.0.0"); checkCompareEqualsHashCode("0.0.0", "0"); checkCompareEqualsHashCode("1.2.3", "001.002.003"); checkCompareEqualsHashCode("1.2.3", "001.002.004"); checkCompareEqualsHashCode("1.2.4", "001.002.003"); checkCompareEqualsHashCode("1.2.4-ms1", "1.2.4-ms1"); checkCompareEqualsHashCode("1.2.4-ms2", "1.2.4-ms2"); checkCompareEqualsHashCode("1.2.4-ms2", "1.2.4-rc1"); } /** * Test that GwtVersion.compareTo produced expected results. */ public void testCompareTo() { GwtVersion v1 = new GwtVersion("0.0.0"); assertEquals(0, v1.compareTo(v1)); GwtVersion v2 = new GwtVersion("0.0.0"); assertEquals(0, v1.compareTo(v2)); assertEquals(0, v2.compareTo(v1)); v2 = new GwtVersion("0.0.0b"); assertTrue(v1.compareTo(v2) > 0); assertTrue(v2.compareTo(v1) < 0); v1 = new GwtVersion("0.0.0c"); v2 = new GwtVersion("0.0.0b"); assertEquals(0, v1.compareTo(v2)); assertEquals(0, v2.compareTo(v1)); v1 = new GwtVersion("1.9.41"); v2 = new GwtVersion("1.11.12"); assertTrue(v1.compareTo(v2) < 0); assertTrue(v2.compareTo(v1) > 0); v1 = new GwtVersion("1.9.41"); v2 = new GwtVersion("1.4.12"); assertTrue(v1.compareTo(v2) > 0); assertTrue(v2.compareTo(v1) < 0); v1 = new GwtVersion("1.9.41"); v2 = new GwtVersion("2.0.0-ms1"); assertTrue(v1.compareTo(v2) < 0); assertTrue(v2.compareTo(v1) > 0); v1 = new GwtVersion("2.0.0-ms2"); v2 = new GwtVersion("2.0.0-rc1"); assertEquals(0, v1.compareTo(v2)); assertEquals(0, v2.compareTo(v1)); v1 = new GwtVersion("001.002.099"); v2 = new GwtVersion("1.2.99"); assertEquals(0, v1.compareTo(v2)); assertEquals(0, v2.compareTo(v1)); } /** * Test that GwtVersion.compareTo produced expected results. */ public void testEquals() { GwtVersion v1 = new GwtVersion("0.0.0"); assertEquals(v1, v1); GwtVersion v2 = new GwtVersion("0.0.0"); assertEquals(v1, v2); assertEquals(v2, v1); v2 = new GwtVersion(""); assertEquals(v1, v2); assertEquals(v2, v1); v2 = new GwtVersion("1.2.3"); assertFalse(v1.equals(v2)); assertFalse(v2.equals(v1)); } /** * Test that various versions are properly detected as to whether or not they * are "no-nag" versions. */ public void testIsNoNagVersion() { GwtVersion version = new GwtVersion("0.0.0"); assertFalse(version.isNoNagVersion()); version = new GwtVersion("0.0.999"); assertTrue(version.isNoNagVersion()); version = new GwtVersion("2.0.999"); assertTrue(version.isNoNagVersion()); version = new GwtVersion("2.0.999-rc1"); assertTrue(version.isNoNagVersion()); version = new GwtVersion("2.0.999-ms2"); assertTrue(version.isNoNagVersion()); version = new GwtVersion("0.999.0"); assertFalse(version.isNoNagVersion()); version = new GwtVersion("2.999.0-rc1"); assertFalse(version.isNoNagVersion()); } /** * Verify that bogus version numbers don't fail. */ public void testParseBad() { checkAllZerosVersion("", null); checkAllZerosVersion("bogus", null); // we skip leading garbage checkAllZerosVersion("0.x.x", "x.x"); GwtVersion version = new GwtVersion("1.x.x"); int[] components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(0, components[1]); assertEquals(0, components[2]); assertEquals("x.x", version.getSuffix()); version = new GwtVersion("1.2.x"); components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(2, components[1]); assertEquals(0, components[2]); assertEquals("x", version.getSuffix()); version = new GwtVersion("1.2.3x"); components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(2, components[1]); assertEquals(3, components[2]); assertEquals("x", version.getSuffix()); } /** * Tests parsing various version numbers. */ public void testParseBasic() { GwtVersion version = new GwtVersion("1.2.3"); int[] components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(2, components[1]); assertEquals(3, components[2]); assertNull(version.getSuffix()); version = new GwtVersion("1.2.3-ms1"); components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(2, components[1]); assertEquals(3, components[2]); assertEquals("-ms1", version.getSuffix()); version = new GwtVersion("1.2.3-rc2"); components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(2, components[1]); assertEquals(3, components[2]); assertEquals("-rc2", version.getSuffix()); version = new GwtVersion("1.2.3-RC1"); components = version.getComponents(); assertEquals(3, components.length); assertEquals(1, components[0]); assertEquals(2, components[1]); assertEquals(3, components[2]); assertEquals("-RC1", version.getSuffix()); } /** * Tests various ways you can get a version number of 0.0.0. */ public void testParseZeros() { checkAllZerosVersion("0.0.0", null); checkAllZerosVersion("0.0", null); checkAllZerosVersion("0", null); checkAllZerosVersion("", null); checkAllZerosVersion(null, null); checkAllZerosVersion("foo0.0.0", null); checkAllZerosVersion("foo0.0.0 bar", " bar"); } /** * Test that GwtVersion.toString() returns expected results. */ public void testToString() { String versionString = "0.0.0"; GwtVersion version = new GwtVersion(versionString); assertEquals(versionString, version.toString()); versionString = "0.0.0a"; version = new GwtVersion(versionString); assertEquals(versionString, version.toString()); versionString = "foo 0.0.0a"; version = new GwtVersion(versionString); assertEquals("0.0.0a", version.toString()); versionString = "1.2.3"; version = new GwtVersion(versionString); assertEquals(versionString, version.toString()); versionString = "1.2.3-rc1"; version = new GwtVersion(versionString); assertEquals(versionString, version.toString()); versionString = "1.2.3-ms2"; version = new GwtVersion(versionString); assertEquals(versionString, version.toString()); } /** * Verify that the version string is treated equivalently to 0.0.0. * * @param versionString version number in string form * @param expectedSuffix expected suffix of the version */ private void checkAllZerosVersion(String versionString, String expectedSuffix) { GwtVersion version = new GwtVersion(versionString); int[] components = version.getComponents(); assertEquals(3, components.length); assertEquals(0, components[0]); assertEquals(0, components[1]); assertEquals(0, components[2]); assertEquals(expectedSuffix, version.getSuffix()); } /** * Check that compareTo, equals, and hashCode are compatible for a pair of * versions. * * @param v1String string format version number to test * @param v2String string format version number to test */ private void checkCompareEqualsHashCode(String v1String, String v2String) { GwtVersion v1 = new GwtVersion(v1String); GwtVersion v2 = new GwtVersion(v2String); int h1 = v1.hashCode(); int h2 = v2.hashCode(); int c12 = v1.compareTo(v2); int c21 = v2.compareTo(v1); boolean e12 = v1.equals(v2); boolean e21 = v2.equals(v1); assertEquals("equals not symmetric", e12, e21); assertEquals("compareTo not symmetric", c12, -c21); assertEquals("compareTo/equals don't match", e12, c12 == 0); assertEquals("hashCode/equals don't match", e12, h1 == h2); } }