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/07/29 14:50:13 UTC

[groovy] branch master updated: GROOVY-5744, GROOVY-10666: 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 974bf0c7ba GROOVY-5744, GROOVY-10666: add test cases
974bf0c7ba is described below

commit 974bf0c7ba71dc758ee159c208fd4278d29bbb74
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Jul 29 09:49:46 2022 -0500

    GROOVY-5744, GROOVY-10666: add test cases
---
 .../MultipleAssignmentDeclarationTest.groovy       | 258 +++++++++++++--------
 .../gls/statements/MultipleAssignmentTest.groovy   |  98 +++++---
 2 files changed, 227 insertions(+), 129 deletions(-)

diff --git a/src/test/gls/statements/MultipleAssignmentDeclarationTest.groovy b/src/test/gls/statements/MultipleAssignmentDeclarationTest.groovy
index c253b89c51..8ae6744b3e 100644
--- a/src/test/gls/statements/MultipleAssignmentDeclarationTest.groovy
+++ b/src/test/gls/statements/MultipleAssignmentDeclarationTest.groovy
@@ -18,97 +18,169 @@
  */
 package gls.statements
 
-import gls.CompilableTestSupport
-
-class MultipleAssignmentDeclarationTest extends CompilableTestSupport {
-
-  void testDef() {
-    assertScript """
-      def (a,b) = [1,2]
-      assert a==1
-      assert b==2
-    """
-  }
-
-  void testDefWithoutLiteral() {
-    def list = [1, 2]
-    def (c, d) = list
-    assert c==1
-    assert d==2
-  }
-
-  void testMixedTypes() {
-    assertScript """
-      def x = "foo"
-      def (int i, String j) = [1,x]
-      assert x == "foo"
-      assert i == 1
-      assert i instanceof Integer
-      assert j == "foo"
-      assert j instanceof String
-    """
-  }
-
-  void testMixedTypesWithConversion() {
-    assertScript '''
-      def x = "foo"
-      def (int i, String j) = [1,"$x $x"]
-      assert x == "foo"
-      assert i == 1
-      assert i instanceof Integer
-      assert j == "foo foo"
-      assert j instanceof String
-    '''
-  }
-
-  void testDeclarationOrder() {
-    assertScript """
-      try {
-        def (i,j) = [1,i]
-        assert false
-      } catch (MissingPropertyException mpe) {
-        assert true
-      }
-    """
-  }
-
-  void testNestedScope() {
-    assertScript """
-       def c = {
-         def (i,j) = [1,2]
-         assert i==1
-         assert j==2
-       }
-       c()
-
-       try {
-         println i
-         assert false
-       } catch (MissingPropertyException mpe) {
-         assert true
-       }
-
-       try {
-         println j
-         assert false
-       } catch (MissingPropertyException mpe) {
-         assert true
-       }
-
-       def (i,j) = [2,3]
-       assert i==2
-       assert j==3
-       c()
-
-       assert i==2
-       assert j==3
-    """   
-  }
-
-  void testChainedMultiAssignmentDecl() {
-    def a, b
-    def (c, d) = (a, b) = [1, 2]
-    assert [a, b] == [1, 2]
-    assert [c, d] == [1, 2]
-  }
+import groovy.test.NotYetImplemented
+import org.junit.Test
+
+import static groovy.test.GroovyAssert.assertScript
+import static groovy.test.GroovyAssert.shouldFail
+
+final class MultipleAssignmentDeclarationTest {
+
+    @Test
+    void testDef1() {
+        assertScript '''
+            def (a,b) = [1,2]
+            assert a == 1
+            assert b == 2
+        '''
+    }
+
+    @Test
+    void testDef2() {
+        assertScript '''
+            def list = [1,2]
+            def (c,d) = list
+            assert c == 1
+            assert d == 2
+        '''
+    }
+
+    @Test
+    void testMixedTypes() {
+        assertScript '''
+            def x = "foo"
+            def (int i, String j) = [1,x]
+            assert x == "foo"
+            assert i == 1
+            assert i instanceof Integer
+            assert j == "foo"
+            assert j instanceof String
+        '''
+    }
+
+    @Test
+    void testMixedTypesWithConversion() {
+        assertScript '''
+            def x = "foo"
+            def (int i, String j) = [1,"$x $x"]
+            assert x == "foo"
+            assert i == 1
+            assert i instanceof Integer
+            assert j == "foo foo"
+            assert j instanceof String
+        '''
+    }
+
+    @Test
+    void testDeclarationOrder() {
+        shouldFail MissingPropertyException, '''
+            def (i,j) = [1,i]
+        '''
+    }
+
+    @Test
+    void testNestedScope() {
+        assertScript '''import static groovy.test.GroovyAssert.shouldFail
+
+            def c = {
+                def (i,j) = [1,2]
+                assert i == 1
+                assert j == 2
+            }
+            c()
+
+            shouldFail(MissingPropertyException) {
+                println i
+            }
+
+            shouldFail(MissingPropertyException) {
+                println j
+            }
+
+            def (i,j) = [2,3]
+            assert i == 2
+            assert j == 3
+            c()
+
+            assert i == 2
+            assert j == 3
+        '''
+    }
+
+    @Test
+    void testMultiAssignChain() {
+        assertScript '''
+            def a,b
+            def (c,d) = (a,b) = [1,2]
+            assert [a,b] == [1,2]
+            assert [c,d] == [1,2]
+        '''
+    }
+
+    @NotYetImplemented @Test // GROOVY-5744
+    void testMultiAssignFromIterator() {
+        assertScript '''
+            def list = [1,2,3]
+            def iter = list.iterator()
+
+            def (a,b,c) = list
+            def (d,e,f) = iter
+            assert "$a $b $c" == "$d $e $f"
+        '''
+    }
+
+    @NotYetImplemented @Test // GROOVY-10666
+    void testMultiAssignFromIterable() {
+        assertScript '''
+            class MySet {
+                List<String> ops = []
+                @Delegate Set<String> strings = []
+
+                String getAt(int index) {
+                    ops << "getAt($index)".toString()
+                    org.codehaus.groovy.runtime.DefaultGroovyMethods.getAt(this, index)
+                }
+
+                Iterator<String> iterator() {
+                    ops << "iterator()"
+                    def iterator = strings.iterator()
+                    return new Iterator<String>() {
+                        @Override
+                        boolean hasNext() {
+                            iterator.hasNext()
+                        }
+                        @Override
+                        String next() {
+                            ops << "next()"
+                            iterator.next()
+                        }
+                    }
+                }
+            }
+
+            Set<String> strings = new MySet()
+            strings << 'foo'
+            strings << 'bar'
+            strings << 'baz'
+
+            def (foo,bar,baz) = strings
+            assert foo == 'foo'
+            assert bar == 'bar'
+            assert baz == 'baz'
+
+            assert strings.ops == ['iterator()','next()','next()','next()']
+        '''
+    }
+
+    @NotYetImplemented @Test // GROOVY-10666
+    void testMultiAssignFromJavaStream() {
+        assertScript '''import java.util.stream.Stream
+
+            Stream<String> strings = Stream.of('foo','bar','baz')
+            def (foo,bar,baz) = strings
+            assert foo == 'foo'
+            assert bar == 'bar'
+            assert baz == 'baz'
+        '''
+    }
 }
diff --git a/src/test/gls/statements/MultipleAssignmentTest.groovy b/src/test/gls/statements/MultipleAssignmentTest.groovy
index 537967ffc1..71e58743c4 100644
--- a/src/test/gls/statements/MultipleAssignmentTest.groovy
+++ b/src/test/gls/statements/MultipleAssignmentTest.groovy
@@ -18,65 +18,91 @@
  */
 package gls.statements
 
-import gls.CompilableTestSupport
+import org.junit.Test
 
-class MultipleAssignmentTest extends CompilableTestSupport {
+import static groovy.test.GroovyAssert.assertScript
 
+final class MultipleAssignmentTest {
+
+    @Test
     void testList() {
-        def list = [1, 2]
-        def a, b
+        assertScript '''
+            def list = [1, 2]
+            def a, b
 
-        (a, b) = list
-        assert a == 1
-        assert b == 2
+            (a, b) = list
+            assert a == 1
+            assert b == 2
 
-        (a, b) = [3, 4]
-        assert a == 3
-        assert b == 4
+            (a, b) = [3, 4]
+            assert a == 3
+            assert b == 4
+        '''
     }
 
+    @Test
     void testArray() {
-        def array = [1, 2] as int[]
-        def a, b
+        assertScript '''
+            def array = [1, 2] as int[]
+            def a, b
 
-        (a, b) = array
-        assert a == 1
-        assert b == 2
+            (a, b) = array
+            assert a == 1
+            assert b == 2
+        '''
     }
 
-    def foo() {[1, 2]}
-
+    @Test
     void testMethod() {
-        def a, b
+        assertScript '''
+            def foo() {[1, 2]}
 
-        (a, b) = foo()
-        assert a == 1
-        assert b == 2
+            def a, b
+
+            (a, b) = foo()
+            assert a == 1
+            assert b == 2
+        '''
     }
 
+    @Test
     void testMethodOverflow() {
-        def a, b = 3
+        assertScript '''
+            def foo() {[1, 2]}
+
+            def a, b = 3
 
-        (a) = foo()
-        assert a == 1
-        assert b == 3
+            (a) = foo()
+            assert a == 1
+            assert b == 3
+        '''
     }
 
+    @Test
     void testMethodUnderflow() {
-        def a, b, c = 4
+        assertScript '''
+            def foo() {[1, 2]}
 
-        (a, b, c) = foo()
-        assert a == 1
-        assert b == 2
-        assert c == null
+            def a, b, c = 4
+
+            (a, b, c) = foo()
+            assert a == 1
+            assert b == 2
+            assert c == null
+        '''
     }
 
+    @Test
     void testChainedMultiAssignment() {
-        def a, b, c, d
-        (c, d) = (a, b) = [1, 2]
-        assert [a, b] == [1, 2]
-        assert [c, d] == [1, 2]
-        (c, d) = a = (a, b) = [3, 4]
-        assert [c, d] == [3, 4]
+        assertScript '''
+            def a, b, c, d
+
+            (c, d) = (a, b) = [1, 2]
+            assert [a, b] == [1, 2]
+            assert [c, d] == [1, 2]
+
+            (c, d) = a = (a, b) = [3, 4]
+            assert [c, d] == [3, 4]
+        '''
     }
 }
\ No newline at end of file