[ 
https://issues.apache.org/jira/browse/MRESOLVER-336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17807335#comment-17807335
 ] 

ASF GitHub Bot commented on MRESOLVER-336:
------------------------------------------

dmlloyd commented on code in PR #406:
URL: https://github.com/apache/maven-resolver/pull/406#discussion_r1453684237


##########
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");
+    }
+
+    @Test
+    void testEdgeCase_2_1() {
+        assertOrder(X_GT_Y, "0.foo.1.2.3", "foo.1.2.3");
+        // they were equal in Resolver 1.x
+        assertOrder(X_GT_Y, "0.foo", "foo");
+        assertOrder(X_EQ_Y, "1.0.0-foo", "1-foo");
+        // but "foo" != "ga" (string > qualifier)
+        assertOrder(X_LT_Y, "1.0.0-ga-foo", "1-foo");
+        assertOrder(X_EQ_Y, "1.0.0-ga-foo", "1-ga-foo");
+        assertOrder(X_LT_Y, "1.0.0.final-foo", "1-foo");
+        assertOrder(X_EQ_Y, "1.0.0.final-foo", "1-final-foo");
+    }
+
+    @Test
+    void testEdgeCase_2_2() {
+        Version v1 = newVersion("0.0.0.ga.ga.foo");
+        Version v2 = newVersion("foo");
+        Version v3 = newVersion("0.0.0.0.0.foo");
+        // they were equal in Resolver 1.x
+        assertNotEquals(v1, v2);
+        // they were equal in Resolver 1.x
+        assertNotEquals(v2, v3);
+        // but "0" != "ga"
+        assertNotEquals(v1, v3);
+    }
+
+    @Test
+    void testEdgeCase_2_3() {
+        // 1.ga trimmed to 1 == 1.0.0.0.0.0...
+        assertOrder(X_EQ_Y, "1.ga", "1.0");
+        // ga.1 is not trimmed < 0.1 (as qualifier < number)
+        assertOrder(X_LT_Y, "ga.1", "0.1");
+        // 1.ga.1 is not trimmed < 1.0.1 (as qualifier < number)
+        assertOrder(X_LT_Y, "1.ga.1", "1.0.1");

Review Comment:
   I see, this reflects the existing behavior. +1 then. I'd love to see this 
change in the future but I agree that this is accurate to how the behavior 
works today.





> 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)

Reply via email to