You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/12/23 19:54:49 UTC

svn commit: r1222789 - in /tapestry/tapestry5/trunk/plastic/src/test: groovy/org/apache/tapestry5/plastic/FieldAccessTests.groovy java/testsubjects/ProtectedField.java java/testsubjects/ProtectedFieldCollaborator.java

Author: hlship
Date: Fri Dec 23 18:54:49 2011
New Revision: 1222789

URL: http://svn.apache.org/viewvc?rev=1222789&view=rev
Log:
TAP5-1801: Allow non-public fields in instrumented classes

Add a test for cross-class field access

Added:
    tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldAccessTests.groovy
    tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedField.java
    tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedFieldCollaborator.java

Added: tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldAccessTests.groovy
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldAccessTests.groovy?rev=1222789&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldAccessTests.groovy (added)
+++ tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/FieldAccessTests.groovy Fri Dec 23 18:54:49 2011
@@ -0,0 +1,41 @@
+package org.apache.tapestry5.plastic
+
+/**
+ *  Tests related to access to non-private fields between transformed classes (a new feature in 5.4).
+ */
+class FieldAccessTests extends AbstractPlasticSpecification
+{
+    def "access protected field from other transformed class"()
+    {
+        FieldConduit fc = Mock()
+
+        PlasticClass pc = mgr.getPlasticClass("testsubjects.ProtectedField")
+
+        pc.allFields.first().setConduit(fc)
+
+        def delegate = pc.createInstantiator().newInstance()
+
+        pc = mgr.getPlasticClass("testsubjects.ProtectedFieldCollaborator")
+
+        pc.allFields.first().inject(delegate)
+
+        def collab = pc.createInstantiator().newInstance()
+
+        when:
+
+        collab.setProtectedValue("gloop")
+
+        then:
+
+        1 * fc.set(_, _, "gloop")
+
+
+        when:
+
+        fc.get(_, _) >> "badoop"
+
+        then:
+
+        collab.getProtectedValue() == "badoop"
+    }
+}

Added: tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedField.java?rev=1222789&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedField.java (added)
+++ tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedField.java Fri Dec 23 18:54:49 2011
@@ -0,0 +1,9 @@
+package testsubjects;
+
+/**
+ * Used to test access to protected fields. Accessed from {@link ProtectedFieldCollaborator}.
+ */
+public class ProtectedField
+{
+    protected String protectedValue;
+}

Added: tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedFieldCollaborator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedFieldCollaborator.java?rev=1222789&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedFieldCollaborator.java (added)
+++ tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/ProtectedFieldCollaborator.java Fri Dec 23 18:54:49 2011
@@ -0,0 +1,16 @@
+package testsubjects;
+
+public class ProtectedFieldCollaborator
+{
+    private ProtectedField delegate;
+
+    public String getProtectedValue()
+    {
+        return delegate.protectedValue;
+    }
+
+    public void setProtectedValue(String newValue)
+    {
+        delegate.protectedValue = newValue;
+    }
+}