...
So I wrote the following Groovy Test that exposes its behaviour:
...
| Code Block | ||
|---|---|---|
| ||
package groovy.util
class SpoofBuilder extends BuilderSupport{
def log = []
protected void setParent(Object parent, Object child){
log << "sp"
log << parent
log << child
}
protected Object createNode(Object name){
log << 'cn1'
log << name
return 'x'
}
protected Object createNode(Object name, Object value){
log << 'cn2'
log << name
log << value
return 'x'
}
protected Object createNode(Object name, Map attributes){
log << 'cn3'
log << name
attributes.each{entry -> log << entry.key; log << entry.value}
return 'x'
}
protected Object createNode(Object name, Map attributes, Object value){
log << 'cn4'
log << name
attributes.each{entry -> log << entry.key; log << entry.value}
log << value
return 'x'
}
protected void nodeCompleted(Object parent, Object node) {
log << 'nc'
log << parent
log << node
}
}
// simple node
def b = new SpoofBuilder()
assert b.log == []
def node = b.foo()
assert b.log == ['cn1','foo','nc',null, node]
// simple node with value
def b = new SpoofBuilder()
def node = b.foo('value')
assert b.log == ['cn2','foo','value', 'nc',null,node]
// simple node with one attribute
def b = new SpoofBuilder()
def node = b.foo(name:'value')
assert b.log == [
'cn3','foo', 'name','value', 'nc',null,'x']
// how is closure applied?
def b = new SpoofBuilder()
b.foo(){
b.bar()
}
assert b.log == [
'cn1','foo',
'cn1','bar',
'sp', 'x', 'x',
'nc','x','x',
'nc',null,'x']
|
...