diff --git a/src/main/java/org/codehaus/mojo/versions/ordering/AbstractVersionComparator.java b/src/main/java/org/codehaus/mojo/versions/ordering/AbstractVersionComparator.java index 1baeea0a35..ecc87f1a39 100644 --- a/src/main/java/org/codehaus/mojo/versions/ordering/AbstractVersionComparator.java +++ b/src/main/java/org/codehaus/mojo/versions/ordering/AbstractVersionComparator.java @@ -59,17 +59,8 @@ public final int getSegmentCount( ArtifactVersion v ) */ public final ArtifactVersion incrementSegment( ArtifactVersion v, Segment segment ) throws InvalidSegmentException { - if ( VersionComparators.isSnapshot( v ) ) - { - return VersionComparators.copySnapshot( v, innerIncrementSegment( VersionComparators.stripSnapshot( v ), - segment ) ); - } - int segmentCount = getSegmentCount( v ); - if ( segment.value() >= segmentCount ) - { - throw new InvalidSegmentException( segment, segmentCount, v ); - } - return innerIncrementSegment( v, segment ); + return VersionComparators.copySnapshot( v, innerIncrementSegment( VersionComparators.stripSnapshot( v ), + segment ) ); } protected abstract ArtifactVersion innerIncrementSegment( ArtifactVersion v, Segment segment ) diff --git a/src/test/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojoTest.java b/src/test/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojoTest.java index 7403e2610f..91db5ba553 100644 --- a/src/test/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojoTest.java +++ b/src/test/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojoTest.java @@ -54,6 +54,7 @@ import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.anyOf; +import static org.hamcrest.Matchers.matchesPattern; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -307,4 +308,25 @@ public void testDependenciesShouldOverrideDependencyManagement() throws IOExcept String output = os.toString().replaceAll( "\n", "" ); assertThat( output, Matchers.stringContainsInOrder( "artifactB" ) ); } + + @Test + public void testWrongReportBounds() throws IOException, MavenReportException + { + OutputStream os = new ByteArrayOutputStream(); + SinkFactory sinkFactory = new Xhtml5SinkFactory(); + new TestDependencyUpdatesReportMojo() + .withOnlyUpgradable( true ) + .withDependencies( + dependencyOf( "test-artifact" ) ) + .withArtifactMetadataSource( mockArtifactMetadataSource( new HashMap() + {{ + put( "test-artifact", new String[] { "1.0.0", "2.0.0-M1", "2.0.0-beta1", "2.0.0-rc2" } ); + }} ) ) + .generate( sinkFactory.createSink( os ), sinkFactory, Locale.getDefault() ); + + String output = os.toString().replaceAll( "\n", "" ); + assertThat( output, allOf( + matchesPattern( ".*report.overview.numNewerMajorAvailable\\s*1.*" ), + matchesPattern( ".*report.overview.numUpToDate\\s*0.*" ) ) ); + } }