Refactor Version.compareTo() method
According to the Specification the pre-release version should have a lower precedence than the associated normal version and the build version should have a higher precedence than the associated normal version.
This commit is contained in:
parent
6bca0180c6
commit
e0bca455ae
|
@ -148,17 +148,11 @@ public class Version implements Comparable<Version> {
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(Version other) {
|
public int compareTo(Version other) {
|
||||||
int result = compareNormalVersions(other);
|
int result = compareNormalVersions(other);
|
||||||
if (result == 0 && preReleaseVersion != null) {
|
if (result == 0) {
|
||||||
result = compareAlphaNumericVersions(
|
result = comparePreReleaseVersions(other);
|
||||||
preReleaseVersion,
|
|
||||||
other.getPreReleaseVersion()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (result == 0 && buildVersion != null) {
|
if (result == 0) {
|
||||||
result = compareAlphaNumericVersions(
|
result = compareBuildVersions(other);
|
||||||
buildVersion,
|
|
||||||
other.getBuildVersion()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -178,6 +172,40 @@ public class Version implements Comparable<Version> {
|
||||||
return (thisOp == otherOp) ? 0 : ((thisOp > otherOp) ? 1 : -1);
|
return (thisOp == otherOp) ? 0 : ((thisOp > otherOp) ? 1 : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int comparePreReleaseVersions(Version other) {
|
||||||
|
int result;
|
||||||
|
if (preReleaseVersion == null &&
|
||||||
|
other.getPreReleaseVersion() == null) {
|
||||||
|
result = 0;
|
||||||
|
} else if (preReleaseVersion == null ||
|
||||||
|
other.getPreReleaseVersion() == null) {
|
||||||
|
result = preReleaseVersion == null ? 1 : -1;
|
||||||
|
} else {
|
||||||
|
result = compareAlphaNumericVersions(
|
||||||
|
preReleaseVersion,
|
||||||
|
other.getPreReleaseVersion()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int compareBuildVersions(Version other) {
|
||||||
|
int result;
|
||||||
|
if (buildVersion == null &&
|
||||||
|
other.getBuildVersion()== null) {
|
||||||
|
result = 0;
|
||||||
|
} else if (buildVersion == null ||
|
||||||
|
other.getBuildVersion()== null) {
|
||||||
|
result = buildVersion == null ? -1 : 1;
|
||||||
|
} else {
|
||||||
|
result = compareAlphaNumericVersions(
|
||||||
|
buildVersion,
|
||||||
|
other.getBuildVersion()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private int compareAlphaNumericVersions(String thisOp, String otherOp) {
|
private int compareAlphaNumericVersions(String thisOp, String otherOp) {
|
||||||
String[] thisIdents = thisOp.split("\\.");
|
String[] thisIdents = thisOp.split("\\.");
|
||||||
String[] otherIdents = otherOp.split("\\.");
|
String[] otherIdents = otherOp.split("\\.");
|
||||||
|
|
|
@ -137,6 +137,14 @@ public class VersionTest {
|
||||||
assertEquals(1, version1.compareTo(version2));
|
assertEquals(1, version1.compareTo(version2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test public void
|
||||||
|
preReleaseVersionShouldHaveLowerPrecedenceThanAssociatedNormalVersion() {
|
||||||
|
Version version1 = new Version("1.3.7");
|
||||||
|
Version version2 = new Version("1.3.7-alpha");
|
||||||
|
assertEquals(1, version1.compareTo(version2));
|
||||||
|
assertEquals(-1, version2.compareTo(version1));
|
||||||
|
}
|
||||||
|
|
||||||
@Test public void
|
@Test public void
|
||||||
shouldCompareBuildVersionsIfNormalAndPreReleaseVersionsAreEqual() {
|
shouldCompareBuildVersionsIfNormalAndPreReleaseVersionsAreEqual() {
|
||||||
Version version1 = new Version("1.3.7-beta+build.1");
|
Version version1 = new Version("1.3.7-beta+build.1");
|
||||||
|
@ -144,6 +152,14 @@ public class VersionTest {
|
||||||
assertEquals(-1, version1.compareTo(version2));
|
assertEquals(-1, version1.compareTo(version2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test public void
|
||||||
|
buildVersionShouldHaveHigherPrecedenceThanAssociatedNormalVersion() {
|
||||||
|
Version version1 = new Version("1.3.7");
|
||||||
|
Version version2 = new Version("1.3.7+build");
|
||||||
|
assertEquals(-1, version1.compareTo(version2));
|
||||||
|
assertEquals(1, version2.compareTo(version1));
|
||||||
|
}
|
||||||
|
|
||||||
@Test public void
|
@Test public void
|
||||||
shouldCompareAccordingToIdentifiersCountIfCommonIdentifiersAreEqual() {
|
shouldCompareAccordingToIdentifiersCountIfCommonIdentifiersAreEqual() {
|
||||||
Version version1 = new Version("1.3.7-beta+build.3");
|
Version version1 = new Version("1.3.7-beta+build.3");
|
||||||
|
|
Loading…
Reference in New Issue
Block a user