You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by pa...@apache.org on 2015/05/23 01:25:39 UTC

[2/3] incubator-groovy git commit: Removed commented-out code.

Removed commented-out code.


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/fd3ce1a6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/fd3ce1a6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/fd3ce1a6

Branch: refs/heads/master
Commit: fd3ce1a625ce92aae41a8339a7a77533c883f964
Parents: 1a320e9
Author: John Hurst <jo...@gmail.com>
Authored: Sun Dec 28 17:41:59 2014 +1300
Committer: Paul King <pa...@asert.com.au>
Committed: Fri May 22 20:59:26 2015 +1000

----------------------------------------------------------------------
 .../codehaus/groovy/ast/tools/GeneralUtils.java | 18 ++++
 .../ExternalizeMethodsASTTransformation.java    |  1 +
 .../ExternalizeVerifierASTTransformation.java   |  1 +
 .../transform/SortableASTTransformation.java    | 14 +--
 .../transform/AutoCloneTransformTest.groovy     | 66 ++++++++++++++
 .../EqualsAndHashCodeTransformTest.groovy       | 90 +++++++++++++++++++
 .../ExternalizeMethodsTransformTest.groovy      | 65 ++++++++++++++
 .../ExternalizeVerifierTransformTest.groovy     | 82 +++++++++++++++++
 .../transform/SortableTransformTest.groovy      | 13 ++-
 .../transform/ToStringTransformTest.groovy      | 95 ++++++++++++++++----
 .../TupleConstructorTransformTest.groovy        | 89 ++++++++++++++++++
 11 files changed, 505 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
index 7fa98a1..16e8335 100644
--- a/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -363,6 +363,15 @@ public class GeneralUtils {
         return result;
     }
 
