package org.cloudsmith.geppetto.semver.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.cloudsmith.geppetto.semver.Version;
import org.junit.Test;
/**
* Unit tests for Version.
*/
public class VersionTest {
@Test
public void badNegativeNumbers() {
try {
Version.create(1, 0, -1);
fail("should not create version with negative numbers");
}
catch(IllegalArgumentException e) {
}
}
@Test
public void badPreReleaseSeparator() {
try {
Version.create("0.0.0.alpha");
fail("should not permit '.' as pre-release separator");
}
catch(IllegalArgumentException e) {
}
}
@Test
public void badPreReleaseString() {
try {
Version.create("0.0.0-bad=qualifier");
fail("should not create version illegal characters in pre-release");
}
catch(IllegalArgumentException e) {
}
}
@Test
public void emptyPreReleaseLessThanNoPreRelease() {
try {
assertTrue(Version.create("1.0.0").compareTo(Version.create("1.0.0-")) > 0);
}
catch(IllegalArgumentException e) {
fail(e.getMessage());
}
}
@Test
public void emptyPreReleaseLessThanOtherPreRelease() {
try {
assertTrue(Version.create("1.0.0-alpha").compareTo(Version.create("1.0.0-")) > 0);
}
catch(IllegalArgumentException e) {
fail(e.getMessage());
}
}
@Test
public void numbersMagnitude() {
try {
assertTrue(Version.create("0.0.1").compareTo(Version.create("0.0.2")) < 0);
assertTrue(Version.create("0.0.9").compareTo(Version.create("0.1.0")) < 0);
assertTrue(Version.create("0.9.9").compareTo(Version.create("1.0.0")) < 0);
assertTrue(Version.create("1.9.0").compareTo(Version.create("1.10.0")) < 0);
assertTrue(Version.create("1.10.0").compareTo(Version.create("1.11.0")) < 0);
}
catch(IllegalArgumentException e) {
fail(e.getMessage());
}
}
@Test
public void okStringVersions() {
try {
assertEquals(Version.create(0, 0, 0), Version.create("0.0.0"));
assertEquals(Version.create(0, 0, 1), Version.create("0.0.1"));
assertEquals(Version.create(0, 1, 0), Version.create("0.1.0"));
assertEquals(Version.create(1, 0, 0), Version.create("1.0.0"));
assertEquals(Version.create(0, 0, 0, "alpha"), Version.create("0.0.0-alpha"));
assertEquals(Version.create(0, 0, 1, "alpha"), Version.create("0.0.1-alpha"));
assertEquals(Version.create(0, 1, 0, "alpha"), Version.create("0.1.0-alpha"));
assertEquals(Version.create(1, 0, 0, "alpha"), Version.create("1.0.0-alpha"));
}
catch(IllegalArgumentException e) {
fail(e.getMessage());
}
}
@Test
public void preReleaseLessThanVersion() {
try {
assertTrue(Version.create("1.0.0").compareTo(Version.create("1.0.0-alpha")) > 0);
}
catch(IllegalArgumentException e) {
fail(e.getMessage());
}
}
@Test
public void preReleaseMagnitude() {
try {
assertTrue(Version.create("1.0.0-alpha1").compareTo(Version.create("1.0.0-beta1")) < 0);
assertTrue(Version.create("1.0.0-beta1").compareTo(Version.create("1.0.0-beta2")) < 0);
assertTrue(Version.create("1.0.0-beta2").compareTo(Version.create("1.0.0-rc1")) < 0);
}
catch(IllegalArgumentException e) {
fail(e.getMessage());
}
}
@Test
public void tooFewDigits() {
try {
Version.create("0.0");
fail("should not create version with just two digits");
}
catch(IllegalArgumentException e) {
}
}
}