| /** |
| * Tests the use of properties in Groovy |
| * |
| * @author <a href="mailto:james@coredevelopers.net">James Strachan</a> |
| * @version $Revision$ |
| */ |
| class PropertyTest extends GroovyTestCase { |
| |
| void testNormalPropertyGettersAndSetters() { |
| |
| println("About to create Foo") |
| |
| foo = new Foo() |
| |
| println("created ${foo}") |
| |
| value = foo.getMetaClass() |
| |
| println("metaClass ${value}") |
| |
| println(foo.inspect()) |
| |
| println("name ${foo.name}, blah ${foo.blah}") |
| |
| assert foo.name == "James" |
| assert foo.getName() == "James" |
| |
| assert foo.location == "London" |
| assert foo.getLocation() == "London" |
| |
| assert foo.blah == 9 |
| assert foo.getBlah() == 9 |
| |
| foo.name = "Bob" |
| foo.location = "Atlanta" |
| |
| assert foo.name == "Bob" |
| assert foo.getName() == "Bob" |
| |
| assert foo.location == "Atlanta" |
| assert foo.getLocation() == "Atlanta" |
| } |
| |
| void testOverloadedGetter() { |
| |
| foo = new Foo() |
| |
| println("count ${foo.count}") |
| |
| assert foo.getCount() == 1 |
| assert foo.count == 1 |
| |
| foo.count = 7 |
| |
| assert foo.count == 7 |
| assert foo.getCount() == 7 |
| } |
| |
| void testNoSetterAvailableOnPrivateProperty() { |
| foo = new Foo() |
| |
| // methods should fail on non-existent method calls |
| shouldFail { foo.blah = 4 } |
| shouldFail { foo.setBlah(4) } |
| } |
| |
| void testCannotSeePrivateProperties() { |
| foo = new Foo() |
| |
| // property access fails on non-existent property |
| shouldFail { x = foo.invisible } |
| |
| // methods should fail on non-existent method calls |
| shouldFail { foo.getQ() } |
| } |
| |
| void testConstructorWithNamedProperties() { |
| foo = new Foo(name:'Gromit', location:'Moon') |
| |
| assert foo.name == 'Gromit' |
| assert foo.location == 'Moon' |
| |
| println("created bean ${foo.inspect()}") |
| } |
| |
| void testToString() { |
| foo = new Foo(name:'Gromit', location:'Moon') |
| |
| println foo |
| } |
| |
| void testArrayLengthProperty() { |
| // create two arrays, since all use the same MetaArrayLengthProperty object - |
| // make sure it can work for all types and sizes |
| i = new Integer[5] |
| s = new String[10] |
| |
| // put something in it to make sure we're returning the *allocated* length, and |
| // not the *used* length |
| s[0] = "hello" |
| |
| assert i.length == 5 |
| assert s.length == 10 |
| |
| // this property does not mean there is a getLength() method |
| shouldFail { i.getLength() } |
| |
| // verify we can't set this property, it's read-only |
| shouldFail { i.length = 6 } |
| } |
| |
| void testGstringAssignment() { |
| foo = new Foo() |
| foo.body = "${foo.name}" |
| assert foo.body == "James" |
| } |
| } |
| |