diff --git a/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java b/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java index 08363fa..981f9bd 100644 --- a/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java +++ b/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java @@ -32,7 +32,7 @@ import java.util.regex.Pattern; */ class AlphaNumericVersion implements Comparable { - private String value; + private final String value; static final String FORMAT = "([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)"; private static final Pattern PATTERN = Pattern.compile("^" + FORMAT + "$"); diff --git a/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java b/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java index 909893e..51639b1 100644 --- a/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java +++ b/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java @@ -32,9 +32,9 @@ import java.util.regex.Pattern; */ class NormalVersion implements Comparable { - private int major; - private int minor; - private int patch; + private final int major; + private final int minor; + private final int patch; static final String FORMAT = "(\\d+)\\.(\\d+)\\.(\\d+)"; private static final Pattern PATTERN = Pattern.compile("^" + FORMAT + "$"); @@ -74,19 +74,16 @@ class NormalVersion implements Comparable { return patch; } - void incrementMajor() { - major = major + 1; - minor = 0; - patch = 0; + NormalVersion incrementMajor() { + return new NormalVersion(major + 1, 0, 0); } - void incrementMinor() { - minor = minor + 1; - patch = 0; + NormalVersion incrementMinor() { + return new NormalVersion(major, minor + 1, 0); } - void incrementPatch() { - patch = patch + 1; + NormalVersion incrementPatch() { + return new NormalVersion(major, minor, patch + 1); } @Override diff --git a/src/main/java/com/github/zafarkhaja/semver/Version.java b/src/main/java/com/github/zafarkhaja/semver/Version.java index b66bcba..072c2c2 100644 --- a/src/main/java/com/github/zafarkhaja/semver/Version.java +++ b/src/main/java/com/github/zafarkhaja/semver/Version.java @@ -32,9 +32,9 @@ import java.util.regex.Pattern; */ public class Version implements Comparable { - private NormalVersion normal; - private AlphaNumericVersion preRelease; - private AlphaNumericVersion build; + private final NormalVersion normal; + private final AlphaNumericVersion preRelease; + private final AlphaNumericVersion build; private static final String PRE_RELEASE_PREFIX = "-"; private static final String BUILD_PREFIX = "+"; @@ -92,16 +92,16 @@ public class Version implements Comparable { return new Version(normal, preRelease, build); } - public void incrementMajorVersion() { - normal.incrementMajor(); + public Version incrementMajorVersion() { + return new Version(normal.incrementMajor(), preRelease, build); } - public void incrementMinorVersion() { - normal.incrementMinor(); + public Version incrementMinorVersion() { + return new Version(normal.incrementMinor(), preRelease, build); } - public void incrementPatchVersion() { - normal.incrementPatch(); + public Version incrementPatchVersion() { + return new Version(normal.incrementPatch(), preRelease, build); } public int getMajorVersion() { diff --git a/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java b/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java index 7bab8c0..587e312 100644 --- a/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java +++ b/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java @@ -72,30 +72,30 @@ public class NormalVersionTest { public void mustIncreaseEachElementNumericallyByIncrementsOfOne() { int major = 1, minor = 2, patch = 3; NormalVersion v = new NormalVersion(major, minor, patch); - v.incrementPatch(); - assertEquals(patch + 1, v.getPatch()); - v.incrementMinor(); - assertEquals(minor + 1, v.getMinor()); - v.incrementMajor(); - assertEquals(major + 1, v.getMajor()); + NormalVersion incrementedPatch = v.incrementPatch(); + assertEquals(patch + 1, incrementedPatch.getPatch()); + NormalVersion incrementedMinor = v.incrementMinor(); + assertEquals(minor + 1, incrementedMinor.getMinor()); + NormalVersion incrementedMajor = v.incrementMajor(); + assertEquals(major + 1, incrementedMajor.getMajor()); } @Test public void mustResetMinorAndPatchToZeroWhenMajorIsIncremented() { NormalVersion v = new NormalVersion(1, 2, 3); - v.incrementMajor(); - assertEquals(2, v.getMajor()); - assertEquals(0, v.getMinor()); - assertEquals(0, v.getPatch()); + NormalVersion incremented = v.incrementMajor(); + assertEquals(2, incremented.getMajor()); + assertEquals(0, incremented.getMinor()); + assertEquals(0, incremented.getPatch()); } @Test public void mustResetPatchToZeroWhenMinorIsIncremented() { NormalVersion v = new NormalVersion(1, 2, 3); - v.incrementMinor(); - assertEquals(1, v.getMajor()); - assertEquals(3, v.getMinor()); - assertEquals(0, v.getPatch()); + NormalVersion incremented = v.incrementMinor(); + assertEquals(1, incremented.getMajor()); + assertEquals(3, incremented.getMinor()); + assertEquals(0, incremented.getPatch()); } @Test @@ -122,6 +122,17 @@ public class NormalVersionTest { assertEquals(2, v.getMinor()); assertEquals(3, v.getPatch()); } + + @Test + public void shoudBeImmutable() { + NormalVersion version = new NormalVersion(1, 2, 3); + NormalVersion incementedMajor = version.incrementMajor(); + assertNotSame(version, incementedMajor); + NormalVersion incementedMinor = version.incrementMinor(); + assertNotSame(version, incementedMinor); + NormalVersion incementedPatch = version.incrementPatch(); + assertNotSame(version, incementedPatch); + } } public static class EqualsMethodTest { diff --git a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java index e1286c7..d8fe02a 100644 --- a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java +++ b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java @@ -154,22 +154,33 @@ public class VersionTest { @Test public void shouldProvideIncrementMajorVersionMethod() { Version v = Version.valueOf("1.2.3"); - v.incrementMajorVersion(); - assertEquals("2.0.0", v.toString()); + Version incrementedMajor = v.incrementMajorVersion(); + assertEquals("2.0.0", incrementedMajor.toString()); } @Test public void shouldProvideIncrementMinorVersionMethod() { Version v = Version.valueOf("1.2.3"); - v.incrementMinorVersion(); - assertEquals("1.3.0", v.toString()); + Version incrementedMinor = v.incrementMinorVersion(); + assertEquals("1.3.0", incrementedMinor.toString()); } @Test public void shouldProvideIncrementPatchVersionMethod() { Version v = Version.valueOf("1.2.3"); - v.incrementPatchVersion(); - assertEquals("1.2.4", v.toString()); + Version incrementedPatch = v.incrementPatchVersion(); + assertEquals("1.2.4", incrementedPatch.toString()); + } + + @Test + public void shouldBeImmutable() { + Version version = Version.valueOf("1.2.3"); + Version incementedMajor = version.incrementMajorVersion(); + assertNotSame(version, incementedMajor); + Version incementedMinor = version.incrementMinorVersion(); + assertNotSame(version, incementedMinor); + Version incementedPatch = version.incrementPatchVersion(); + assertNotSame(version, incementedPatch); } }