blob: 7d3782e5b1cb4044c2d7abf109d2e52d674b760f [file] [log] [blame]
package groovy.bugs
/**
* <p>
* Test that ensures that:
* <ul>
* <li>it is possible to write a builder in Groovy</li>
* <li>it is possible to call normal methods from the builder,
* without the methods being trapped endlessly by createNode()</li>
* </ul>
* </p>
*
* @author Guillaume Laforge
*/
class InvokeNormalMethodFromBuilder_Bug657 extends GroovyTestCase {
void testInvokeNormalMethod() {
def b = new Builder()
assert b.callNormalMethod() == "first"
def value = b.someNode() {}
assert value == "second"
}
}
class Builder extends BuilderSupport {
void setParent(Object parent, Object child) {}
Object createNode(Object name) { return createNode(name, [:], null) }
Object createNode(Object name, Map attributes) { return createNode(name, attributes, null) }
Object createNode(Object name, Object value) { return createNode(name, [:], value) }
Object createNode(Object name, Map attributes, Object value) {
println "create ${name}"
return callOtherStaticallyTypedMethod()
}
String callNormalMethod() { println "normalMethod"; return "first" }
String callOtherStaticallyTypedMethod() { println "otherMethod"; return "second" }
}