/*
* PS3 Media Server, for streaming media to your PS3.
* Copyright (C) 2008-2013 A. Brochard.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; version 2
* of the License only.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package net.pms.util;
import static org.assertj.core.api.Assertions.*;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class VersionTest {
private final Version v(String version) {
return new Version(version);
}
private void assertVersionEquals(Version v1, Version v2) {
// non-nullity
assertFalse(v1 == null);
assertFalse(v2 == null);
// symmetry (and equality)
assertTrue(v1.equals(v2));
assertTrue(v2.equals(v1));
// reflexivity
assertTrue(v1.equals(v1));
assertTrue(v2.equals(v2));
// consistency
assertTrue(v1.equals(v2));
assertTrue(v2.equals(v1));
assertThat(v1.hashCode()).isEqualTo(v1.hashCode());
assertThat(v2.hashCode()).isEqualTo(v2.hashCode());
assertThat(v1.hashCode()).isEqualTo(v2.hashCode());
assertThat(v2.hashCode()).isEqualTo(v1.hashCode());
assertFalse(v1.isGreaterThan(v1));
assertFalse(v2.isGreaterThan(v2));
assertFalse(v1.isGreaterThan(v2));
assertFalse(v2.isGreaterThan(v1));
assertFalse(v1.isLessThan(v1));
assertFalse(v2.isLessThan(v2));
assertFalse(v1.isLessThan(v2));
assertFalse(v2.isLessThan(v1));
assertTrue(v1.isGreaterThanOrEqualTo(v1));
assertTrue(v2.isGreaterThanOrEqualTo(v2));
assertTrue(v1.isGreaterThanOrEqualTo(v2));
assertTrue(v2.isGreaterThanOrEqualTo(v1));
assertTrue(v1.isLessThanOrEqualTo(v1));
assertTrue(v2.isLessThanOrEqualTo(v2));
assertTrue(v1.isLessThanOrEqualTo(v2));
assertTrue(v2.isLessThanOrEqualTo(v1));
}
private void assertVersionIsGreaterThan(Version v1, Version v2) {
assertTrue(v1.isGreaterThan(v2));
assertFalse(v2.isGreaterThan(v1));
assertTrue(v2.isLessThan(v1));
assertFalse(v1.isLessThan(v2));
assertTrue(v1.isGreaterThanOrEqualTo(v2));
assertFalse(v2.isGreaterThanOrEqualTo(v1));
assertTrue(v2.isLessThanOrEqualTo(v1));
assertFalse(v1.isLessThanOrEqualTo(v2));
assertFalse(v1.equals(v2));
assertFalse(v2.equals(v1));
assertThat(v1.hashCode()).isNotEqualTo(v2.hashCode());
assertThat(v2.hashCode()).isNotEqualTo(v1.hashCode());
}
private void assertIsPmsUpdatable(Version v1, Version v2) {
assertVersionIsGreaterThan(v2, v1);
assertTrue(Version.isPmsUpdatable(v1, v2));
assertFalse(Version.isPmsUpdatable(v2, v1));
}
private void assertIsNotPmsUpdatable(Version v1, Version v2) {
assertVersionIsGreaterThan(v1, v2);
assertFalse(Version.isPmsUpdatable(v1, v2));
assertTrue(Version.isPmsUpdatable(v2, v1));
}
private void assertVersionToStringEquals(Version v, String s) {
assertThat(v.toString()).isEqualTo(s);
}
@Test
public void testTransitivity() {
Version v1 = v("1.1.1");
Version v2 = v("2.2.2");
Version v3 = v("3.3.3");
assertVersionIsGreaterThan(v2, v1);
assertVersionIsGreaterThan(v3, v2);
assertVersionIsGreaterThan(v3, v1);
Version va = v("2.2.2");
Version vb = v("2.2.2");
Version vc = v("2.2.2");
assertVersionEquals(vb, vc);
assertVersionEquals(va, vb);
assertVersionEquals(va, vc);
}
@Test
public void testToString() {
assertVersionToStringEquals(v(""), "0");
assertVersionToStringEquals(v("foo"), "0");
assertVersionToStringEquals(v("0"), "0");
assertVersionToStringEquals(v("0.0"), "0.0");
assertVersionToStringEquals(v("1"), "1");
assertVersionToStringEquals(v("1.2"), "1.2");
assertVersionToStringEquals(v("1.2.3"), "1.2.3");
assertVersionToStringEquals(v("1.2.3.4"), "1.2.3.4");
assertVersionToStringEquals(v("foo.1"), "0.1");
assertVersionToStringEquals(v("1.foo"), "1.0");
assertVersionToStringEquals(v("1.2-foo"), "1.0");
assertVersionToStringEquals(v("1.foo-2"), "1.0");
assertVersionToStringEquals(v("1.2-foo-2"), "1.0");
assertVersionToStringEquals(v("foo.42.bar"), "0.42.0");
assertVersionToStringEquals(v("foo-1.42.1-bar"), "0.42.0");
}
@Test
public void testEquals() {
assertVersionEquals(v(""), v(""));
assertVersionEquals(v(""), v("0"));
assertVersionEquals(v(""), v("00"));
assertVersionEquals(v(""), v("00.00"));
assertVersionEquals(v(""), v("0.0.0"));
assertVersionEquals(v(""), v("00.00.00"));
assertVersionEquals(v(""), v("0.0.0.0"));
assertVersionEquals(v(""), v("00.00.00.00"));
assertVersionEquals(v("foo"), v("0"));
assertVersionEquals(v("foo"), v("00"));
assertVersionEquals(v("foo"), v("0.0"));
assertVersionEquals(v("foo"), v("00.00"));
assertVersionEquals(v("foo"), v("0.0.0"));
assertVersionEquals(v("foo"), v("00.00.00"));
assertVersionEquals(v("foo"), v("0.0.0.0"));
assertVersionEquals(v("foo"), v("00.00.00.00"));
assertVersionEquals(v("1foo2"), v("0"));
assertVersionEquals(v("1foo2"), v("00"));
assertVersionEquals(v("1foo2"), v("0.0"));
assertVersionEquals(v("1foo2"), v("00.00"));
assertVersionEquals(v("1foo2"), v("0.0.0"));
assertVersionEquals(v("1foo2"), v("00.00.00"));
assertVersionEquals(v("1foo2"), v("0.0.0.0"));
assertVersionEquals(v("1foo2"), v("00.00.00.00"));
assertVersionEquals(v("2"), v("2"));
assertVersionEquals(v("2"), v("02"));
assertVersionEquals(v("2"), v("2.0"));
assertVersionEquals(v("2"), v("02.00"));
assertVersionEquals(v("2"), v("2.0.0"));
assertVersionEquals(v("2"), v("02.00.00"));
assertVersionEquals(v("2"), v("2.0.0.0"));
assertVersionEquals(v("2"), v("02.00.00.00"));
assertVersionEquals(v("2.2"), v("2.2"));
assertVersionEquals(v("2.2"), v("02.02"));
assertVersionEquals(v("2.2"), v("2.2.0"));
assertVersionEquals(v("2.2"), v("02.02.00"));
assertVersionEquals(v("2.2"), v("2.2.0.0"));
assertVersionEquals(v("2.2"), v("02.02.00.00"));
assertVersionEquals(v("2.2.2"), v("2.2.2"));
assertVersionEquals(v("2.2.2"), v("02.02.02"));
assertVersionEquals(v("2.2.2"), v("2.2.2.0"));
assertVersionEquals(v("2.2.2"), v("02.02.02.00"));
assertVersionEquals(v("2.2.2.2"), v("2.2.2.2"));
assertVersionEquals(v("2.2.2.2"), v("02.02.02.02"));
}
@Test
public void testIsGreaterThan() {
assertVersionIsGreaterThan(v("2"), v("1"));
assertVersionIsGreaterThan(v("2"), v("01"));
assertVersionIsGreaterThan(v("2"), v("1.0"));
assertVersionIsGreaterThan(v("2"), v("01.00"));
assertVersionIsGreaterThan(v("2"), v("1.0.0"));
assertVersionIsGreaterThan(v("2"), v("01.00.00"));
assertVersionIsGreaterThan(v("2"), v("1.0.0.0"));
assertVersionIsGreaterThan(v("2"), v("01.00.00.00"));
assertVersionIsGreaterThan(v("2.2"), v("2"));
assertVersionIsGreaterThan(v("2.2"), v("02"));
assertVersionIsGreaterThan(v("2.2"), v("2.0"));
assertVersionIsGreaterThan(v("2.2"), v("02.00"));
assertVersionIsGreaterThan(v("2.2"), v("2.0.0"));
assertVersionIsGreaterThan(v("2.2"), v("02.00.00"));
assertVersionIsGreaterThan(v("2.2"), v("2.0.0.0"));
assertVersionIsGreaterThan(v("2.2"), v("02.00.00.00"));
assertVersionIsGreaterThan(v("2.2.2"), v("2"));
assertVersionIsGreaterThan(v("2.2.2"), v("02"));
assertVersionIsGreaterThan(v("2.2.2"), v("2.0"));
assertVersionIsGreaterThan(v("2.2.2"), v("02.00"));
assertVersionIsGreaterThan(v("2.2.2"), v("2.0.0"));
assertVersionIsGreaterThan(v("2.2.2"), v("02.00.00"));
assertVersionIsGreaterThan(v("2.2.2"), v("2.0.0.0"));
assertVersionIsGreaterThan(v("2.2.2"), v("02.00.00.00"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("2"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("02"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("2.0"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("02.00"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("2.0.0"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("02.00.00"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("2.0.0.0"));
assertVersionIsGreaterThan(v("2.2.2.2"), v("02.00.00.00"));
}
@Test
public void testMajor() {
assertThat(v("0").getMajor()).isEqualTo(0);
assertThat(v("0.1").getMajor()).isEqualTo(0);
assertThat(v("0.1.2").getMajor()).isEqualTo(0);
assertThat(v("0.1.2.3").getMajor()).isEqualTo(0);
assertThat(v("1").getMajor()).isEqualTo(1);
assertThat(v("1.2").getMajor()).isEqualTo(1);
assertThat(v("1.2.3").getMajor()).isEqualTo(1);
assertThat(v("1.2.3.4").getMajor()).isEqualTo(1);
}
@Test
public void testMinor() {
assertThat(v("0").getMinor()).isEqualTo(0);
assertThat(v("0.1").getMinor()).isEqualTo(1);
assertThat(v("0.1.2").getMinor()).isEqualTo(1);
assertThat(v("0.1.2.3").getMinor()).isEqualTo(1);
assertThat(v("1").getMinor()).isEqualTo(0);
assertThat(v("1.2").getMinor()).isEqualTo(2);
assertThat(v("1.2.3").getMinor()).isEqualTo(2);
assertThat(v("1.2.3.4").getMinor()).isEqualTo(2);
}
@Test
public void testRevision() {
assertThat(v("0").getRevision()).isEqualTo(0);
assertThat(v("0.1").getRevision()).isEqualTo(0);
assertThat(v("0.1.2").getRevision()).isEqualTo(2);
assertThat(v("0.1.2.3").getRevision()).isEqualTo(2);
assertThat(v("1").getRevision()).isEqualTo(0);
assertThat(v("1.2").getRevision()).isEqualTo(0);
assertThat(v("1.2.3").getRevision()).isEqualTo(3);
assertThat(v("1.2.3.4").getRevision()).isEqualTo(3);
}
@Test
public void testBuild() {
assertThat(v("0").getBuild()).isEqualTo(0);
assertThat(v("0.1").getBuild()).isEqualTo(0);
assertThat(v("0.1.2").getBuild()).isEqualTo(0);
assertThat(v("0.1.2.3").getBuild()).isEqualTo(3);
assertThat(v("1").getBuild()).isEqualTo(0);
assertThat(v("1.2").getBuild()).isEqualTo(0);
assertThat(v("1.2.3").getBuild()).isEqualTo(0);
assertThat(v("1.2.3.4").getBuild()).isEqualTo(4);
}
@Test
public void testIsPmsUpdatable() {
assertIsPmsUpdatable(v("2"), v("2.0.1"));
assertIsPmsUpdatable(v("2"), v("02.00.01"));
assertIsPmsUpdatable(v("2"), v("2.0.1.0"));
assertIsPmsUpdatable(v("2"), v("02.00.01.00"));
assertIsPmsUpdatable(v("2.2"), v("2.2.1"));
assertIsPmsUpdatable(v("2.2"), v("02.02.01"));
assertIsPmsUpdatable(v("2.2"), v("2.2.0.1"));
assertIsPmsUpdatable(v("2.2"), v("02.02.00.01"));
assertIsPmsUpdatable(v("2.2.2"), v("2.2.3"));
assertIsPmsUpdatable(v("2.2.2"), v("02.02.03"));
assertIsPmsUpdatable(v("2.2.2"), v("2.2.2.1"));
assertIsPmsUpdatable(v("2.2.2"), v("02.02.02.01"));
assertIsPmsUpdatable(v("2.2.2.2"), v("2.2.2.3"));
assertIsPmsUpdatable(v("2.2.2.2"), v("02.02.02.03"));
assertIsPmsUpdatable(v("2.2.2.2"), v("2.2.3.0"));
assertIsPmsUpdatable(v("2.2.2.2"), v("02.02.03.00"));
}
@Test
public void testIsNotPmsUpdatable() {
assertIsNotPmsUpdatable(v("2"), v("1"));
assertIsNotPmsUpdatable(v("2"), v("01"));
assertIsNotPmsUpdatable(v("2"), v("1.0"));
assertIsNotPmsUpdatable(v("2"), v("01.00"));
assertIsNotPmsUpdatable(v("2"), v("1.0.0"));
assertIsNotPmsUpdatable(v("2"), v("01.00.00"));
assertIsNotPmsUpdatable(v("2"), v("1.0.0.0"));
assertIsNotPmsUpdatable(v("2"), v("01.00.00.00"));
assertIsNotPmsUpdatable(v("2.2"), v("1"));
assertIsNotPmsUpdatable(v("2.2"), v("01"));
assertIsNotPmsUpdatable(v("2.2"), v("1.0"));
assertIsNotPmsUpdatable(v("2.2"), v("01.00"));
assertIsNotPmsUpdatable(v("2.2"), v("1.0.0"));
assertIsNotPmsUpdatable(v("2.2"), v("01.00.00"));
assertIsNotPmsUpdatable(v("2.2"), v("1.0.0.0"));
assertIsNotPmsUpdatable(v("2.2"), v("01.00.00.00"));
assertIsNotPmsUpdatable(v("2.2"), v("2.1"));
assertIsNotPmsUpdatable(v("2.2"), v("02.01"));
assertIsNotPmsUpdatable(v("2.2"), v("2.1.0"));
assertIsNotPmsUpdatable(v("2.2"), v("02.01.00"));
assertIsNotPmsUpdatable(v("2.2"), v("2.1.0.0"));
assertIsNotPmsUpdatable(v("2.2"), v("02.01.00.00"));
assertIsNotPmsUpdatable(v("2.2.2"), v("1"));
assertIsNotPmsUpdatable(v("2.2.2"), v("01"));
assertIsNotPmsUpdatable(v("2.2.2"), v("1.0"));
assertIsNotPmsUpdatable(v("2.2.2"), v("01.00"));
assertIsNotPmsUpdatable(v("2.2.2"), v("1.0.0"));
assertIsNotPmsUpdatable(v("2.2.2"), v("01.00.00"));
assertIsNotPmsUpdatable(v("2.2.2"), v("1.0.0.0"));
assertIsNotPmsUpdatable(v("2.2.2"), v("01.00.00.00"));
assertIsNotPmsUpdatable(v("2.2.2"), v("2.1.0"));
assertIsNotPmsUpdatable(v("2.2.2"), v("02.01.00"));
assertIsNotPmsUpdatable(v("2.2.2"), v("2.1.0.0"));
assertIsNotPmsUpdatable(v("2.2.2"), v("02.01.00.00"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("1"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("01"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("1.0"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("01.00"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("1.0.0"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("01.00.00"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("1.0.0.0"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("01.00.00.00"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("2.1"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("02.01"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("2.1.0"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("02.01.00"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("2.1.0.0"));
assertIsNotPmsUpdatable(v("2.2.2.2"), v("02.01.00.00"));
}
}