blob: b509798a9c22f198662ad4f87769d3020382dfcb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 Cloudsmith Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Cloudsmith Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.p2.tests.omniVersion;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import org.eclipse.equinox.p2.metadata.Version;
import org.junit.Test;
/**
* Tests versions specified with default OSGi version strings and tests OSGi compatibility
* for versions specified using raw.
*
*/
public class OSGiVersionTest extends VersionTesting {
@Test
public void testBasicParsing() {
// should parse without exception
assertNotNull(Version.parseVersion("1"));
assertNotNull(Version.parseVersion("1.0"));
assertNotNull(Version.parseVersion("1.0.0"));
assertNotNull(Version.parseVersion("1.0.0.9"));
assertNotNull(Version.parseVersion("1.0.0.r12345"));
assertNotNull(Version.parseVersion("1.0.0.r12345_hello"));
}
@Test
public void testOSGiStrings() {
Version v = Version.parseVersion(null);
assertEquals("0.0.0", v.toString());
assertNotNull(v = Version.parseVersion(""));
assertEquals("0.0.0", v.toString());
assertNotNull(v = Version.parseVersion("1"));
assertEquals("1.0.0", v.toString());
assertNotNull(v = Version.parseVersion("1.0"));
assertEquals("1.0.0", v.toString());
assertNotNull(v = Version.parseVersion("1.0.0"));
assertEquals("1.0.0", v.toString());
assertNotNull(v = Version.parseVersion("1.0.0.9"));
assertEquals("1.0.0.9", v.toString());
assertNotNull(v = Version.parseVersion("1.0.0.r12345"));
assertEquals("1.0.0.r12345", v.toString());
assertNotNull(v = Version.parseVersion("1.0.0.r12345_hello"));
assertEquals("1.0.0.r12345_hello", v.toString());
}
@Test
public void testSerialize() {
Version v = null;
assertNotNull(v = Version.parseVersion("1"));
assertSerialized(v);
assertNotNull(v = Version.parseVersion("1.0"));
assertSerialized(v);
assertNotNull(v = Version.parseVersion("1.0.0"));
assertSerialized(v);
assertNotNull(v = Version.parseVersion("1.0.0.9"));
assertSerialized(v);
assertNotNull(v = Version.parseVersion("1.0.0.r12345"));
assertSerialized(v);
assertNotNull(v = Version.parseVersion("1.0.0.r12345_hello"));
assertSerialized(v);
}
@Test
public void testNegativeFirstValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("-1"));
}
@Test
public void testPeriodInQualifier() {
assertThrows("Uncaught exception: period is not allowed in osgi qualifier", IllegalArgumentException.class,
() -> Version.parseVersion("1.0.0.sailor.moon"));
}
@Test
public void testNegativeSecondValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("1.-1"));
}
@Test
public void testNegativeThirdValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("1.0.-1"));
}
@Test
public void testEmptyFourthValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("1.0.0."));
}
@Test
public void testStringFirstValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("a"));
}
@Test
public void testStringSecondValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("1.a"));
}
@Test
public void testStringThirdValue() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("1.0.a"));
}
@Test
public void testSinglePeriod() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("."));
}
@Test
public void testTwoPeriods() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion(".."));
}
@Test
public void testThreePeriods() {
assertThrows(IllegalArgumentException.class, () -> Version.parseVersion("..."));
}
@Test
public void testEquality() {
// should parse without exception
Version v1 = Version.parseVersion("1");
Version v2 = Version.parseVersion("1.0");
Version v3 = Version.parseVersion("1.0.0");
Version v4 = Version.parseVersion("1.0.0.9");
Version v5 = Version.parseVersion("1.0.0.r12345");
assertEquals(v1, v2);
assertEquals(v1, v3);
assertEquals(v2, v3);
assertOrder(v3, v4); // i.e. not equal
assertOrder(v4, v5); // i.e. not equal
}
@Test
public void testVersionCompare() {
// should parse without exception
Version v1 = Version.parseVersion("1");
Version v2 = Version.parseVersion("1.0.1");
Version v3 = Version.parseVersion("1.1");
Version v4 = Version.parseVersion("1.1.1");
Version v5 = Version.parseVersion("1.1.1.-");
Version v6 = Version.parseVersion("1.2");
Version v7 = Version.parseVersion("2");
Version v8 = Version.parseVersion("10.0");
assertOrder(v1, v2);
assertOrder(v2, v3);
assertOrder(v3, v4);
assertOrder(v4, v5);
assertOrder(v5, v6);
assertOrder(v6, v7);
assertOrder(v7, v8);
}
@Test
public void testCompatability() {
Version v = Version.parseVersion("raw:1.2.3.'foo'");
assertNotNull(v);
assertTrue("a raw:1.2.3.'foo' compatible with OSGi", v.isOSGiCompatible());
assertNotNull(v = Version.parseVersion("raw:1.2.3"));
assertTrue("a raw:1.2.3 compatible with OSGi", v.isOSGiCompatible());
assertNotNull(v = Version.parseVersion("raw:1.2.3p''"));
assertFalse("a raw:1.2.3p'' not compatible with OSGi", v.isOSGiCompatible());
assertNotNull(v = Version.parseVersion("raw:1.2.3.4"));
assertFalse("a raw (4th is int) not compatible with OSGi", v.isOSGiCompatible());
assertNotNull(v = Version.parseVersion("raw:1.2.3.'foo'.'bar'"));
assertFalse("a raw (5 elements) not compatible with OSGi", v.isOSGiCompatible());
assertNotNull(v = Version.parseVersion("raw:1.2"));
assertFalse("a raw (only 2 elements) not compatible with OSGi", v.isOSGiCompatible());
assertNotNull(v = Version.parseVersion("raw:1.2.3.' %@'"));
assertFalse("a raw (illegal chars in qualifier) not compatible with OSGi", v.isOSGiCompatible());
}
}