You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/08/23 17:54:17 UTC

[groovy] branch master updated: GROOVY-6146, GROOVY-8737, GROOVY-10099: add test cases

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 7824bd62fc GROOVY-6146, GROOVY-8737, GROOVY-10099: add test cases
7824bd62fc is described below

commit 7824bd62fc4cc21e1a6b6b376f4835f6f6049d1a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Aug 23 12:53:53 2022 -0500

    GROOVY-6146, GROOVY-8737, GROOVY-10099: add test cases
---
 src/test/groovy/VarargsMethodTest.groovy | 150 +++++++++++++++++++++----------
 1 file changed, 103 insertions(+), 47 deletions(-)

diff --git a/src/test/groovy/VarargsMethodTest.groovy b/src/test/groovy/VarargsMethodTest.groovy
index 6e04a3b391..c4a2964b12 100644
--- a/src/test/groovy/VarargsMethodTest.groovy
+++ b/src/test/groovy/VarargsMethodTest.groovy
@@ -18,65 +18,121 @@
  */
 package groovy
 
-import groovy.test.GroovyTestCase
+import org.junit.Test
 
 /**
- * VarargsMethodTest.groovy
- *
- *   1) Test to fix the Jira issues GROOVY-1023 and GROOVY-1026.
- *   2) Test the feature that the length of arguments can be variable
- *      when invoking methods with or without parameters.
+ * Tests the feature that the length of arguments can be variable when invoking
+ * methods with or without parameters.
  */
-class VarargsMethodTest extends GroovyTestCase {
+final class VarargsMethodTest {
+
+    Object nullProperty = null
 
-    void testVarargsOnly() {  
-        assertEquals 1, varargsOnlyMethod('')
-        assertEquals 1, varargsOnlyMethod(1)
-        assertEquals 2, varargsOnlyMethod('','')
-        assertEquals 1, varargsOnlyMethod( ['',''] )
-        assertEquals 2, varargsOnlyMethod( ['',''] as Object[])
-        assertEquals 2, varargsOnlyMethod( *['',''] )
+    int varargsOnlyMethod(Object[] args) {
+        // GROOVY-1023 (Java 5 feature)
+        //     If this method having varargs is invoked with no parameter,
+        //     then args is not null, but an array of length 0.
+        // GROOVY-1026 (Java 5 feature)
+        //     If this method having varargs is invoked with one parameter
+        //     null, then args is null, and so -1 is returned here.
+        args == null ? -1 : args.length
+    }
+
+    int varargsLastMethod(arg, Object[] args) {
+        // GROOVY-1026 (Java 5 feature)
+        //     If this method having varargs is invoked with two parameters
+        //     1 and null, then args is null, and so -1 is returned here.
+        args == null ? -1 : args.length
+    }
+
+    def varargsOverloads1(arg) {
+        '1'
+    }
+    def varargsOverloads1(arg, Object[] args) {
+        "1+${args?.length}".toString()
+    }
+
+    def varargsOverloads2(String key, Object[] args) {
+        "key=$key, args=$args".toString()
+    }
+    def varargsOverloads2(String key, Object[] args, Object[] parts) {
+        "key=$key, args=$args, parts=$parts".toString()
+    }
+    def varargsOverloads2(String key, Object[] args, String[] names) {
+        "key=$key, args=$args, names=$names".toString()
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Test
+    void testVarargsOnly() {
+        assert varargsOnlyMethod('') == 1
+        assert varargsOnlyMethod(11) == 1
+        assert varargsOnlyMethod('','') == 2
+        assert varargsOnlyMethod(['','']) == 1
+        assert varargsOnlyMethod(*['','']) == 2
+        assert varargsOnlyMethod(['',''] as Object[]) == 2
 
         // GROOVY-1023
-        assertEquals 0, varargsOnlyMethod()
+        assert varargsOnlyMethod() == 0
 
         // GROOVY-1026
-        assertEquals(-1, varargsOnlyMethod(null))
-        assertEquals(2, varargsOnlyMethod(null, null))
+        assert varargsOnlyMethod(null) == -1
+        assert varargsOnlyMethod(null, null) == 2
+
+        // GROOVY-6146
+        assert varargsOnlyMethod((Object[])null) == -1
+        assert varargsOnlyMethod(null as Object[]) == -1
+        assert varargsOnlyMethod((Object)null) == -1 // TODO: 1
+        assert varargsOnlyMethod(null as Object) == -1 // TODO: 1
+
+        // GROOVY-10099
+        Object[] array = null
+        assert varargsOnlyMethod(array) == -1
+        Object value = null
+        assert varargsOnlyMethod(value) == -1 // TODO: 1
+        // non-array POGO property == null
+        assert varargsOnlyMethod(nullProperty) == -1 // TODO: 1
+        // non-array POJO property (ie: via getter) returns null
+        assert varargsOnlyMethod(URI.create('http://example.com').query) == -1 // TODO: 1
+        // non-array returning method returns null
+        assert varargsOnlyMethod(Objects.toString(null, null)) == -1 // TODO: 1
     }
 
-     Integer varargsOnlyMethod(Object[] args) {
-         // GROOVY-1023 (Java 5 feature)
-         //     If this method having varargs is invoked with no parameter,
-         //     then args is not null, but an array of length 0.
-         // GROOVY-1026 (Java 5 feature)
-         //     If this method having varargs is invoked with one parameter
-         //     null, then args is null, and so -1 is returned here.
-         if (args == null)
-               return -1
-         return args.size()
-     }
-
-     void testVarargsLast() {
-         assertEquals 0, varargsLastMethod('')
-         assertEquals 0, varargsLastMethod(1)
-         assertEquals 1, varargsLastMethod('','')
-         assertEquals 2, varargsLastMethod('','','')
-         assertEquals 1, varargsLastMethod('', ['',''] )
-         assertEquals 2, varargsLastMethod('', ['',''] as Object[])
-         assertEquals 2, varargsLastMethod('', *['',''] )
+    @Test
+    void testVarargsLast() {
+        assert varargsLastMethod('') == 0
+        assert varargsLastMethod(1) == 0
+        assert varargsLastMethod('','') == 1
+        assert varargsLastMethod('','','') == 2
+        assert varargsLastMethod('',['',''] ) == 1
+        assert varargsLastMethod('',['',''] as Object[]) == 2
+        assert varargsLastMethod('',*['',''] ) == 2
 
         // GROOVY-1026
-        assertEquals(-1, varargsLastMethod('', null))
-        assertEquals(2, varargsLastMethod('', null, null))
+        assert varargsLastMethod('',null) == -1
+        assert varargsLastMethod('',null, null) == 2
     }
 
-    Integer varargsLastMethod(Object first, Object[] args) {
-        // GROOVY-1026 (Java 5 feature)
-        //     If this method having varargs is invoked with two parameters
-        //     1 and null, then args is null, and so -1 is returned here.
-        if (args == null)
-            return -1
-        return args.size()
+    @Test
+    void testVarargsSelection1() {
+        assert varargsOverloads1('') == '1'
+        assert varargsOverloads1('','') == '1+1'
+        assert varargsOverloads1('',null) == '1+null'
+        assert varargsOverloads1('','',null) == '1+2'
+        assert varargsOverloads1('',new Object[0]) == '1+0'
+    }
+
+    @Test // GROOVY-8737
+    void testVarargsSelection2() {
+        assert varargsOverloads2('hello', new Object[]{'world'}) == 'key=hello, args=[world]'
+
+        assert varargsOverloads2('hello', new String[]{'world'}) == 'key=hello, args=[world]'
+
+        assert varargsOverloads2("${'hello'}", 'world') == 'key=hello, args=[world]'
+
+        assert varargsOverloads2('hello', 'world') == 'key=hello, args=[world]'
+
+        assert varargsOverloads2('hello', new String[]{'there'}, 'Steve') == 'key=hello, args=[there], names=[Steve]'
     }
-}  
+}