Skip to content

Instantly share code, notes, and snippets.

@jimwhite
Last active December 23, 2015 06:09
Show Gist options
  • Save jimwhite/6591968 to your computer and use it in GitHub Desktop.
Save jimwhite/6591968 to your computer and use it in GitHub Desktop.
import org.junit.Test
import javax.script.Bindings
class Tests
{
@Test
def void testSP()
{
def p = new Foo()
assert p.properties.containsKey('bar')
}
@Test
def void testDP()
{
def p = new Foo()
p.addDP("xyz", "abc")
assert p.properties.containsKey('bar')
assert p.properties.containsKey('xyz')
}
@Test
def void testDP_clone()
{
def p = new Foo()
Foo.addDP("xyz", "abc")
assert p.bar == "baz"
assert p.xyz == "abc"
Foo p2 = p.clone()
assert p2.bar == "baz"
assert p2.xyz == "abc"
}
@Test
def void testDP_MCinvokeConstructor()
{
def p = new Foo()
Foo.addDP("xyz", "abc")
assert p.bar == "baz"
assert p.xyz == "abc"
Foo p2 = Foo.metaClass.invokeConstructor(bar:'123')
assert p2.bar == "123"
assert p2.xyz == "abc"
}
@Test
def void testDP_newFoo()
{
def p = new Foo()
Foo.addDP("xyz", "abc")
def p2 = new Foo()
assert p2.bar == "baz"
assert p2.xyz == "abc"
// assert p2.properties.containsKey('xyz')
}
@Test
def void testDP_newInstance()
{
Foo.addDP("xyz", "abc")
def p = new Foo()
assert p.properties.containsKey('bar')
assert p.properties.containsKey('xyz')
def p2 = Foo.newInstance()
assert p2.properties.containsKey('bar')
assert p2.properties.containsKey('xyz')
}
}
class Foo implements Cloneable
{
def bar = "baz"
static def addDP(String name, Object value)
{
Foo.metaClass {
"get${name.capitalize()}" {
println "getter called: ${name}"
value
}
}
}
Object clone() { super.clone() }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment