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