[jsemver] 31/95: Create BUILD_AWARE_ORDER comparator
Alexandre Viau
reazem-guest at moszumanska.debian.org
Mon Feb 16 14:58:27 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 670b1a77c11b691fbc9c11433e2bb9c7e9f109ec
Author: Zafar Khaja <zafarkhaja at gmail.com>
Date: Sun Mar 31 12:43:35 2013 +0400
Create BUILD_AWARE_ORDER comparator
---
.../java/com/github/zafarkhaja/semver/Version.java | 33 ++++++++++++++++++++++
.../com/github/zafarkhaja/semver/VersionTest.java | 33 ++++++++++++++++++++++
2 files changed, 66 insertions(+)
diff --git a/src/main/java/com/github/zafarkhaja/semver/Version.java b/src/main/java/com/github/zafarkhaja/semver/Version.java
index 01dc052..8fb8d68 100644
--- a/src/main/java/com/github/zafarkhaja/semver/Version.java
+++ b/src/main/java/com/github/zafarkhaja/semver/Version.java
@@ -23,6 +23,7 @@
*/
package com.github.zafarkhaja.semver;
+import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -103,6 +104,34 @@ public class Version implements Comparable<Version> {
}
}
+ public static final Comparator BUILD_AWARE_ORDER = new BuildAwareOrder();
+
+ private static class BuildAwareOrder implements Comparator<Version> {
+
+ @Override
+ public int compare(Version v1, Version v2) {
+ int result = v1.compareTo(v2);
+ if (result == 0) {
+ result = compareBuilds(v1, v2);
+ }
+ return result;
+ }
+
+ private int compareBuilds(Version v1, Version v2) {
+ int result = 0;
+ if (v1.build != null && v2.build != null) {
+ result = v1.build.compareTo(v2.build);
+ } else if (v1.build == null ^ v2.build == null) {
+ /**
+ * Build versions satisfy and have a higher precedence
+ * than the associated normal version.
+ */
+ result = (v1.build == null) ? -1 : 1;
+ }
+ return result;
+ }
+ }
+
Version(NormalVersion normal) {
this(normal, null, null);
}
@@ -269,6 +298,10 @@ public class Version implements Comparable<Version> {
return result;
}
+ public int compareWithBuildsTo(Version other) {
+ return BUILD_AWARE_ORDER.compare(this, other);
+ }
+
private int comparePreReleases(Version other) {
int result = 0;
if (preRelease != null && other.preRelease != null) {
diff --git a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
index 57997aa..a2688ba 100644
--- a/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
+++ b/src/test/java/com/github/zafarkhaja/semver/VersionTest.java
@@ -292,6 +292,14 @@ public class VersionTest {
Version incrementedBuild = version.incrementBuildMetadata();
assertNotSame(version, incrementedBuild);
}
+
+ @Test
+ public void shouldBeAbleToCompareWithoutIgnoringBuildMetadata() {
+ Version v1 = Version.valueOf("1.3.7-beta+build.1");
+ Version v2 = Version.valueOf("1.3.7-beta+build.2");
+ assertTrue(0 == v1.compareTo(v2));
+ assertTrue(0 > v1.compareWithBuildsTo(v2));
+ }
}
public static class EqualsMethodTest {
@@ -404,4 +412,29 @@ public class VersionTest {
assertEquals(Version.valueOf("1.0.0-alpha+build"), builder.build());
}
}
+
+ public static class BuildAwareOrderTest {
+
+ @Test
+ public void shouldCorrectlyCompareAllVersionsWithBuildMetadata() {
+ 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.3.7+build.11.e0f985a"
+ };
+ for (int i = 1; i < versions.length; i++) {
+ Version v1 = Version.valueOf(versions[i-1]);
+ Version v2 = Version.valueOf(versions[i]);
+ assertTrue(0 > Version.BUILD_AWARE_ORDER.compare(v1, v2));
+ }
+ }
+ }
}
--
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