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
|
||||
public int compareTo(Version other) {
|
||||
int result = compareNormalVersions(other);
|
||||
if (result == 0 && preReleaseVersion != null) {
|
||||
result = compareAlphaNumericVersions(
|
||||
preReleaseVersion,
|
||||
other.getPreReleaseVersion()
|
||||
);
|
||||
if (result == 0) {
|
||||
result = comparePreReleaseVersions(other);
|
||||
}
|
||||
if (result == 0 && buildVersion != null) {
|
||||
result = compareAlphaNumericVersions(
|
||||
buildVersion,
|
||||
other.getBuildVersion()
|
||||
);
|
||||
if (result == 0) {
|
||||
result = compareBuildVersions(other);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -178,6 +172,40 @@ public class Version implements Comparable<Version> {
|
|||
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) {
|
||||
String[] thisIdents = thisOp.split("\\.");
|
||||
String[] otherIdents = otherOp.split("\\.");
|
||||
|
|
|
@ -137,6 +137,14 @@ public class VersionTest {
|
|||
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
|
||||
shouldCompareBuildVersionsIfNormalAndPreReleaseVersionsAreEqual() {
|
||||
Version version1 = new Version("1.3.7-beta+build.1");
|
||||
|
@ -144,6 +152,14 @@ public class VersionTest {
|
|||
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
|
||||
shouldCompareAccordingToIdentifiersCountIfCommonIdentifiersAreEqual() {
|
||||
Version version1 = new Version("1.3.7-beta+build.3");
|
||||
|
|
Loading…
Reference in New Issue
Block a user