diff --git a/src/main/java/se/bjurr/gitchangelog/internal/semantic/SemanticVersioning.java b/src/main/java/se/bjurr/gitchangelog/internal/semantic/SemanticVersioning.java index fde7394e..e4ce9d79 100644 --- a/src/main/java/se/bjurr/gitchangelog/internal/semantic/SemanticVersioning.java +++ b/src/main/java/se/bjurr/gitchangelog/internal/semantic/SemanticVersioning.java @@ -89,7 +89,7 @@ public static SemanticVersion getHighestVersion(final List tags) { public static Optional findSemanticVersion(final String tag) { final Matcher semanticVersionMatcher = - Pattern.compile("[0-9]+\\.[0-9]+\\.?[0-9]+?").matcher(tag); + Pattern.compile("[0-9]+\\.[0-9]+\\.?[0-9]*").matcher(tag); if (!semanticVersionMatcher.find()) { return Optional.empty(); } diff --git a/src/test/java/se/bjurr/gitchangelog/semantic/SemanticVersioningTest.java b/src/test/java/se/bjurr/gitchangelog/semantic/SemanticVersioningTest.java index 4d8e46db..293f9593 100644 --- a/src/test/java/se/bjurr/gitchangelog/semantic/SemanticVersioningTest.java +++ b/src/test/java/se/bjurr/gitchangelog/semantic/SemanticVersioningTest.java @@ -10,8 +10,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + import org.junit.Before; import org.junit.Test; + import se.bjurr.gitchangelog.api.GitChangelogApi; import se.bjurr.gitchangelog.internal.semantic.SemanticVersion; import se.bjurr.gitchangelog.internal.semantic.SemanticVersioning; @@ -179,6 +181,48 @@ public void testPatchStepWithPatternMatching() throws Throwable { assertThat(this.sut.getNextVersion(highestVersion).getVersionStep()).isEqualTo(PATCH); } + @Test + public void testLongPatchMatches() throws Throwable { + this.tags.add("1.2.33333"); + this.tags.add("1.2.3"); + + final SemanticVersion highestVersion = SemanticVersioning.getHighestVersion(this.tags); + assertThat(highestVersion.toString()) // + .isEqualTo("1.2.33333"); + } + + @Test + public void testLongPatchMatches_reverse_order() throws Throwable { + this.tags.add("1.2.3"); + this.tags.add("1.2.33333"); + + final SemanticVersion highestVersion = SemanticVersioning.getHighestVersion(this.tags); + assertThat(highestVersion.toString()) // + .isEqualTo("1.2.33333"); + } + + @Test + public void testLongMinorMatches() throws Throwable { + this.tags.add("1.22222"); + this.tags.add("1.2"); + + final SemanticVersion highestVersion = SemanticVersioning.getHighestVersion(this.tags); + assertThat(highestVersion.toString()) // + .isEqualTo("1.22222.0"); + } + + @Test + public void testLongMinorMatches_reverse_order() throws Throwable { + this.tags.add("1.2"); + this.tags.add("1.22222"); + + final SemanticVersion highestVersion = SemanticVersioning.getHighestVersion(this.tags); + assertThat(highestVersion.toString()) // + .isEqualTo("1.22222.0"); + assertThat(highestVersion.findTag().orElse("")) // + .isEqualTo("1.22222"); + } + @Test public void testTagCleanup() throws Throwable { assertThat(this.getTagNameFrom("whatever1.2.3.4")).isEqualTo("1.2.3");