/* * Copyright 2015 Open mHealth * * 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 org.openmhealth.schema.domain.omh; import org.testng.annotations.Test; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.openmhealth.schema.domain.omh.SchemaVersion.isValidVersion; /** * @author Emerson Farrugia */ public class SchemaVersionUnitTests { @Test(expectedExceptions = NullPointerException.class) public void stringConstructorShouldThrowExceptionOnUndefinedVersion() { new SchemaVersion(null); } @Test(expectedExceptions = IllegalArgumentException.class) public void stringConstructorShouldThrowExceptionOnMalformedVersion() { new SchemaVersion("a"); } @Test(expectedExceptions = IllegalArgumentException.class) public void stringConstructorShouldThrowExceptionOnNegativeMajorVersion() { new SchemaVersion("-2.1"); } @Test(expectedExceptions = IllegalArgumentException.class) public void stringConstructorShouldThrowExceptionOnMalformedMajorVersion() { new SchemaVersion("a.1"); } @Test(expectedExceptions = IllegalArgumentException.class) public void stringConstructorShouldThrowExceptionOnNegativeMinorVersion() { new SchemaVersion("2.-1"); } @Test(expectedExceptions = IllegalArgumentException.class) public void stringConstructorShouldThrowExceptionOnMalformedMinorVersion() { new SchemaVersion("2.a"); } @Test(expectedExceptions = IllegalArgumentException.class) public void stringConstructorShouldThrowExceptionOnMalformedQualifier() { new SchemaVersion("2.1.%"); } @Test public void stringConstructorShouldSupportZeroMajorVersion() { SchemaVersion schemaVersion = new SchemaVersion("0.1"); assertThat(schemaVersion, notNullValue()); assertThat(schemaVersion.getMajor(), equalTo(0)); assertThat(schemaVersion.getMinor(), equalTo(1)); assertThat(schemaVersion.getQualifier().isPresent(), equalTo(false)); } @Test public void stringConstructorShouldSupportZeroMinorVersion() { SchemaVersion schemaVersion = new SchemaVersion("3.0"); assertThat(schemaVersion, notNullValue()); assertThat(schemaVersion.getMajor(), equalTo(3)); assertThat(schemaVersion.getMinor(), equalTo(0)); assertThat(schemaVersion.getQualifier().isPresent(), equalTo(false)); } @Test public void stringConstructorShouldSupportQualifier() { SchemaVersion schemaVersion = new SchemaVersion("2.1.RELEASE"); assertThat(schemaVersion, notNullValue()); assertThat(schemaVersion.getMajor(), equalTo(2)); assertThat(schemaVersion.getMinor(), equalTo(1)); assertThat(schemaVersion.getQualifier().isPresent(), equalTo(true)); assertThat(schemaVersion.getQualifier().get(), equalTo("RELEASE")); } @Test(expectedExceptions = IllegalArgumentException.class) public void numericConstructorShouldThrowExceptionOnNegativeMajorVersion() { new SchemaVersion(-2, 1, null); } @Test(expectedExceptions = IllegalArgumentException.class) public void numericConstructorShouldThrowExceptionOnNegativeMinorVersion() { new SchemaVersion(2, -1, null); } @Test(expectedExceptions = IllegalArgumentException.class) public void numericConstructorShouldThrowExceptionOnMalformedQualifier() { new SchemaVersion(-2, 1, "%"); } @Test public void numericConstructorShouldSupportZeroMajorVersion() { SchemaVersion schemaVersion = new SchemaVersion(0, 1); assertThat(schemaVersion, notNullValue()); assertThat(schemaVersion.getMajor(), equalTo(0)); assertThat(schemaVersion.getMinor(), equalTo(1)); assertThat(schemaVersion.getQualifier().isPresent(), equalTo(false)); } @Test public void numericConstructorShouldSupportZeroMinorVersion() { SchemaVersion schemaVersion = new SchemaVersion(3, 0); assertThat(schemaVersion, notNullValue()); assertThat(schemaVersion.getMajor(), equalTo(3)); assertThat(schemaVersion.getMinor(), equalTo(0)); assertThat(schemaVersion.getQualifier().isPresent(), equalTo(false)); } @Test public void numericConstructorShouldSupportQualifier() { SchemaVersion schemaVersion = new SchemaVersion(2, 1, "RELEASE"); assertThat(schemaVersion, notNullValue()); assertThat(schemaVersion.getMajor(), equalTo(2)); assertThat(schemaVersion.getMinor(), equalTo(1)); assertThat(schemaVersion.getQualifier().isPresent(), equalTo(true)); assertThat(schemaVersion.getQualifier().get(), equalTo("RELEASE")); } @Test public void isValidVersionShouldReturnTrueOnUndefinedVersion() { assertThat(isValidVersion(null), equalTo(true)); } @Test public void isValidVersionShouldReturnFalseOnMalformedVersion() { assertThat(isValidVersion("a"), equalTo(false)); } @Test public void isValidVersionShouldReturnFalseOnNegativeMajorVersion() { assertThat(isValidVersion("-2.1"), equalTo(false)); } @Test public void isValidVersionShouldReturnFalseOnMalformedMajorVersion() { assertThat(isValidVersion("a.1"), equalTo(false)); } @Test public void isValidVersionShouldReturnFalseOnNegativeMinorVersion() { assertThat(isValidVersion("2.-1"), equalTo(false)); } @Test public void isValidVersionShouldReturnFalseOnMalformedMinorVersion() { assertThat(isValidVersion("2.a"), equalTo(false)); } @Test public void isValidVersionShouldReturnFalseOnMalformedQualifier() { assertThat(isValidVersion("2.1.%"), equalTo(false)); } @Test public void isValidVersionShouldReturnTrueOnZeroMajorVersion() { assertThat(isValidVersion("0.1"), equalTo(true)); } @Test public void isValidVersionShouldReturnTrueOnZeroMinorVersion() { assertThat(isValidVersion("3.0"), equalTo(true)); } @Test public void isValidVersionShouldReturnTrueOnQualifier() { assertThat(isValidVersion("2.1.RELEASE"), equalTo(true)); } @Test public void compareToShouldOrderByMajorVersionFirst() { assertThat(new SchemaVersion("0.1").compareTo(new SchemaVersion("1.0")), equalTo(-1)); assertThat(new SchemaVersion("0.1").compareTo(new SchemaVersion("1.0.RC1")), equalTo(-1)); assertThat(new SchemaVersion("0.1.RC1").compareTo(new SchemaVersion("1.0")), equalTo(-1)); assertThat(new SchemaVersion("0.1.RC2").compareTo(new SchemaVersion("1.0.RC1")), equalTo(-1)); assertThat(new SchemaVersion("2.1").compareTo(new SchemaVersion("1.0")), equalTo(1)); assertThat(new SchemaVersion("2.1").compareTo(new SchemaVersion("1.0.RC1")), equalTo(1)); assertThat(new SchemaVersion("2.1.RC1").compareTo(new SchemaVersion("1.0")), equalTo(1)); assertThat(new SchemaVersion("2.1.RC2").compareTo(new SchemaVersion("1.0.RC3")), equalTo(1)); } @Test public void compareToShouldOrderByMinorVersionSecond() { assertThat(new SchemaVersion("1.1").compareTo(new SchemaVersion("1.2")), equalTo(-1)); assertThat(new SchemaVersion("1.1.RC1").compareTo(new SchemaVersion("1.2")), equalTo(-1)); assertThat(new SchemaVersion("1.1").compareTo(new SchemaVersion("1.2.RC1")), equalTo(-1)); assertThat(new SchemaVersion("1.1.RC1").compareTo(new SchemaVersion("1.2.RC1")), equalTo(-1)); assertThat(new SchemaVersion("1.3").compareTo(new SchemaVersion("1.2")), equalTo(1)); assertThat(new SchemaVersion("1.3.RC1").compareTo(new SchemaVersion("1.2")), equalTo(1)); assertThat(new SchemaVersion("1.3").compareTo(new SchemaVersion("1.2.RC1")), equalTo(1)); assertThat(new SchemaVersion("1.3.RC1").compareTo(new SchemaVersion("1.2.RC1")), equalTo(1)); assertThat(new SchemaVersion("1.1").compareTo(new SchemaVersion("1.1")), equalTo(0)); } @Test public void compareToShouldOrderByQualifierPresenceThird() { assertThat(new SchemaVersion("1.1.RC1").compareTo(new SchemaVersion("1.1")), equalTo(-1)); assertThat(new SchemaVersion("1.1").compareTo(new SchemaVersion("1.1.RC2")), equalTo(1)); } @Test public void compareToShouldOrderByQualifierFourth() { assertThat(new SchemaVersion("1.1.RC1").compareTo(new SchemaVersion("1.1.RC2")), equalTo(-1)); assertThat(new SchemaVersion("3.0.RC3").compareTo(new SchemaVersion("3.0.RC2")), equalTo(1)); assertThat(new SchemaVersion("3.0.RC3").compareTo(new SchemaVersion("3.0.RC3")), equalTo(0)); } }