/** * Copyright (c) 2012 Cloudsmith Inc. and other contributors, as listed below. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cloudsmith * */ package org.cloudsmith.geppetto.semver.tests; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.cloudsmith.geppetto.semver.Version; import org.cloudsmith.geppetto.semver.VersionRange; import org.junit.Assert; import org.junit.Test; /** * Unit tests for VersionRange. */ public class VersionRangeTest { @Test public void dashRange() { VersionRange range = VersionRange.create("1.2.0 - 1.3.0"); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertTrue(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 3, 0))); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 3, 1))); range = VersionRange.create("1.2.0 - 1.3.0-"); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertFalse(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 3, 0))); range = VersionRange.create("1.2.0- - 1.3.0"); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertTrue(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 3, 0))); assertTrue(range.isIncluded(Version.create(1, 2, 0, "alpha"))); } @Test public void greater() { try { VersionRange range = VersionRange.create(">1.2.0"); assertTrue(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 9, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 1))); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 2, 0))); range = VersionRange.create(">1.2.0--"); assertTrue(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertFalse(range.isIncluded(Version.create(1, 1, 9))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void greaterEqual() { try { VersionRange range = VersionRange.create(">=1.2.0"); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertTrue(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 9, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 1))); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alpha"))); range = VersionRange.create(">=1.2.0--"); assertTrue(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertTrue(range.isIncluded(Version.create(1, 2, 0, "-"))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void impossible() { testImpossibleRange("1.2.3 < 1.3.0"); testImpossibleRange("<1.2.3 <=1.3.0"); testImpossibleRange(">=1.2.3 1.3.0"); testImpossibleRange(">=1.2.3 >1.3.0"); testImpossibleRange("1.2.3 1.3.0"); testImpossibleRange("=1.2.3 - 1.3.0"); testImpossibleRange("=1.2.x"); testImpossibleRange("=1.2"); testImpossibleRange("~1.2.x"); testImpossibleRange("~1.2.3-alpha"); testImpossibleRange("~1.2.x-alpha"); testImpossibleRange("~1.2-alpha"); } @Test public void intersection() { try { VersionRange range1 = VersionRange.create(">1.2.0"); VersionRange range2 = VersionRange.create("<1.2.0"); assertNull(range1.intersect(range2)); range1 = VersionRange.create(">1.2.0"); range2 = VersionRange.create("<=1.2.0"); assertNull(range1.intersect(range2)); range1 = VersionRange.create(">=1.2.0"); range2 = VersionRange.create("<=1.2.0"); assertNotNull(range1.intersect(range2)); range1 = VersionRange.create(">=1.2.0 <1.3.0--"); range2 = VersionRange.create(">=1.3.0"); assertNull(range1.intersect(range2)); range1 = VersionRange.create(">=1.2.0 <1.3.0--"); range2 = VersionRange.create(">=1.2.1 <1.2.2--"); assertNotNull(range1.intersect(range2)); range1 = VersionRange.create("<1.3.0-- >=1.2.0"); range2 = VersionRange.create("<1.2.2-- >=1.2.1"); assertNotNull(range1.intersect(range2)); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void less() { try { VersionRange range = VersionRange.create("<1.2.0"); assertTrue(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 1, 9, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 1, 9))); assertFalse(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 2, 0))); range = VersionRange.create("<1.2.0--"); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 1, 9, "alpha"))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void lessEqual() { try { VersionRange range = VersionRange.create("<=1.2.0"); assertTrue(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 1, 9, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 1, 9))); assertFalse(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 0))); range = VersionRange.create("<=1.2.0--"); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 0, "-"))); assertTrue(range.isIncluded(Version.create(1, 1, 9, "alpha"))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void majorMinorX() { try { VersionRange range = VersionRange.create("1.2.x"); assertFalse(range.isIncluded(Version.create(1, 1, 9))); assertFalse(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertTrue(range.isIncluded(Version.create(1, 2, 2))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void majorX() { try { VersionRange range = VersionRange.create("1.x"); assertFalse(range.isIncluded(Version.create(0, 9, 9))); assertFalse(range.isIncluded(Version.create(2, 0, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 0, 0, "alpha"))); assertTrue(range.isIncluded(Version.create(1, 0, 0))); assertTrue(range.isIncluded(Version.create(1, 0, 2))); assertTrue(range.isIncluded(Version.create(1, 2, 0))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } @Test public void specific() { try { VersionRange range = VersionRange.exact(Version.create(1, 0, 0)); assertFalse(range.isIncluded(Version.create(0, 9, 9))); assertFalse(range.isIncluded(Version.create(1, 0, 1))); assertFalse(range.isIncluded(Version.create(1, 0, 0, "alpha"))); assertTrue(range.isIncluded(Version.create("1.0.0"))); range = VersionRange.create("1.0.0"); assertFalse(range.isIncluded(Version.create(0, 9, 9))); assertFalse(range.isIncluded(Version.create(1, 0, 1))); assertFalse(range.isIncluded(Version.create(1, 0, 0, "alpha"))); assertTrue(range.isIncluded(Version.create("1.0.0"))); range = VersionRange.create(">=1.0.0 <=1.0.0"); assertFalse(range.isIncluded(Version.create(0, 9, 9))); assertFalse(range.isIncluded(Version.create(1, 0, 1))); assertFalse(range.isIncluded(Version.create(1, 0, 0, "alpha"))); assertTrue(range.isIncluded(Version.create("1.0.0"))); } catch(IllegalArgumentException e) { fail(e.getMessage()); } } private void testImpossibleRange(String range) { try { VersionRange.create(range); fail("should not create impossible range '" + range + '\''); } catch(IllegalArgumentException e) { } } @Test public void tildeVersions() { try { VersionRange range = VersionRange.create("~1.2.3"); assertFalse(range.isIncluded(Version.create(1, 2, 3, "alhpa"))); assertTrue(range.isIncluded(Version.create(1, 2, 3))); assertTrue(range.isIncluded(Version.create(1, 2, 10))); assertFalse(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 3, 0))); range = VersionRange.create("~1.2"); assertFalse(range.isIncluded(Version.create(1, 2, 0, "alhpa"))); assertTrue(range.isIncluded(Version.create(1, 2, 0))); assertTrue(range.isIncluded(Version.create(1, 2, 10))); assertFalse(range.isIncluded(Version.create(1, 3, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 3, 0))); range = VersionRange.create("~1"); assertFalse(range.isIncluded(Version.create(1, 0, 0, "alhpa"))); assertTrue(range.isIncluded(Version.create(1, 0, 0))); assertTrue(range.isIncluded(Version.create(1, 0, 10))); assertFalse(range.isIncluded(Version.create(1, 1, 0, "alpha"))); assertFalse(range.isIncluded(Version.create(1, 1, 0))); } catch(IllegalArgumentException e) { Assert.fail(e.getMessage()); } } }