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

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

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


##########
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:
   As noted on JIRA, after discussing with teammates, we consider this 
undefined (more than undocumented). In short, it is very uncommon and atypical 
to start version with qualifier. I myself consider this example stretched. 
Also, "ga" is not and must not be considered as a "replacement for" or 
"alternative to" of "0". One is qualifier other is number. The "0" value 
carried by `ga` qualifier serves the purpose of inter-qualifier comparison, not 
as "number value".





> 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