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.runtime;
48
49 import groovy.lang.MissingMethodException;
50 import groovy.util.GroovyTestCase;
51 import groovy.util.Node;
52
53 import java.awt.HeadlessException;
54 import java.awt.Point;
55 import java.util.ArrayList;
56 import java.util.HashMap;
57 import java.util.List;
58 import java.util.Map;
59
60 import javax.swing.JButton;
61 import javax.swing.JFrame;
62 import javax.swing.JPanel;
63
64 /***
65 * Test the property access of the Invoker class
66 *
67 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
68 * @version $Revision: 1.19 $
69 */
70 public class PropertyTest extends GroovyTestCase {
71
72 protected Invoker invoker = new Invoker();
73
74 public void testMapProperties() throws Exception {
75 Map map = new HashMap();
76 map.put("foo", "abc");
77 map.put("bar", new Integer(123));
78
79 assertGetSetProperty(map, "foo", "abc", "def");
80 assertGetSetProperty(map, "bar", new Integer(123), new Double(12.34));
81 }
82
83 public void testBeanProperties() throws Exception {
84 DummyBean bean = new DummyBean();
85
86 assertGetSetProperty(bean, "name", "James", "Bob");
87 assertGetSetProperty(bean, "i", new Integer(123), new Integer(455));
88
89
90 assertGetSetProperty(bean, "dynamicFoo", null, "aValue");
91 assertGetSetProperty(bean, "dynamicFoo", "aValue", "NewValue");
92 }
93
94 /*** todo this is no longer possible in new groovy
95 public void testUsingMethodProperty() throws Exception {
96 DummyBean bean = new DummyBean();
97
98 assertGetSetProperty(bean, "name", "James", "Bob");
99
100 Object value = InvokerHelper.getProperty(bean, "getName");
101 assertTrue("Should have returned a closure: " + value, value instanceof Closure);
102 Closure closure = (Closure) value;
103 Object result = closure.call(null);
104 assertEquals("Result of call to closure", "Bob", result);
105 }
106 **/
107
108
109 public void testStaticProperty() throws Exception {
110 Object value = InvokerHelper.getProperty(System.class, "out");
111 assertEquals("static property out", System.out, value);
112 }
113
114 public void testClassProperty() throws Exception {
115 Class c = String.class;
116 Object value = InvokerHelper.getProperty(c, "name");
117 assertEquals("class name property", c.getName(), value);
118 }
119
120 public void testMapEntryProperty() throws Exception {
121 HashMap map = new HashMap();
122 map.put("a", "x");
123 Object[] array = map.entrySet().toArray();
124 Object entry = array[0];
125
126 Object key = InvokerHelper.getProperty(entry, "key");
127 assertEquals("key property", "a", key);
128
129 Object value = InvokerHelper.getProperty(entry, "value");
130 assertEquals("value property", "x", value);
131 }
132
133 /*** todo this is no longer possible in new groovy
134 public void testMethodProperty() throws Exception {
135 Object value = InvokerHelper.getProperty(this, "getCheese");
136 assertTrue("Should have returned a closure: " + value, value instanceof Closure);
137
138 Object result = ((Closure) value).call();
139 assertEquals("result of closure call", getCheese(), result);
140
141 System.out.println("Closure: " + value + " and cheese: " + result);
142 }
143 **/
144
145 public void testListCoercionProperty() throws Exception {
146 DummyBean bean = new DummyBean();
147 List list = new ArrayList();
148 list.add(new Integer(10));
149 list.add(new Integer(20));
150
151 InvokerHelper.setProperty(bean, "point", list);
152 assertEquals("Should have set a point", new Point(10, 20), bean.getPoint());
153 }
154
155 public void testListCoercionPropertyOnJFrame() throws Exception {
156 try {
157 JFrame bean = new JFrame();
158 List list = new ArrayList();
159 list.add(new Integer(10));
160 list.add(new Integer(20));
161
162 InvokerHelper.setProperty(bean, "location", list);
163 assertEquals("Should have set a point", new Point(10, 20), bean.getLocation());
164 }
165 catch (HeadlessException e) {
166
167 }
168 catch (MissingMethodException e) {
169 System.out.println("Failed with cause: " + e);
170 e.printStackTrace();
171 fail("Should not have throw: " + e);
172 }
173 }
174
175 public void testListNavigationProperty() throws Exception {
176 List list = new ArrayList();
177 list.add(new DummyBean("James"));
178 list.add(new DummyBean("Bob"));
179
180 List value = (List) InvokerHelper.getProperty(list, "name");
181 assertArrayEquals(new Object[] { "James", "Bob" }, value.toArray());
182 }
183
184 public void testListOfListNavigationProperty() throws Exception {
185 List list = new ArrayList();
186 list.add(new DummyBean("James"));
187 list.add(new DummyBean("Bob"));
188
189 List listOfList = new ArrayList();
190 listOfList.add(list);
191
192 List value = (List) InvokerHelper.getProperty(listOfList, "name");
193 assertArrayEquals(new Object[] { "James", "Bob" }, value.toArray());
194 }
195
196 public void testNodeNavigationProperty() throws Exception {
197 Node z = new Node(null, "z");
198 Node y = new Node(null, "y");
199
200 List children = new ArrayList();
201 children.add(y);
202 children.add(z);
203
204 Node x = new Node(null, "x", children);
205
206 children = new ArrayList();
207 children.add(x);
208 Node b = new Node(null, "b", children);
209
210
211
212 List value = (List) InvokerHelper.getProperty(b, "x");
213 assertArrayEquals(new Object[] { x }, value.toArray());
214
215 value = (List) InvokerHelper.getProperty(value, "z");
216 assertArrayEquals(new Object[] { z }, value.toArray());
217 }
218
219 public void testUsingInPropertyOnProcessViaGroovyMethod() throws Exception {
220 Process process = DefaultGroovyMethods.execute("java -version");
221 Object value = InvokerHelper.getProperty(process, "in");
222 assertNotNull(value);
223
224 System.out.println("Found in: " + value);
225
226 process.destroy();
227 }
228
229 public Object getCheese() {
230 return "cheddar";
231 }
232
233 public void testComponentParent() {
234 JPanel panel = new JPanel();
235 JButton bean = new JButton();
236
237 panel.add(bean);
238
239 Object value = InvokerHelper.getProperty(bean, "parent");
240 assertTrue(value != null);
241 }
242
243
244
245
246 protected void assertGetSetProperty(Object object, String property, Object currentValue, Object newValue) {
247 assertGetProperty(object, property, currentValue);
248
249 InvokerHelper.setProperty(object, property, newValue);
250
251 assertGetProperty(object, property, newValue);
252 }
253
254 protected void assertGetProperty(Object object, String property, Object expected) {
255 Object value = InvokerHelper.getProperty(object, property);
256
257 assertEquals("property: " + property + " of: " + object, expected, value);
258 }
259 }