[ https://issues.apache.org/jira/browse/MRESOLVER-336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17807290#comment-17807290 ]
ASF GitHub Bot commented on MRESOLVER-336: ------------------------------------------ dmlloyd commented on code in PR #406: URL: https://github.com/apache/maven-resolver/pull/406#discussion_r1453555024 ########## maven-resolver-util/src/test/java/org/eclipse/aether/util/version/GenericVersionTest.java: ########## @@ -44,6 +41,155 @@ void testEmptyVersion() { assertOrder(X_EQ_Y, "0", ""); } + // Block of tests from https://issues.apache.org/jira/browse/MRESOLVER-336 + @Test + void testTrimPadding() { + // 1.0.0 -> 1 + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0))); + assertEquals(3, items.size()); + GenericVersion.trimPadding(items); + assertEquals(1, items.size()); + } + + @Test + void testTrimPaddingNotNeededString() { + // 1.0.0.string -> 1.string + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_STRING, "string"))); + assertEquals(4, items.size()); + GenericVersion.trimPadding(items); + assertEquals(2, items.size()); + } + + @Test + void testTrimPaddingNeededQualifier() { + // 1.0.0.ga -> 1 + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0))); + assertEquals(4, items.size()); + GenericVersion.trimPadding(items); + assertEquals(1, items.size()); + } + + @Test + void testTrimPaddingNeededQualifierMixed() { + // 1.0.0.string.0.ga -> 1.string + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_STRING, "string"), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0))); + assertEquals(6, items.size()); + GenericVersion.trimPadding(items); + assertEquals(2, items.size()); + } + + @Test + void testTrimPaddingNeededQualifierMixedInBetweenGa() { + // 1.0.ga.0.string.0.ga -> 1.ga.0.string + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_STRING, "string"), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0))); + assertEquals(7, items.size()); + GenericVersion.trimPadding(items); + assertEquals(4, items.size()); + } + + @Test + void testEdgeCase_1_1() { + Version v1 = newVersion("0.0.0.ga.ga.foo"); + Version v2 = newVersion("foo"); + // they were equal in Resolver 1.x + assertNotEquals(v1, v2); + } + + @Test + void testEdgeCase_1_2() { + // as expected + assertOrder(X_LT_Y, "ga.ga.foo", "foo"); Review Comment: Today, it's the opposite. It also would be opposite of `ga`==`0` in all cases as I proposed elsewhere. ########## maven-resolver-util/src/test/java/org/eclipse/aether/util/version/GenericVersionTest.java: ########## @@ -44,6 +41,155 @@ void testEmptyVersion() { assertOrder(X_EQ_Y, "0", ""); } + // Block of tests from https://issues.apache.org/jira/browse/MRESOLVER-336 + @Test + void testTrimPadding() { + // 1.0.0 -> 1 + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0))); + assertEquals(3, items.size()); + GenericVersion.trimPadding(items); + assertEquals(1, items.size()); + } + + @Test + void testTrimPaddingNotNeededString() { + // 1.0.0.string -> 1.string + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_STRING, "string"))); + assertEquals(4, items.size()); + GenericVersion.trimPadding(items); + assertEquals(2, items.size()); + } + + @Test + void testTrimPaddingNeededQualifier() { + // 1.0.0.ga -> 1 + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0))); + assertEquals(4, items.size()); + GenericVersion.trimPadding(items); + assertEquals(1, items.size()); + } + + @Test + void testTrimPaddingNeededQualifierMixed() { + // 1.0.0.string.0.ga -> 1.string + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_STRING, "string"), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0))); + assertEquals(6, items.size()); + GenericVersion.trimPadding(items); + assertEquals(2, items.size()); + } + + @Test + void testTrimPaddingNeededQualifierMixedInBetweenGa() { + // 1.0.ga.0.string.0.ga -> 1.ga.0.string + List<GenericVersion.Item> items = new ArrayList<>(Arrays.asList( + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 1), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_STRING, "string"), + new GenericVersion.Item(GenericVersion.Item.KIND_INT, 0), + new GenericVersion.Item(GenericVersion.Item.KIND_QUALIFIER, 0))); + assertEquals(7, items.size()); + GenericVersion.trimPadding(items); + assertEquals(4, items.size()); + } + + @Test + void testEdgeCase_1_1() { + Version v1 = newVersion("0.0.0.ga.ga.foo"); + Version v2 = newVersion("foo"); + // they were equal in Resolver 1.x + assertNotEquals(v1, v2); + } + + @Test + void testEdgeCase_1_2() { + // as expected + assertOrder(X_LT_Y, "ga.ga.foo", "foo"); Review Comment: Today, it's the opposite. It also would be opposite if `ga`==`0` in all cases as I proposed elsewhere. > Unexpected handling of qualifiers in GenericVersionScheme > --------------------------------------------------------- > > Key: MRESOLVER-336 > URL: https://issues.apache.org/jira/browse/MRESOLVER-336 > Project: Maven Resolver > Issue Type: Bug > Components: Resolver > Affects Versions: 1.9.5 > Reporter: David M. Lloyd > Assignee: Tamas Cservenak > Priority: Major > > Given the following: > {code} > $ jbang --main=org.eclipse.aether.util.version.GenericVersionScheme > org.apache.maven.resolver:maven-resolver-util:1.9.5 0.0.0.ga.ga.foo foo > Display parameters as parsed by Maven Resolver (in canonical form and as a > list of tokens) and comparison result: > 1. 0.0.0.ga.ga.foo -> 0.0.0.ga.ga.foo; tokens: [0, 0, 0, foo] > 0.0.0.ga.ga.foo == foo > 2. foo -> foo; tokens: [foo] > {code} > This is expected iff zero-prefixed qualifiers are considered equal to the > bare qualifier, which does seem to be the case *mostly*. However, we also > have this: > {code} > $ jbang --main=org.eclipse.aether.util.version.GenericVersionScheme > org.apache.maven.resolver:maven-resolver-util:1.9.5 ga.ga.foo foo > Display parameters as parsed by Maven Resolver (in canonical form and as a > list of tokens) and comparison result: > 1. ga.ga.foo -> ga.ga.foo; tokens: [0, 0, foo] > ga.ga.foo < foo > 2. foo -> foo; tokens: [foo] > {code} > In this case we have "zero"-valued qualifiers but no leading numerical > segment, which unexpectedly changes the parsing rules. I would expect > {{ga.ga.foo == foo}} as above. Is this a bug? Is there an explanation for > this behavior? The spec doesn't seem to directly address this. -- This message was sent by Atlassian Jira (v8.20.10#820010)