You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2015/12/28 08:24:57 UTC
[2/2] groovy git commit: GROOVY-7074: DelegatingScript does not work
with Builder as delegate (closes #216)
GROOVY-7074: DelegatingScript does not work with Builder as delegate (closes #216)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/03d4262a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/03d4262a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/03d4262a
Branch: refs/heads/GROOVY_2_4_X
Commit: 03d4262a573c0c190e8b2305bc080329dea8f13f
Parents: 6e416ce
Author: pascalschumacher <pa...@gmx.net>
Authored: Mon Dec 28 08:24:02 2015 +0100
Committer: pascalschumacher <pa...@gmx.net>
Committed: Mon Dec 28 08:24:45 2015 +0100
----------------------------------------------------------------------
src/main/groovy/util/DelegatingScript.java | 6 +++++-
src/test/groovy/util/DelegatingScriptTest.groovy | 18 ++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/03d4262a/src/main/groovy/util/DelegatingScript.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/util/DelegatingScript.java b/src/main/groovy/util/DelegatingScript.java
index 18594cd..959c8e8 100644
--- a/src/main/groovy/util/DelegatingScript.java
+++ b/src/main/groovy/util/DelegatingScript.java
@@ -19,6 +19,7 @@
package groovy.util;
import groovy.lang.Binding;
+import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import groovy.lang.MissingMethodException;
import groovy.lang.MissingPropertyException;
@@ -107,7 +108,10 @@ public abstract class DelegatingScript extends Script {
@Override
public Object invokeMethod(String name, Object args) {
try {
- return metaClass.invokeMethod(delegate,name,args);
+ if (delegate instanceof GroovyObject) {
+ return ((GroovyObject) delegate).invokeMethod(name, args);
+ }
+ return metaClass.invokeMethod(delegate, name, args);
} catch (MissingMethodException mme) {
return super.invokeMethod(name, args);
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/03d4262a/src/test/groovy/util/DelegatingScriptTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/util/DelegatingScriptTest.groovy b/src/test/groovy/util/DelegatingScriptTest.groovy
index b4ec977..162ff3c 100644
--- a/src/test/groovy/util/DelegatingScriptTest.groovy
+++ b/src/test/groovy/util/DelegatingScriptTest.groovy
@@ -19,6 +19,8 @@
package groovy.util
import org.codehaus.groovy.control.CompilerConfiguration
+import groovy.xml.MarkupBuilder
+import java.io.StringWriter
public class DelegatingScriptTest extends GroovyTestCase {
public void testDelegatingScript() throws Exception {
@@ -37,6 +39,22 @@ public class DelegatingScriptTest extends GroovyTestCase {
assert dsl.foo==6;
assert dsl.innerBar()=='testset';
}
+
+ public void testUseMarkupBuilderAsDelegate() throws Exception {
+ def cc = new CompilerConfiguration()
+ cc.scriptBaseClass = DelegatingScript.class.name
+ def sh = new GroovyShell(new Binding(), cc)
+ def script = sh.parse(''' foo{ bar() }
+ ''')
+ StringWriter sw = new StringWriter()
+ def markupBuilder = new MarkupBuilder(sw)
+ script.setDelegate(markupBuilder)
+ script.run()
+
+ assert sw.toString() == """<foo>
+ <bar />
+</foo>"""
+ }
}
class MyDSL {