diff --git a/src/main/java/tools/jackson/core/Version.java b/src/main/java/tools/jackson/core/Version.java index 46445f96fc..e16b149d2b 100644 --- a/src/main/java/tools/jackson/core/Version.java +++ b/src/main/java/tools/jackson/core/Version.java @@ -95,7 +95,7 @@ public String toFullString() { } @Override public int hashCode() { - return _artifactId.hashCode() ^ _groupId.hashCode() + return _artifactId.hashCode() ^ _groupId.hashCode() ^ _snapshotInfo.hashCode() + _majorVersion - _minorVersion + _patchLevel; } @@ -130,7 +130,15 @@ public int compareTo(Version other) if (diff == 0) { diff = _patchLevel - other._patchLevel; if (diff == 0) { + if (isSnapshot() && other.isSnapshot()) { diff = _snapshotInfo.compareTo(other._snapshotInfo); + } else if (isSnapshot() && !other.isSnapshot()) { + diff = -1; + } else if (!isSnapshot() && other.isSnapshot()) { + diff = 1; + } else { + diff = 0; + } } } } diff --git a/src/test/java/tools/jackson/core/VersionTest.java b/src/test/java/tools/jackson/core/VersionTest.java index aaae4c52c1..9366c72029 100644 --- a/src/test/java/tools/jackson/core/VersionTest.java +++ b/src/test/java/tools/jackson/core/VersionTest.java @@ -40,4 +40,32 @@ public void testCompareToAndCreatesVersionTaking6ArgumentsAndUnknownVersion() { assertTrue(version.compareTo(versionTwo) < 0); } + + public void testCompareToSnapshotSame() { + Version version = new Version(0, 0, 0, "alpha", null, null); + Version versionTwo = new Version(0, 0, 0, "alpha", null, null); + + assertEquals(0, version.compareTo(versionTwo)); + } + + public void testCompareToSnapshotDifferent() { + Version version = new Version(0, 0, 0, "alpha", null, null); + Version versionTwo = new Version(0, 0, 0, "beta", null, null); + + assertTrue(version.compareTo(versionTwo) < 0); + } + + public void testCompareWhenOnlyFirstHasSnapshot() { + Version version = new Version(0, 0, 0, "beta", null, null); + Version versionTwo = new Version(0, 0, 0, null, null, null); + + assertEquals(-1, version.compareTo(versionTwo)); + } + + public void testCompareWhenOnlySecondHasSnapshot() { + Version version = new Version(0, 0, 0, "", null, null); + Version versionTwo = new Version(0, 0, 0, "beta", null, null); + + assertEquals(1, version.compareTo(versionTwo)); + } }