import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class SemVerTest { @Test void parseAndToString() { assertEquals("1.2.3", SemVer.parse("1.2.3").toString()); assertEquals("1.0.0-rc.1", SemVer.parse(" 1.0.0-rc.1 ").toString()); } @Test void parseRejectsBadInput() { assertThrows(IllegalArgumentException.class, () -> SemVer.parse("")); assertThrows(IllegalArgumentException.class, () -> SemVer.parse(null)); assertThrows(IllegalArgumentException.class, () -> SemVer.parse("1.2")); assertThrows(IllegalArgumentException.class, () -> SemVer.parse("1.2.3.4")); assertThrows(IllegalArgumentException.class, () -> SemVer.parse("1.x.3")); } @Test void negativeRejected() { assertThrows(IllegalArgumentException.class, () -> new SemVer(1, -1, 0, null)); } @Test void bumps() { SemVer v = SemVer.parse("1.4.7-beta"); assertEquals("2.0.0", v.bumpMajor().toString()); assertEquals("1.5.0", v.bumpMinor().toString()); assertEquals("1.4.8", v.bumpPatch().toString()); } @Test void numericOrdering() { assertTrue(SemVer.parse("1.10.0").compareTo(SemVer.parse("1.9.9")) > 0); assertTrue(SemVer.parse("2.0.0").compareTo(SemVer.parse("10.0.0")) < 0); assertTrue(SemVer.parse("1.0.1").compareTo(SemVer.parse("1.0.0")) > 0); } @Test void preReleaseComesBeforeRelease() { assertTrue(SemVer.parse("1.0.0-rc.1").compareTo(SemVer.parse("1.0.0")) < 0); assertTrue(SemVer.parse("1.0.0").compareTo(SemVer.parse("1.0.0-alpha")) > 0); assertTrue(SemVer.parse("1.0.0-alpha").compareTo(SemVer.parse("1.0.0-beta")) < 0); } @Test void equalityAndPreReleaseFlag() { assertEquals(SemVer.parse("1.2.3"), new SemVer(1, 2, 3, "")); assertNotEquals(SemVer.parse("1.2.3"), SemVer.parse("1.2.3-rc")); assertEquals(SemVer.parse("1.2.3").hashCode(), new SemVer(1, 2, 3, null).hashCode()); assertTrue(SemVer.parse("1.0.0-rc").isPreRelease()); assertFalse(SemVer.parse("1.0.0").isPreRelease()); } }