1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 package org.codehaus.groovy.classgen;
48
49 import java.lang.reflect.Modifier;
50
51 import org.codehaus.groovy.ast.ClassHelper;
52 import org.codehaus.groovy.ast.ClassNode;
53 import org.codehaus.groovy.ast.PropertyNode;
54 import org.codehaus.groovy.runtime.DummyBean;
55
56 /***
57 *
58 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
59 * @version $Revision: 1.8 $
60 */
61 public class PropertyTest extends TestSupport {
62
63 public void testFields() throws Exception {
64 ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, ClassHelper.OBJECT_TYPE);
65 classNode.addField("x", ACC_PUBLIC, ClassHelper.OBJECT_TYPE, null);
66 classNode.addField("y", ACC_PUBLIC, ClassHelper.Integer_TYPE, null);
67 classNode.addField("z", ACC_PRIVATE, ClassHelper.STRING_TYPE, null);
68
69 Class fooClass = loadClass(classNode);
70 assertTrue("Loaded a new class", fooClass != null);
71
72 assertField(fooClass, "x", Modifier.PUBLIC, ClassHelper.OBJECT_TYPE);
73 assertField(fooClass, "y", Modifier.PUBLIC, ClassHelper.Integer_TYPE);
74 assertField(fooClass, "z", Modifier.PRIVATE, ClassHelper.STRING_TYPE);
75 }
76
77 public void testProperties() throws Exception {
78 ClassNode classNode =new ClassNode("Foo", ACC_PUBLIC+ACC_SUPER, ClassHelper.OBJECT_TYPE);
79 classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, ClassHelper.STRING_TYPE, classNode, null, null, null));
80
81 Class fooClass = loadClass(classNode);
82 assertTrue("Loaded a new class", fooClass != null);
83
84 Object bean = fooClass.newInstance();
85 assertTrue("Managed to create bean", bean != null);
86
87 assertField(fooClass, "bar", 0, ClassHelper.STRING_TYPE);
88
89 assertGetProperty(bean, "bar", null);
90 assertSetProperty(bean, "bar", "newValue");
91 }
92
93 public void testInheritedProperties() throws Exception {
94 ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC+ACC_SUPER, ClassHelper.make(DummyBean.class));
95 classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, ClassHelper.STRING_TYPE, classNode, null, null, null));
96
97 Class fooClass = loadClass(classNode);
98 assertTrue("Loaded a new class", fooClass != null);
99
100 Object bean = fooClass.newInstance();
101 assertTrue("Managed to create bean", bean != null);
102
103 assertField(fooClass, "bar", 0, ClassHelper.STRING_TYPE);
104
105 assertGetProperty(bean, "name", "James");
106 assertSetProperty(bean, "name", "Bob");
107
108 assertGetProperty(bean, "bar", null);
109 assertSetProperty(bean, "bar", "newValue");
110 }
111 }