/* * Copyright (C) 2013 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 interactivespaces.resource; import org.junit.Assert; import org.junit.Test; /** * Test {@link Version} and {@link VersionRange}. * * @author Keith M. Hughes */ public class VersionTest { @Test public void testEquals() { Version v1 = new Version(1, 2, 3); Version v2 = new Version(1, 2, 3); Assert.assertTrue(v1.equals(v1)); Assert.assertTrue(v1.equals(v2)); Assert.assertTrue(v1.lessThanOrEqual(v2)); Assert.assertTrue(v1.greaterThanOrEqual(v2)); Assert.assertTrue(v2.lessThanOrEqual(v1)); Assert.assertTrue(v2.greaterThanOrEqual(v1)); Assert.assertTrue(v1.lessThanOrEqual(v1)); Assert.assertTrue(v1.greaterThanOrEqual(v1)); Assert.assertTrue(v1.compareTo(v2) == 0); } @Test public void testCompares() { Version v1 = new Version(1, 2, 3); Version v2 = new Version(1, 2, 4); Assert.assertTrue(v1.lessThan(v2)); Assert.assertTrue(v1.lessThanOrEqual(v2)); Assert.assertTrue(v2.greaterThan(v1)); Assert.assertTrue(v2.greaterThanOrEqual(v1)); Assert.assertTrue(v1.compareTo(v2) < 0); } @Test public void testQualifierComparisons() { Version v1 = new Version(1, 2, 3); Version v2 = new Version(1, 2, 3, "foo"); Version v3 = new Version(1, 2, 3, "yada"); Assert.assertFalse(v1.equals(v2)); Assert.assertFalse(v2.equals(v3)); Assert.assertTrue(v1.lessThan(v2)); Assert.assertTrue(v2.lessThan(v3)); } @Test public void testIncrements() { Version v0 = new Version(1, 2, 3); Version v1 = v0.incrementMajor(); Assert.assertEquals(v0.getMajor() + 1, v1.getMajor()); Assert.assertEquals(0, v1.getMinor()); Assert.assertEquals(0, v1.getMicro()); Version v2 = v0.incrementMinor(); Assert.assertEquals(v0.getMajor(), v2.getMajor()); Assert.assertEquals(0, v2.getMicro()); Version v3 = v0.incrementMicro(); Assert.assertEquals(v0.getMajor(), v3.getMajor()); Assert.assertEquals(v0.getMinor(), v3.getMinor()); Assert.assertEquals(v0.getMicro() + 1, v3.getMicro()); } /** * Test a variety of version parses */ @Test public void testVersionParses() { Assert.assertEquals(new Version(1, 2, 3), Version.parseVersion("1.2.3")); Assert.assertEquals(new Version(1, 2, 3, "foo"), Version.parseVersion("1.2.3.foo")); Assert.assertEquals(new Version(1, 2, 0), Version.parseVersion("1.2")); Assert.assertEquals(new Version(1, 2, 0, "foo"), Version.parseVersion("1.2.foo")); Assert.assertEquals(new Version(1, 0, 0), Version.parseVersion("1")); Assert.assertEquals(new Version(1, 0, 0, "foo"), Version.parseVersion("1.foo")); tryBadVersionParse("qwerty"); tryBadVersionParse("qwerty.foo"); tryBadVersionParse("1.qwerty.foo"); tryBadVersionParse("1.2.qwerty.foo"); } /** * Try a bad version parse. * * @param version * the bad version string */ private void tryBadVersionParse(String version) { try { Version.parseVersion(version); Assert.fail(String.format("Properly parsed bad version string %s", version)); } catch (Exception e) { } } @Test public void testRange() { Version version = new Version(1, 2, 3); // Test infinity match. Assert.assertTrue(new VersionRange(new Version(1, 2, 3)).contains(version)); Assert.assertTrue(new VersionRange(new Version(1, 2, 0)).contains(version)); Assert.assertFalse(new VersionRange(new Version(1, 2, 4)).contains(version)); // In range Assert.assertTrue(new VersionRange(new Version(1, 2, 3), new Version(1, 2, 4), true).contains(version)); Assert.assertTrue(new VersionRange(new Version(1, 2, 3), new Version(1, 2, 4), false).contains(version)); // Below range, both inclusive and exclusive. Assert.assertFalse(new VersionRange(new Version(1, 3, 3), new Version(1, 3, 4), true).contains(version)); // Above range Assert.assertFalse(new VersionRange(new Version(0, 3, 3), new Version(0, 3, 4), true).contains(version)); // Bump against max, inclusive Assert.assertTrue(new VersionRange(new Version(1, 2, 1), new Version(1, 2, 3), true).contains(version)); // Bump against max, exclusive Assert.assertFalse(new VersionRange(new Version(1, 2, 1), new Version(1, 2, 3), false).contains(version)); } /** * Test converting version ranges to strings. */ @Test public void testVersionRangeToString() { Assert.assertEquals("1.8.3", new VersionRange(new Version(1, 8, 3)).toString()); Assert.assertEquals("[1.8.3, 1.8.4]", new VersionRange(new Version(1, 8, 3), new Version(1, 8, 4), true).toString()); Assert.assertEquals("[1.8.3, 1.8.4)", new VersionRange(new Version(1, 8, 3), new Version(1, 8, 4), false).toString()); } /** * Test a variety of version parses */ @Test public void testVersionRangeParses() { Assert.assertEquals(new VersionRange(new Version(1, 2, 3)), VersionRange.parseVersionRange("1.2.3")); Assert.assertEquals(new VersionRange(new Version(1, 2, 0), new Version(2, 3, 0), false), VersionRange.parseVersionRange("[1.2, 2.3)")); Assert.assertEquals(new VersionRange(new Version(1, 2, 0), new Version(2, 3, 0), true), VersionRange.parseVersionRange("[1.2, 2.3]")); Assert.assertEquals(new VersionRange(new Version(1, 2, 0), new Version(1, 2, 1), false), VersionRange.parseVersionRange("=1.2")); tryBadVersionRangeParse("qwerty"); tryBadVersionRangeParse("[1]"); tryBadVersionRangeParse("[1)"); tryBadVersionRangeParse("1,2)"); tryBadVersionRangeParse("1,2]"); tryBadVersionRangeParse("[1 2)"); tryBadVersionRangeParse("[1 2]"); tryBadVersionRangeParse("[1 2"); tryBadVersionRangeParse("(1, 2)"); } /** * Try a bad version range parse. * * @param range * the bad version range string */ private void tryBadVersionRangeParse(String range) { try { VersionRange.parseVersionRange(range); Assert.fail(); } catch (Exception e) { } } }