[jsemver] 12/95: Make minor improvements
Alexandre Viau
reazem-guest at moszumanska.debian.org
Mon Feb 16 14:58:25 UTC 2015
This is an automated email from the git hooks/post-receive script.
reazem-guest pushed a commit to branch master
in repository jsemver.
commit 838d40e90e835fce39f9833e61dd60118666e6ec
Author: Zafar Khaja <zafarkhaja at gmail.com>
Date: Sun Mar 3 23:44:34 2013 +0400
Make minor improvements
---
pom.xml | 4 +-
.../zafarkhaja/semver/AlphaNumericVersion.java | 34 ++++----
.../github/zafarkhaja/semver/NormalVersion.java | 20 ++---
.../java/com/github/zafarkhaja/semver/Version.java | 90 ++++++++++++----------
.../zafarkhaja/semver/AlphaNumericVersionTest.java | 24 +++---
.../zafarkhaja/semver/NormalVersionTest.java | 34 ++++----
.../com/github/zafarkhaja/semver/VersionTest.java | 38 ++++-----
7 files changed, 124 insertions(+), 120 deletions(-)
diff --git a/pom.xml b/pom.xml
index abccb5a..567f4bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
<groupId>com.github.zafarkhaja</groupId>
<artifactId>semver</artifactId>
- <version>0.2.0-SNAPSHOT</version>
+ <version>0.2.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>semver</name>
@@ -46,7 +46,7 @@
<scope>test</scope>
</dependency>
</dependencies>
-
+
<build>
<plugins>
<plugin>
diff --git a/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java b/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java
index b68acfc..08363fa 100644
--- a/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java
+++ b/src/main/java/com/github/zafarkhaja/semver/AlphaNumericVersion.java
@@ -27,21 +27,19 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
- *
+ *
* @author Zafar Khaja <zafarkhaja at gmail.com>
*/
class AlphaNumericVersion implements Comparable<AlphaNumericVersion> {
-
+
+ private String value;
+
static final String FORMAT = "([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)";
private static final Pattern PATTERN = Pattern.compile("^" + FORMAT + "$");
-
- private String value;
-
+
AlphaNumericVersion(String value) {
if (value == null) {
- throw new NullPointerException(
- "Alpha-numeric version MUST NOT be NULL"
- );
+ throw new NullPointerException("Alpha-numeric version MUST NOT be NULL");
}
Matcher matcher = PATTERN.matcher(value);
if (!matcher.matches()) {
@@ -51,40 +49,40 @@ class AlphaNumericVersion implements Comparable<AlphaNumericVersion> {
}
this.value = matcher.group(0);
}
-
+
@Override
public boolean equals(Object other) {
if (this == other) {
- return true;
+ return true;
}
if (!(other instanceof AlphaNumericVersion)) {
return false;
}
return compareTo((AlphaNumericVersion) other) == 0 ? true : false;
}
-
+
@Override
public int hashCode() {
return value.hashCode();
}
-
+
@Override
public String toString() {
return value;
}
-
+
@Override
public int compareTo(AlphaNumericVersion other) {
String[] thisIds = value.split("\\.");
String[] otherIds = other.value.split("\\.");
-
+
int result = compareIdentifierArrays(thisIds, otherIds);
if (result == 0) {
result = thisIds.length - otherIds.length;
}
return result;
}
-
+
private int compareIdentifierArrays(String[] ids1, String[] ids2) {
int result = 0;
int length = getLeastCommonArrayLength(ids1, ids2);
@@ -96,11 +94,11 @@ class AlphaNumericVersion implements Comparable<AlphaNumericVersion> {
}
return result;
}
-
+
private int getLeastCommonArrayLength(String[] arr1, String[] arr2) {
return arr1.length <= arr2.length ? arr1.length : arr2.length;
}
-
+
private int compareIdentifiers(String id1, String id2) {
if (isInt(id1) && isInt(id2)) {
return Integer.parseInt(id1) - Integer.parseInt(id2);
@@ -108,7 +106,7 @@ class AlphaNumericVersion implements Comparable<AlphaNumericVersion> {
return id1.compareTo(id2);
}
}
-
+
private boolean isInt(String str) {
try {
Integer.parseInt(str);
diff --git a/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java b/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java
index dda755d..909893e 100644
--- a/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java
+++ b/src/main/java/com/github/zafarkhaja/semver/NormalVersion.java
@@ -35,10 +35,10 @@ class NormalVersion implements Comparable<NormalVersion> {
private int major;
private int minor;
private int patch;
-
+
static final String FORMAT = "(\\d+)\\.(\\d+)\\.(\\d+)";
private static final Pattern PATTERN = Pattern.compile("^" + FORMAT + "$");
-
+
NormalVersion(int major, int minor, int patch) {
if (major < 0 || minor < 0 || patch < 0) {
throw new IllegalArgumentException(
@@ -49,7 +49,7 @@ class NormalVersion implements Comparable<NormalVersion> {
this.minor = minor;
this.patch = patch;
}
-
+
static NormalVersion valueOf(String value) {
Matcher matcher = PATTERN.matcher(value);
if (!matcher.matches()) {
@@ -73,13 +73,13 @@ class NormalVersion implements Comparable<NormalVersion> {
int getPatch() {
return patch;
}
-
+
void incrementMajor() {
major = major + 1;
minor = 0;
patch = 0;
}
-
+
void incrementMinor() {
minor = minor + 1;
patch = 0;
@@ -100,7 +100,7 @@ class NormalVersion implements Comparable<NormalVersion> {
}
return result;
}
-
+
@Override
public boolean equals(Object other) {
if (this == other) {
@@ -120,12 +120,12 @@ class NormalVersion implements Comparable<NormalVersion> {
hash = 31 * hash + patch;
return hash;
}
-
+
/**
* Returns the string representation of this normal version.
- *
- * A normal version number MUST take the form X.Y.Z where X, Y, and Z are
- * non-negative integers. X is the major version, Y is the minor version,
+ *
+ * A normal version number MUST take the form X.Y.Z where X, Y, and Z are
+ * non-negative integers. X is the major version, Y is the minor version,
* and Z is the patch version. (SemVer p.2)
*/
@Override
diff --git a/src/main/java/com/github/zafarkhaja/semver/Version.java b/src/main/java/com/github/zafarkhaja/semver/Version.java
index 60dfd76..1860648 100644
--- a/src/main/java/com/github/zafarkhaja/semver/Version.java
+++ b/src/main/java/com/github/zafarkhaja/semver/Version.java
@@ -31,19 +31,19 @@ import java.util.regex.Pattern;
* @author Zafar Khaja <zafarkhaja at gmail.com>
*/
public class Version implements Comparable<Version> {
-
+
private NormalVersion normal;
private AlphaNumericVersion preRelease;
private AlphaNumericVersion build;
-
+
private static final String PRE_RELEASE_PREFIX = "-";
private static final String BUILD_PREFIX = "+";
-
+
private static final Pattern SEMVER_PATTERN;
-
+
static {
StringBuilder sb = new StringBuilder();
-
+
sb.append("^");
sb.append(NormalVersion.FORMAT);
sb.append("(?:");
@@ -56,91 +56,89 @@ public class Version implements Comparable<Version> {
sb.append(AlphaNumericVersion.FORMAT);
sb.append(")?");
sb.append("$");
-
+
SEMVER_PATTERN = Pattern.compile(sb.toString());
}
-
+
Version(
- NormalVersion normal,
- AlphaNumericVersion preRelease,
+ NormalVersion normal,
+ AlphaNumericVersion preRelease,
AlphaNumericVersion build
) {
this.normal = normal;
this.preRelease = preRelease;
this.build = build;
}
-
+
public static Version valueOf(String value) {
Matcher matcher = SEMVER_PATTERN.matcher(value);
if (!matcher.matches()) {
- throw new IllegalArgumentException(
- "Illegal version format"
- );
+ throw new IllegalArgumentException("Illegal version format");
}
-
+
NormalVersion normal = new NormalVersion(
Integer.parseInt(matcher.group(1)),
Integer.parseInt(matcher.group(2)),
Integer.parseInt(matcher.group(3))
);
-
- AlphaNumericVersion preRelease =
- (matcher.group(4) != null) ?
- new AlphaNumericVersion(matcher.group(4)) :
+
+ AlphaNumericVersion preRelease =
+ (matcher.group(4) != null) ?
+ new AlphaNumericVersion(matcher.group(4)) :
null;
-
- AlphaNumericVersion build =
- (matcher.group(5) != null) ?
- new AlphaNumericVersion(matcher.group(5)) :
+
+ AlphaNumericVersion build =
+ (matcher.group(5) != null) ?
+ new AlphaNumericVersion(matcher.group(5)) :
null;
-
- return new Version(normal, preRelease, build);
+
+ return new Version(normal, preRelease, build);
}
-
+
public int getMajorVersion() {
return normal.getMajor();
}
-
+
public int getMinorVersion() {
return normal.getMinor();
}
-
+
public int getPatchVersion() {
return normal.getPatch();
}
-
+
public String getNormalVersion() {
return normal.toString();
}
-
+
public String getPreReleaseVersion() {
return (preRelease != null) ? preRelease.toString() : "";
}
-
+
public String getBuildVersion() {
return (build != null) ? build.toString() : "";
}
-
+
public boolean greaterThan(Version other) {
return compareTo(other) > 0 ? true : false;
}
-
+
public boolean greaterThanOrEqualsTo(Version other) {
return compareTo(other) >= 0 ? true : false;
}
-
+
public boolean lessThan(Version other) {
return compareTo(other) < 0 ? true : false;
}
-
+
public boolean lessThanOrEqualsTo(Version other) {
return compareTo(other) <= 0 ? true : false;
}
-
+
@Override
public boolean equals(Object other) {
if (this == other) {
- return true;
+ return true;
}
if (!(other instanceof Version)) {
return false;
@@ -156,7 +154,7 @@ public class Version implements Comparable<Version> {
hash = 97 * hash + (build != null ? build.hashCode() : 0);
return hash;
}
-
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder(getNormalVersion());
@@ -170,7 +168,7 @@ public class Version implements Comparable<Version> {
}
return sb.toString();
}
-
+
@Override
public int compareTo(Version other) {
int result = normal.compareTo(other.normal);
@@ -182,23 +180,31 @@ public class Version implements Comparable<Version> {
}
return result;
}
-
+
private int comparePreReleases(Version other) {
int result = 0;
if (preRelease != null && other.preRelease != null) {
result = preRelease.compareTo(other.preRelease);
} else if (preRelease == null ^ other.preRelease == null) {
- result = preRelease == null ? 1 : -1;
+ /**
+ * Pre-release versions satisfy but have a lower precedence
+ * than the associated normal version. (SemVer p.9)
+ */
+ result = (preRelease == null) ? 1 : -1;
}
return result;
}
-
+
private int compareBuilds(Version other) {
int result = 0;
if (build != null && other.build != null) {
result = build.compareTo(other.build);
} else if (build == null ^ other.build == null) {
- result = build == null ? -1 : 1;
+ /**
+ * Build versions satisfy and have a higher precedence
+ * than the associated normal version. (SemVer p.10)
+ */
+ result = (build == null) ? -1 : 1;
}
return result;
}
diff --git a/src/test/java/com/github/zafarkhaja/semver/AlphaNumericVersionTest.java b/src/test/java/com/github/zafarkhaja/semver/AlphaNumericVersionTest.java
index b7afd4d..9b45110 100644
--- a/src/test/java/com/github/zafarkhaja/semver/AlphaNumericVersionTest.java
+++ b/src/test/java/com/github/zafarkhaja/semver/AlphaNumericVersionTest.java
@@ -34,16 +34,16 @@ import org.junit.runner.RunWith;
*/
@RunWith(Enclosed.class)
public class AlphaNumericVersionTest {
-
+
public static class CoreFunctionalityTest {
-
+
@Test
public void mustConsistOfDotSeparatedIdentifiersOfAlphaNumericsAndHyphen() {
String[] invalidVersions = {
null,
- "",
- "123!",
- "1a:2b:3c",
+ "",
+ "123!",
+ "1a:2b:3c",
"123,abc,123",
};
for (String ver : invalidVersions) {
@@ -88,14 +88,14 @@ public class AlphaNumericVersionTest {
public void shouldOverrideEqualsMethod() {
AlphaNumericVersion v1 = new AlphaNumericVersion("alpha.123");
AlphaNumericVersion v2 = new AlphaNumericVersion("alpha.123");
- AlphaNumericVersion v3 = new AlphaNumericVersion("alpha.321");
+ AlphaNumericVersion v3 = new AlphaNumericVersion("alpha.321");
assertTrue(v1.equals(v2));
assertFalse(v1.equals(v3));
}
}
-
+
public static class EqualsMethodTest {
-
+
@Test
public void shouldBeReflexive() {
AlphaNumericVersion v = new AlphaNumericVersion("alpha.123");
@@ -142,9 +142,9 @@ public class AlphaNumericVersionTest {
assertFalse(v1.equals(v2));
}
}
-
+
public static class HashCodeMethodTest {
-
+
@Test
public void shouldReturnSameHashCodeIfVersionsAreEqual() {
AlphaNumericVersion v1 = new AlphaNumericVersion("alpha.123");
@@ -153,9 +153,9 @@ public class AlphaNumericVersionTest {
assertEquals(v1.hashCode(), v2.hashCode());
}
}
-
+
public static class ToStringMethodTest {
-
+
@Test
public void shouldReturnStringRepresentation() {
String value = "beta.abc.def";
diff --git a/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java b/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java
index 4d4cbc0..7bab8c0 100644
--- a/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java
+++ b/src/test/java/com/github/zafarkhaja/semver/NormalVersionTest.java
@@ -34,9 +34,9 @@ import org.junit.runner.RunWith;
*/
@RunWith(Enclosed.class)
public class NormalVersionTest {
-
+
public static class CoreFunctionalityTest {
-
+
@Test
public void mustConsistOfMajorMinorAndPatchVersions() {
NormalVersion v = new NormalVersion(1, 2, 3);
@@ -44,13 +44,13 @@ public class NormalVersionTest {
assertEquals(2, v.getMinor());
assertEquals(3, v.getPatch());
}
-
+
@Test
public void mustTakeTheFormOfXDotYDotZWhereXyzAreNonNegativeIntegers() {
NormalVersion v = new NormalVersion(1, 2, 3);
assertEquals("1.2.3", v.toString());
}
-
+
@Test
public void shouldAcceptOnlyNonNegativeMajorMinorAndPatchVersions() {
int[][] invalidVersions = {{-1, 2, 3}, {1, -2, 3}, {1, 2, -3}};
@@ -67,7 +67,7 @@ public class NormalVersionTest {
fail("Major, minor and patch versions MUST be non-negative integers.");
}
}
-
+
@Test
public void mustIncreaseEachElementNumericallyByIncrementsOfOne() {
int major = 1, minor = 2, patch = 3;
@@ -79,7 +79,7 @@ public class NormalVersionTest {
v.incrementMajor();
assertEquals(major + 1, v.getMajor());
}
-
+
@Test
public void mustResetMinorAndPatchToZeroWhenMajorIsIncremented() {
NormalVersion v = new NormalVersion(1, 2, 3);
@@ -88,7 +88,7 @@ public class NormalVersionTest {
assertEquals(0, v.getMinor());
assertEquals(0, v.getPatch());
}
-
+
@Test
public void mustResetPatchToZeroWhenMinorIsIncremented() {
NormalVersion v = new NormalVersion(1, 2, 3);
@@ -97,7 +97,7 @@ public class NormalVersionTest {
assertEquals(3, v.getMinor());
assertEquals(0, v.getPatch());
}
-
+
@Test
public void mustCompareMajorMinorAndPatchNumerically() {
NormalVersion v = new NormalVersion(1, 2, 3);
@@ -105,7 +105,7 @@ public class NormalVersionTest {
assertTrue(0 == v.compareTo(new NormalVersion(1, 2, 3)));
assertTrue(0 > v.compareTo(new NormalVersion(1, 2, 4)));
}
-
+
@Test
public void shouldOverrideEqualsMethod() {
NormalVersion v1 = new NormalVersion(1, 2, 3);
@@ -114,7 +114,7 @@ public class NormalVersionTest {
assertTrue(v1.equals(v2));
assertFalse(v1.equals(v3));
}
-
+
@Test
public void shouldHaveStaticFactoryMethod() {
NormalVersion v = NormalVersion.valueOf("1.2.3");
@@ -123,15 +123,15 @@ public class NormalVersionTest {
assertEquals(3, v.getPatch());
}
}
-
+
public static class EqualsMethodTest {
-
+
@Test
public void shouldBeReflexive() {
NormalVersion v = new NormalVersion(1, 2, 3);
assertTrue(v.equals(v));
}
-
+
@Test
public void shouldBeSymmetric() {
NormalVersion v1 = new NormalVersion(1, 2, 3);
@@ -172,9 +172,9 @@ public class NormalVersionTest {
assertFalse(v1.equals(v2));
}
}
-
+
public static class HashCodeMethodTest {
-
+
@Test
public void shouldReturnSameHashCodeIfVersionsAreEqual() {
NormalVersion v1 = new NormalVersion(1, 2, 3);
@@ -183,9 +183,9 @@ public class NormalVersionTest {
assertEquals(v1.hashCode(), v2.hashCode());
}
}
-
+
public static class ToStringMethodTest {
-
+
@Test
public void shouldReturnStringRepresentation() {
NormalVersion v = new NormalVersion(1, 2, 3);
diff --git a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
index 00bbf8c..2d69971 100644
--- a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
+++ b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
@@ -34,9 +34,9 @@ import org.junit.runner.RunWith;
*/
@RunWith(Enclosed.class)
public class VersionTest {
-
+
public static class CoreFunctionalityTest {
-
+
@Test
public void mayHavePreReleaseFollowingPatchAppendedWithHyphen() {
Version v = Version.valueOf("1.2.3-alpha");
@@ -121,16 +121,16 @@ public class VersionTest {
@Test
public void shouldCorrectlyCompareAllVersionsFromSpecification() {
String[] versions = {
- "1.0.0-alpha",
- "1.0.0-alpha.1",
- "1.0.0-beta.2",
- "1.0.0-beta.11",
- "1.0.0-rc.1",
- "1.0.0-rc.1+build.1",
- "1.0.0",
- "1.0.0+0.3.7",
- "1.3.7+build",
- "1.3.7+build.2.b8f12d7",
+ "1.0.0-alpha",
+ "1.0.0-alpha.1",
+ "1.0.0-beta.2",
+ "1.0.0-beta.11",
+ "1.0.0-rc.1",
+ "1.0.0-rc.1+build.1",
+ "1.0.0",
+ "1.0.0+0.3.7",
+ "1.3.7+build",
+ "1.3.7+build.2.b8f12d7",
"1.3.7+build.11.e0f985a"
};
for (int i = 1; i < versions.length; i++) {
@@ -139,7 +139,7 @@ public class VersionTest {
assertTrue(v1.lessThan(v2));
}
}
-
+
@Test
public void shouldHaveStaticFactoryMethod() {
Version v = Version.valueOf("1.0.0-rc.1+build.1");
@@ -151,9 +151,9 @@ public class VersionTest {
assertEquals("build.1", v.getBuildVersion());
}
}
-
+
public static class EqualsMethodTest {
-
+
@Test
public void shouldBeReflexive() {
Version v1 = Version.valueOf("2.3.7");
@@ -200,9 +200,9 @@ public class VersionTest {
assertFalse(v1.equals(v2));
}
}
-
+
public static class HashCodeMethodTest {
-
+
@Test
public void shouldReturnSameHashCodeIfVersionsAreEqual() {
Version v1 = Version.valueOf("2.3.7");
@@ -211,9 +211,9 @@ public class VersionTest {
assertEquals(v1.hashCode(), v2.hashCode());
}
}
-
+
public static class ToStringMethodTest {
-
+
@Test
public void shouldReturnStringRepresentation() {
String value = "1.2.3-beta+build";
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jsemver.git
More information about the pkg-java-commits
mailing list