diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfo.java b/gestalt-module/src/main/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfo.java index fac62393..6a8e55a0 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfo.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfo.java @@ -4,7 +4,6 @@ package org.terasology.gestalt.module.dependencyresolution; import org.terasology.gestalt.naming.Name; -import org.terasology.gestalt.naming.SemverExpression; import org.terasology.gestalt.naming.Version; import org.terasology.gestalt.naming.VersionRange; @@ -73,9 +72,9 @@ public void setMinVersion(Version value) { public Version getMaxVersion() { if (maxVersion == null) { if (minVersion.getMajor() == 0) { - return minVersion.getNextMinorVersion(); + return minVersion.getCoreVersion().getNextMinorVersion(); } - return minVersion.getNextMajorVersion(); + return minVersion.getCoreVersion().getNextMajorVersion(); } return maxVersion; } @@ -109,25 +108,10 @@ public void setOptional(boolean optional) { } /** - * @return The range of supported versions + * Returns a predicate that yields true when applied to version that is within the version range described by this dependency information */ - public VersionRange versionRange() { - return new VersionRange(getMinVersion(), getMaxVersion()); - } - public Predicate versionPredicate() { - if (maxVersion != null) { - return versionRange(); - } else { - String source; - if (minVersion.isSnapshot()) { - // semver doesn't like snapshots in caret ranges? - source = minVersion + " | ^" + minVersion.getNextPatchVersion(); - } else { - source = "^" + minVersion; - } - return new SemverExpression(source); - } + return new VersionRange(getMinVersion(), getMaxVersion()); } @Override diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/naming/SemverExpression.java b/gestalt-module/src/main/java/org/terasology/gestalt/naming/SemverExpression.java deleted file mode 100644 index 9c206571..00000000 --- a/gestalt-module/src/main/java/org/terasology/gestalt/naming/SemverExpression.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2021 The Terasology Foundation -// SPDX-License-Identifier: Apache-2.0 - -package org.terasology.gestalt.naming; - -import com.github.zafarkhaja.semver.expr.ExpressionParser; -import com.google.common.base.MoreObjects; - -import java.util.function.Predicate; - -public class SemverExpression implements Predicate { - - private final Predicate expression; - private final String source; - - public SemverExpression(String source) { - this.source = source; - this.expression = ExpressionParser.newInstance().parse(source); - } - - @Override - public boolean test(Version version) { - return expression.test(version.semver); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .addValue(source) - .toString(); - } -} diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java b/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java index d0029bf8..25fe251f 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java @@ -108,6 +108,13 @@ public Version getNextPatchVersion() { return new Version(semver.incrementPatchVersion()); } + /** + * Returns the version core according to semver, i.e. the purely numerical version without any pre-release or build metadata info + */ + public Version getCoreVersion() { + return new Version(semver.getNormalVersion()); + } + @Override public boolean equals(Object obj) { if (this == obj) { diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/naming/VersionRange.java b/gestalt-module/src/main/java/org/terasology/gestalt/naming/VersionRange.java index fa22ad38..a669dac7 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/naming/VersionRange.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/naming/VersionRange.java @@ -44,7 +44,7 @@ public Version getUpperBound() { * @return Whether version falls within the range */ public boolean contains(Version version) { - return version.compareTo(lowerBound.getSnapshot()) >= 0 && version.compareTo(upperBound.getSnapshot()) < 0; + return version.compareTo(lowerBound) >= 0 && version.compareTo(upperBound.getSnapshot()) < 0; } @Override diff --git a/gestalt-module/src/test/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfoTest.java b/gestalt-module/src/test/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfoTest.java index 0382825a..d88b0318 100644 --- a/gestalt-module/src/test/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfoTest.java +++ b/gestalt-module/src/test/java/org/terasology/gestalt/module/dependencyresolution/DependencyInfoTest.java @@ -28,7 +28,8 @@ void testMinimumVersionUnderOnePointZero() { assertTrue(predicate.test(new Version(nextVersion + "-SNAPSHOT")), "failed to match the next snapshot"); assertFalse(predicate.test(new Version("0.2.3")), "inappropriately matched an earlier patch version"); - + assertFalse(predicate.test(new Version("0.2.4-SNAPSHOT")), "inappropriately matched own snapshot version"); + assertFalse(predicate.test(nextVersion.getNextMinorVersion().getSnapshot()), "inappropriately matched next 0.x minor snapshot"); assertFalse(predicate.test(nextVersion.getNextMinorVersion()), "inappropriately matched next 0.x minor version"); } @@ -51,6 +52,8 @@ void testMinimumVersionOverOnePointZero() { assertTrue(predicate.test(new Version(nextMinorVersion + "-SNAPSHOT")), "failed to match the next minor snapshot"); assertFalse(predicate.test(new Version("1.4.6")), "inappropriately matched an earlier patch version"); + assertFalse(predicate.test(new Version("1.4.7-SNAPSHOT")), "inappropriately matched own snapshot version"); + assertFalse(predicate.test(nextVersion.getNextMajorVersion().getSnapshot()), "inappropriately matched next major snapshot"); assertFalse(predicate.test(nextVersion.getNextMajorVersion()), "inappropriately matched next major version"); } @@ -69,6 +72,7 @@ void testMinimumVersionIsSnapshot() { Version nextVersion = release.getNextPatchVersion(); assertTrue(predicate.test(nextVersion), "failed to match the next patch version"); assertTrue(predicate.test(new Version(nextVersion + "-SNAPSHOT")), "failed to match the next snapshot"); + assertFalse(predicate.test(release.getNextMajorVersion().getSnapshot()), "inappropriately matched next major snapshot"); assertFalse(predicate.test(release.getNextMajorVersion()), "inappropriately matched next major version"); } } diff --git a/gestalt-module/src/test/java/org/terasology/gestalt/naming/VersionRangeTest.java b/gestalt-module/src/test/java/org/terasology/gestalt/naming/VersionRangeTest.java index 896a4c5a..3b1bfe64 100644 --- a/gestalt-module/src/test/java/org/terasology/gestalt/naming/VersionRangeTest.java +++ b/gestalt-module/src/test/java/org/terasology/gestalt/naming/VersionRangeTest.java @@ -55,8 +55,8 @@ public void errorIfUpperBoundLowerThanLowerBound() { } @Test - public void lowerSnapshotInRange() { - assertTrue(range.contains(new Version("1.2.3-SNAPSHOT"))); + public void lowerSnapshotOutOfRange() { + assertFalse(range.contains(new Version("1.2.3-SNAPSHOT"))); } @Test