From 9db5d6f3ee96bfa86ba828f510796714d2aa3765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Tudenh=C3=B6fner?= Date: Wed, 2 Mar 2022 13:40:11 +0100 Subject: [PATCH] Add utility methods to Version class for easier version comparisons (#3488) --- .../tools/compatibility/api/Version.java | 20 +++++++++++++ .../AbstractMultiVersionExtension.java | 4 +-- .../tools/compatibility/api/TestVersion.java | 29 +++++++++++++++++++ .../compatibility/tests/ITUpgradePath.java | 2 +- 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/api/Version.java b/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/api/Version.java index 1a6a74fda08..74b0894f18a 100644 --- a/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/api/Version.java +++ b/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/api/Version.java @@ -80,6 +80,26 @@ private static int parsePart(String part) { return val; } + public boolean isGreaterThan(Version version) { + return this.compareTo(version) > 0; + } + + public boolean isGreaterThanOrEqual(Version version) { + return this.compareTo(version) >= 0; + } + + public boolean isLessThan(Version version) { + return this.compareTo(version) < 0; + } + + public boolean isLessThanOrEqual(Version version) { + return this.compareTo(version) <= 0; + } + + public boolean isSame(Version version) { + return this.compareTo(version) == 0; + } + @Override public int compareTo(Version o) { for (int i = 0; i < tuple.length || i < o.tuple.length; i++) { diff --git a/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/internal/AbstractMultiVersionExtension.java b/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/internal/AbstractMultiVersionExtension.java index b0cb535f3c9..c35bea7b9e5 100644 --- a/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/internal/AbstractMultiVersionExtension.java +++ b/compatibility/common/src/main/java/org/projectnessie/tools/compatibility/internal/AbstractMultiVersionExtension.java @@ -101,14 +101,14 @@ static ConditionEvaluationResult conditionCheck(Version version, AnnotatedElemen if (cond.isPresent()) { VersionCondition versionCondition = cond.get(); if (!versionCondition.minVersion().isEmpty() - && parseVersion(versionCondition.minVersion()).compareTo(version) > 0) { + && parseVersion(versionCondition.minVersion()).isGreaterThan(version)) { return disabled( String.format( "%s requires minimum Nessie version '%s', but current Nessie version is '%s'", annotated, versionCondition.minVersion(), version)); } if (!versionCondition.maxVersion().isEmpty() - && parseVersion(versionCondition.maxVersion()).compareTo(version) < 0) { + && parseVersion(versionCondition.maxVersion()).isLessThan(version)) { return disabled( String.format( "%s requires maximum Nessie version '%s', but current Nessie version is '%s'", diff --git a/compatibility/common/src/test/java/org/projectnessie/tools/compatibility/api/TestVersion.java b/compatibility/common/src/test/java/org/projectnessie/tools/compatibility/api/TestVersion.java index 47f0fe1ea7f..dc5356c3078 100644 --- a/compatibility/common/src/test/java/org/projectnessie/tools/compatibility/api/TestVersion.java +++ b/compatibility/common/src/test/java/org/projectnessie/tools/compatibility/api/TestVersion.java @@ -76,4 +76,33 @@ void compare() { .isGreaterThan(Version.parseVersion("0.99999")) .isGreaterThan(Version.parseVersion("0.1.0")); } + + @Test + public void isGreaterThan() { + assertThat(Version.parseVersion("1.0.0").isGreaterThanOrEqual(Version.parseVersion("1.0.0"))) + .isTrue(); + assertThat(Version.parseVersion("1.0.0").isGreaterThan(Version.parseVersion("0.9.9"))).isTrue(); + assertThat(Version.parseVersion("1.0.0").isGreaterThan(Version.parseVersion("0.9999"))) + .isTrue(); + assertThat(Version.parseVersion("1.0.0").isGreaterThan(Version.parseVersion("1.0.0"))) + .isFalse(); + } + + @Test + public void isLessThan() { + assertThat(Version.parseVersion("1.0.0").isLessThanOrEqual(Version.parseVersion("1.0.0"))) + .isTrue(); + assertThat(Version.parseVersion("1.0.0").isLessThan(Version.parseVersion("1.0.1"))).isTrue(); + assertThat(Version.parseVersion("1.0.0").isLessThan(Version.parseVersion("1.1"))).isTrue(); + assertThat(Version.parseVersion("1.0.0").isLessThan(Version.parseVersion("1.0.1"))).isTrue(); + assertThat(Version.parseVersion("1.0.0").isLessThan(Version.parseVersion("1.0.0"))).isFalse(); + } + + @Test + public void isSame() { + assertThat(Version.parseVersion("1.0").isSame(Version.parseVersion("1.0.0"))).isTrue(); + assertThat(Version.parseVersion("1.0.0").isSame(Version.parseVersion("1.0.0"))).isTrue(); + assertThat(Version.parseVersion("1.0.0").isSame(Version.parseVersion("1.0.1"))).isFalse(); + assertThat(Version.parseVersion("1.0.0").isSame(Version.parseVersion("0.9.9"))).isFalse(); + } } diff --git a/compatibility/compatibility-tests/src/test/java/org/projectnessie/tools/compatibility/tests/ITUpgradePath.java b/compatibility/compatibility-tests/src/test/java/org/projectnessie/tools/compatibility/tests/ITUpgradePath.java index 78ea29a680a..164ce26ccab 100644 --- a/compatibility/compatibility-tests/src/test/java/org/projectnessie/tools/compatibility/tests/ITUpgradePath.java +++ b/compatibility/compatibility-tests/src/test/java/org/projectnessie/tools/compatibility/tests/ITUpgradePath.java @@ -144,7 +144,7 @@ private Branch commitMaybeRetry(CommitMultipleOperationsBuilder commitBuilder) return commitBuilder.commit(); } catch (NessieReferenceConflictException e) { if (!"Hash collision detected".equals(e.getMessage()) - || Version.parseVersion("0.20.1").compareTo(version) < 0) { + || Version.parseVersion("0.20.1").isLessThan(version)) { throw e; } }