diff --git a/versions-common/src/main/java/org/codehaus/mojo/versions/api/AbstractVersionDetails.java b/versions-common/src/main/java/org/codehaus/mojo/versions/api/AbstractVersionDetails.java index 9d22c4356..ad5f00fb4 100644 --- a/versions-common/src/main/java/org/codehaus/mojo/versions/api/AbstractVersionDetails.java +++ b/versions-common/src/main/java/org/codehaus/mojo/versions/api/AbstractVersionDetails.java @@ -393,9 +393,9 @@ protected Optional getLowerBound(ArtifactVersion version, Optional 2) { if (version.getQualifier() != null) { - newVersion.append("-").append(unchangedSegment.get().value() >= 3 ? version.getQualifier() : "0"); + newVersion.append("-").append(unchangedSegment.get().value() >= 3 ? version.getQualifier() : "A0"); } else { - newVersion.append("-").append(unchangedSegment.get().value() >= 3 ? version.getBuildNumber() : "0"); + newVersion.append("-").append(unchangedSegment.get().value() >= 3 ? version.getBuildNumber() : "A0"); } } return of(newVersion.toString()); diff --git a/versions-common/src/test/java/org/codehaus/mojo/versions/api/ArtifactVersionsTest.java b/versions-common/src/test/java/org/codehaus/mojo/versions/api/ArtifactVersionsTest.java index 7e572f4ba..c7829fe89 100644 --- a/versions-common/src/test/java/org/codehaus/mojo/versions/api/ArtifactVersionsTest.java +++ b/versions-common/src/test/java/org/codehaus/mojo/versions/api/ArtifactVersionsTest.java @@ -50,6 +50,7 @@ import static org.hamcrest.Matchers.arrayContaining; import static org.hamcrest.Matchers.arrayWithSize; import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasToString; @@ -375,4 +376,31 @@ void testRestrictionForIgnoreScopeLowerBoundNull() throws InvalidSegmentExceptio versions.restrictionForIgnoreScope(null, Optional.of(MAJOR)), is(equalTo(new Restriction(null, false, null, false)))); } + + @Test + void testGetNewerVersionsSnapshotToPrereleaseMajor() throws InvalidSegmentException { + ArtifactVersions instance = new ArtifactVersions( + new DefaultArtifact("default-group", "dummy-api", "1.0.0-SNAPSHOT", "foo", "bar", "jar", null), + Arrays.asList(versions("1.0.0-SNAPSHOT", "1.0.0-RC1", "1.0.0-beta", "1.0.0"))); + + ArtifactVersion[] result = instance.getNewerVersions("1.0.0-SNAPSHOT", of(MAJOR), false, true); + + assertThat( + "Prerelease versions should be filterable from snapshot with MAJOR segment", + result, + arrayContaining(version("1.0.0-beta"), version("1.0.0-RC1"), version("1.0.0"))); + } + + @Test + void testLowerBoundPreservesQualifierForMajorSegment() throws InvalidSegmentException { + ArtifactVersions instance = new ArtifactVersions( + new DefaultArtifact("default-group", "dummy-api", "1.0.0-SNAPSHOT", "foo", "bar", "jar", null), + Arrays.asList(versions("1.0.0-SNAPSHOT"))); + + Optional lowerBound = + instance.getLowerBound(ArtifactVersionService.getArtifactVersion("1.0.0-SNAPSHOT"), of(MAJOR)); + + assertThat("Lower bound must be present", lowerBound.isPresent()); + assertThat("Lower bound should preserve qualifier, not replace with -0", lowerBound.get(), not(endsWith("-0"))); + } }