blob: a0545a84df9062e2b6a8b1ca29de8a9648bef46b [file] [log] [blame]
/*
* 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);
}
}