+    public static List<String> getInstanceNonPropertyFieldNames(ClassNode cNode) {
+        List<FieldNode> fList = getInstanceNonPropertyFields(cNode);
+        List<String> result = new ArrayList<String>(fList.size());
+        for (FieldNode fNode : fList) {
+            result.add(fNode.getName());
+        }
+        return result;
+    }
+
     public static List<PropertyNode> getInstanceProperties(ClassNode cNode) {
         final List<PropertyNode> result = new ArrayList<PropertyNode>();
         for (PropertyNode pNode : cNode.getProperties()) {
@@ -373,6 +382,15 @@ public class GeneralUtils {
         return result;
     }
 
+    public static List<String> getInstancePropertyNames(ClassNode cNode) {
+        List<PropertyNode> pList = getInstanceProperties(cNode);
+        List<String> result = new ArrayList<String>(pList.size());
+        for (PropertyNode pNode : pList) {
+            result.add(pNode.getName());
+        }
+        return result;
+    }
+
     public static List<FieldNode> getInstancePropertyFields(ClassNode cNode) {
         final List<FieldNode> result = new ArrayList<FieldNode>();
         for (PropertyNode pNode : cNode.getProperties()) {

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/main/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java b/src/main/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
index 17a4b96..822c0bf 100644
--- a/src/main/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
@@ -75,6 +75,7 @@ public class ExternalizeMethodsASTTransformation extends AbstractASTTransformati
             cNode.addInterface(EXTERNALIZABLE_TYPE);
             boolean includeFields = memberHasValue(anno, "includeFields", true);
             List<String> excludes = getMemberList(anno, "excludes");
+            if (!checkPropertyList(cNode, excludes, "excludes", anno, MY_TYPE_NAME, includeFields)) return;
             List<FieldNode> list = getInstancePropertyFields(cNode);
             if (includeFields) {
                 list.addAll(getInstanceNonPropertyFields(cNode));

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/main/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java b/src/main/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
index 7ec0cc9..4afeecf 100644
--- a/src/main/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
@@ -62,6 +62,7 @@ public class ExternalizeVerifierASTTransformation extends AbstractASTTransformat
             boolean includeFields = memberHasValue(anno, "includeFields", true);
             boolean checkPropertyTypes = memberHasValue(anno, "checkPropertyTypes", true);
             List<String> excludes = getMemberList(anno, "excludes");
+            if (!checkPropertyList(cNode, excludes, "excludes", anno, MY_TYPE_NAME, includeFields)) return;
             List<FieldNode> list = getInstancePropertyFields(cNode);
             if (includeFields) {
                 list.addAll(getInstanceNonPropertyFields(cNode));

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/main/org/codehaus/groovy/transform/SortableASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/SortableASTTransformation.java b/src/main/org/codehaus/groovy/transform/SortableASTTransformation.java
index 69e2bbb..a6f1eab 100644
--- a/src/main/org/codehaus/groovy/transform/SortableASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/SortableASTTransformation.java
@@ -83,6 +83,8 @@ public class SortableASTTransformation extends AbstractASTTransformation {
         List<String> includes = getMemberList(annotation, "includes");
         List<String> excludes = getMemberList(annotation, "excludes");
         if (!checkIncludeExclude(annotation, excludes, includes, MY_TYPE_NAME)) return;
+        if (!checkPropertyList(classNode, includes, "includes", annotation, MY_TYPE_NAME, false)) return;
+        if (!checkPropertyList(classNode, excludes, "excludes", annotation, MY_TYPE_NAME, false)) return;
         if (classNode.isInterface()) {
             addError(MY_TYPE_NAME + " cannot be applied to interface " + classNode.getName(), annotation);
         }
@@ -198,9 +200,6 @@ public class SortableASTTransformation extends AbstractASTTransformation {
                     !includes.isEmpty() && !includes.contains(propertyName)) continue;
             properties.add(property);
         }
-        for (String name : includes) {
-            checkKnownProperty(annotation, name, properties);
-        }
         for (PropertyNode pNode : properties) {
             checkComparable(pNode);
         }
@@ -223,13 +222,4 @@ public class SortableASTTransformation extends AbstractASTTransformation {
                 pNode.getName() + "' must be Comparable", pNode);
     }
 
-    private void checkKnownProperty(AnnotationNode annotation, String name, List<PropertyNode> properties) {
-        for (PropertyNode pNode: properties) {
-            if (name.equals(pNode.getName())) {
-                return;
-            }
-        }
-        addError("Error during " + MY_TYPE_NAME + " processing: tried to include unknown property '" +
-                name + "'", annotation);
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/AutoCloneTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/AutoCloneTransformTest.groovy b/src/test/org/codehaus/groovy/transform/AutoCloneTransformTest.groovy
new file mode 100644
index 0000000..05aa26b
--- /dev/null
+++ b/src/test/org/codehaus/groovy/transform/AutoCloneTransformTest.groovy
@@ -0,0 +1,66 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.transform
+
+class AutoCloneTransformTest extends GroovyShellTestCase {
+
+    void testOk() {
+        assertScript """
+                import groovy.transform.AutoClone
+
+                @AutoClone
+                class Person {
+                    String first, last
+                    List favItems
+                    Date since
+                }
+
+                def p = new Person(first:'John', last:'Smith', favItems:['ipod', 'shiraz'], since:new Date())
+                def p2 = p.clone()
+
+                assert p instanceof Cloneable
+                assert p.favItems instanceof Cloneable
+                assert p.since instanceof Cloneable
+                assert !(p.first instanceof Cloneable)
+
+                assert !p.is(p2)
+                assert !p.favItems.is(p2.favItems)
+                assert !p.since.is(p2.since)
+                assert p.first.is(p2.first)
+            """
+    }
+
+    void testExcludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                    import groovy.transform.AutoClone
+
+                    @AutoClone(excludes='sirName')
+                    class Person {
+                        String firstName
+                        String surName
+                    }
+
+                    new Person(firstName: "John", surName: "Doe").clone()
+                """
+        }
+        assert message.contains("Error during @AutoClone processing: 'excludes' property 'sirName' does not exist.")
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/EqualsAndHashCodeTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/EqualsAndHashCodeTransformTest.groovy b/src/test/org/codehaus/groovy/transform/EqualsAndHashCodeTransformTest.groovy
new file mode 100644
index 0000000..1333887
--- /dev/null
+++ b/src/test/org/codehaus/groovy/transform/EqualsAndHashCodeTransformTest.groovy
@@ -0,0 +1,90 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.transform
+
+class EqualsAndHashCodeTransformTest extends GroovyShellTestCase {
+
+    void testOk() {
+        assertScript """
+            import groovy.transform.EqualsAndHashCode
+            @EqualsAndHashCode
+            class Person {
+                String first, last
+                int age
+            }
+
+            def p1 = new Person(first:'John', last:'Smith', age:21)
+            def p2 = new Person(first:'John', last:'Smith', age:21)
+            assert p1 == p2
+            def map = [:]
+            map[p1] = 45
+            assert map[p2] == 45
+        """
+    }
+
+    void testIncludesAndExcludesTogetherResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.EqualsAndHashCode
+
+                @EqualsAndHashCode(includes='surName', excludes='surName')
+                class Person {
+                    String surName
+                }
+
+                new Person(surName: "Doe")
+            """
+        }
+        assert message.contains("Error during @EqualsAndHashCode processing: Only one of 'includes' and 'excludes' should be supplied not both.")
+    }
+
+    void testIncludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.EqualsAndHashCode
+
+                @EqualsAndHashCode(includes='sirName')
+                class Person {
+                    String surName
+                }
+
+                new Person(surName: "Doe")
+            """
+        }
+        assert message.contains("Error during @EqualsAndHashCode processing: 'includes' property 'sirName' does not exist.")
+    }
+
+    void testExcludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.EqualsAndHashCode
+
+                @EqualsAndHashCode(excludes='sirName')
+                class Person {
+                    String firstName
+                    String surName
+                }
+
+                new Person(firstName: "John", surName: "Doe")
+            """
+        }
+        assert message.contains("Error during @EqualsAndHashCode processing: 'excludes' property 'sirName' does not exist.")
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/ExternalizeMethodsTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/ExternalizeMethodsTransformTest.groovy b/src/test/org/codehaus/groovy/transform/ExternalizeMethodsTransformTest.groovy
new file mode 100644
index 0000000..663a07c
--- /dev/null
+++ b/src/test/org/codehaus/groovy/transform/ExternalizeMethodsTransformTest.groovy
@@ -0,0 +1,65 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.transform
+
+class ExternalizeMethodsTransformTest extends GroovyShellTestCase {
+
+    void testOk() {
+        assertScript """
+            import groovy.transform.ExternalizeMethods
+            @ExternalizeMethods
+            class Person {
+              String first, last
+              List favItems
+              Date since
+            }
+
+            def p = new Person(first: "John", last: "Doe", favItems: ["one", "two"], since: Date.parse("yyyy-MM-dd", "2014-12-28"))
+
+            def baos = new ByteArrayOutputStream()
+            p.writeExternal(new ObjectOutputStream(baos))
+
+            def p2 = new Person()
+            p2.readExternal(new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())))
+
+            assert p2.first == "John"
+            assert p2.last == "Doe"
+            assert p2.favItems == ["one", "two"]
+            assert p2.since == Date.parse("yyyy-MM-dd", "2014-12-28")
+        """
+    }
+
+    void testExcludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ExternalizeMethods
+
+                @ExternalizeMethods(excludes='sirName')
+                class Person {
+                    String firstName
+                    String surName
+                }
+
+                new Person(firstName: "John", surName: "Doe")
+            """
+        }
+        assert message.contains("Error during @ExternalizeMethods processing: 'excludes' property 'sirName' does not exist.")
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/ExternalizeVerifierTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/ExternalizeVerifierTransformTest.groovy b/src/test/org/codehaus/groovy/transform/ExternalizeVerifierTransformTest.groovy
new file mode 100644
index 0000000..9a04081
--- /dev/null
+++ b/src/test/org/codehaus/groovy/transform/ExternalizeVerifierTransformTest.groovy
@@ -0,0 +1,82 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.transform
+
+class ExternalizeVerifierTransformTest extends GroovyShellTestCase {
+
+    void testCheckPropertyTypes() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ExternalizeVerifier
+
+                class Foo {}
+
+                @ExternalizeVerifier(checkPropertyTypes=true)
+                class Person implements Externalizable {
+                    String firstName
+                    Foo foo
+
+                    void readExternal(ObjectInput inp) {}
+                    void writeExternal(ObjectOutput outp) {}
+                }
+
+                new Person()
+            """
+        }
+        assert message.contains("@ExternalizeVerifier: strict type checking is enabled and the non-primitive property (or field) 'foo' in an Externalizable class has the type 'Foo' which isn't Externalizable or Serializable")
+    }
+
+    void testExcludes() {
+        assertScript """
+            import groovy.transform.ExternalizeVerifier
+
+            class Foo {}
+
+            @ExternalizeVerifier(excludes='foo', checkPropertyTypes=true)
+            class Person implements Externalizable {
+                String firstName
+                Foo foo
+
+                void readExternal(ObjectInput inp) {}
+                void writeExternal(ObjectOutput outp) {}
+            }
+
+            new Person()
+        """
+    }
+
+    void testExcludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ExternalizeVerifier
+
+                @ExternalizeVerifier(excludes='sirName')
+                class Person implements Externalizable {
+                    String firstName
+                    String surName
+
+                    void readExternal(ObjectInput inp) {}
+                    void writeExternal(ObjectOutput outp) {}
+                }
+            """
+        }
+        assert message.contains("Error during @ExternalizeVerifier processing: 'excludes' property 'sirName' does not exist.")
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/SortableTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/SortableTransformTest.groovy b/src/test/org/codehaus/groovy/transform/SortableTransformTest.groovy
index e4c59cc..6a0540e 100644
--- a/src/test/org/codehaus/groovy/transform/SortableTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/SortableTransformTest.groovy
@@ -135,7 +135,18 @@ class SortableTransformTest extends CompilableTestSupport {
               Integer born
             }
         '''
-        assert message.contains("Error during @Sortable processing: tried to include unknown property 'middle'")
+        assert message.contains("Error during @Sortable processing: 'includes' property 'middle' does not exist.")
+    }
+
+    void testBadExclude() {
+        def message = shouldFail '''
+            @groovy.transform.Sortable(excludes='first,middle') class Person {
+              String first
+              String last
+              Integer born
+            }
+        '''
+        assert message.contains("Error during @Sortable processing: 'excludes' property 'middle' does not exist.")
     }
 
     void testBadPropertyType() {

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
index 675c900..0df3b9d 100644
--- a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
@@ -18,11 +18,8 @@
  */
 package org.codehaus.groovy.transform
 
-/**
- * @author Andre Steingress
- */
 class ToStringTransformTest extends GroovyShellTestCase {
-    
+
     void testSimpleToString() {
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -140,7 +137,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("BandMember(bandName:U2, name:Bono)", toString)
     }
 
-    void testSuper()  {
+    void testSuper() {
 
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -164,7 +161,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("Person(null, Doe, HumanBeing())", toString)
     }
 
-    void testIgnoreStaticProperties()  {
+    void testIgnoreStaticProperties() {
 
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -180,7 +177,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("Person()", toString)
     }
 
-    void testWithCollection()  {
+    void testWithCollection() {
 
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -197,7 +194,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("Person(relatives:[a, b, c], mates:[friends:[c, d, e]])", toString)
     }
 
-    void testExcludesAndIgnoreNulls()  {
+    void testExcludesAndIgnoreNulls() {
 
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -213,7 +210,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("Person()", toString)
     }
 
-    void testIncludesAndIgnoreNulls()  {
+    void testIncludesAndIgnoreNulls() {
 
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -229,7 +226,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("Person()", toString)
     }
 
-    void testSkipInternalProperties()  {
+    void testSkipInternalProperties() {
 
         def toString = evaluate("""
             import groovy.transform.ToString
@@ -245,7 +242,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assertEquals("Person()", toString)
     }
 
-    void testPseudoProperties()  {
+    void testPseudoProperties() {
         def toString = evaluate('''
             import groovy.transform.*
 
@@ -300,7 +297,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
         assert toString == "SportsPerson(title:Mr, golfer:false, adult:true, cyclist:true)"
     }
 
-    void testSelfReference()  {
+    void testSelfReference() {
 
         def toString = evaluate("""
             import groovy.transform.*
@@ -319,7 +316,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
 
         assert toString == 'Tree(val:foo, left:(this), right:(this))'
     }
-    
+
     void testIncludePackage() {
         def toString = evaluate("""
                 package my.company
@@ -333,7 +330,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
             """)
 
         assertEquals("my.company.Person()", toString)
-        
+
         toString = evaluate("""
                 package my.company
 
@@ -346,7 +343,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
             """)
 
         assertEquals("my.company.Person()", toString)
-        
+
         toString = evaluate("""
                 package my.company
                 
@@ -357,7 +354,73 @@ class ToStringTransformTest extends GroovyShellTestCase {
                 
                 new Person().toString()
             """)
-                
+
         assertEquals("Person()", toString)
     }
+
+    void testIncludeSuperWithoutSuperClassResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ToString
+
+                @ToString(includeSuper=true)
+                class Person {
+                    String surName
+                }
+
+                new Person(surName: "Doe").toString()
+            """
+        }
+        assert message.contains("Error during @ToString processing: includeSuper=true but 'Person' has no super class.")
+    }
+
+    void testIncludesAndExcludesTogetherResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ToString
+
+                @ToString(includes='surName', excludes='surName')
+                class Person {
+                    String surName
+                }
+
+                new Person(surName: "Doe").toString()
+            """
+        }
+        assert message.contains("Error during @ToString processing: Only one of 'includes' and 'excludes' should be supplied not both.")
+    }
+
+    void testIncludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ToString
+
+                @ToString(includes='sirName')
+                class Person {
+                    String surName
+                }
+
+                new Person(surName: "Doe").toString()
+            """
+        }
+        assert message.contains("Error during @ToString processing: 'includes' property 'sirName' does not exist.")
+    }
+
+    void testExcludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.ToString
+
+                @ToString(excludes='sirName')
+                class Person {
+                    String firstName
+                    String surName
+                }
+
+                new Person(firstName: "John", surName: "Doe").toString()
+            """
+        }
+        assert message.contains("Error during @ToString processing: 'excludes' property 'sirName' does not exist.")
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/fd3ce1a6/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy b/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
new file mode 100644
index 0000000..d8fa6d9
--- /dev/null
+++ b/src/test/org/codehaus/groovy/transform/TupleConstructorTransformTest.groovy
@@ -0,0 +1,89 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.codehaus.groovy.transform
+
+class TupleConstructorTransformTest extends GroovyShellTestCase {
+
+    void testOk() {
+        assertScript """
+            import groovy.transform.TupleConstructor
+
+            @TupleConstructor
+            class Person {
+                String firstName
+                String lastName
+            }
+
+            def p = new Person("John", "Doe")
+            assert p.firstName == "John"
+            assert p.lastName == "Doe"
+        """
+    }
+
+    void testIncludesAndExcludesTogetherResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.TupleConstructor
+
+                @TupleConstructor(includes='surName', excludes='surName')
+                class Person {
+                    String surName
+                }
+
+                new Person("Doe")
+            """
+        }
+        assert message.contains("Error during @TupleConstructor processing: Only one of 'includes' and 'excludes' should be supplied not both.")
+    }
+
+    void testIncludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.TupleConstructor
+
+                @TupleConstructor(includes='sirName')
+                class Person {
+                    String firstName
+                    String surName
+                }
+
+                def p = new Person("John", "Doe")
+            """
+        }
+        assert message.contains("Error during @TupleConstructor processing: 'includes' property 'sirName' does not exist.")
+    }
+
+    void testExcludesWithInvalidPropertyNameResultsInError() {
+        def message = shouldFail {
+            evaluate """
+                import groovy.transform.TupleConstructor
+
+                @TupleConstructor(excludes='sirName')
+                class Person {
+                    String firstName
+                    String surName
+                }
+
+                def p = new Person("John", "Doe")
+            """
+        }
+        assert message.contains("Error during @TupleConstructor processing: 'excludes' property 'sirName' does not exist.")
+    }
+
+}
\ No newline at end of file