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.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to