1   package org.apache.velocity.test;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.    
20   */
21  
22  import java.util.HashMap;
23  import java.util.Map;
24  
25  import junit.framework.Test;
26  import junit.framework.TestSuite;
27  
28  import org.apache.velocity.runtime.RuntimeInstance;
29  import org.apache.velocity.test.misc.GetPutObject;
30  import org.apache.velocity.test.misc.UberspectorTestObject;
31  import org.apache.velocity.util.introspection.Uberspect;
32  import org.apache.velocity.util.introspection.VelPropertyGet;
33  import org.apache.velocity.util.introspection.VelPropertySet;
34  
35  
36  public class UberspectorTestCase
37          extends BaseTestCase
38  {
39      private RuntimeInstance ri;
40  
41      public UberspectorTestCase(String name)
42      {
43          super(name);
44      }
45  
46      public static Test suite()
47      {
48          return new TestSuite(UberspectorTestCase.class);
49      }
50  
51      public void setUp()
52              throws Exception
53      {
54          ri = new RuntimeInstance();
55          ri.init();
56      }
57  
58      public void testNullObjects()
59              throws Exception
60      {
61          // How about some null objects... Gee, I'm mean. ;-)
62          Uberspect u = ri.getUberspect();
63  
64          VelPropertyGet getter = u.getPropertyGet(null, "foo", null);
65          assertNull(getter);
66  
67          VelPropertySet setter = u.getPropertySet(null, "foo", Object.class, null);
68          assertNull(setter);
69      }
70  
71      public void testEmptyPropertyGetter()
72              throws Exception
73      {
74          Uberspect u = ri.getUberspect();
75          Map map = new HashMap();
76  
77          VelPropertyGet getter = u.getPropertyGet(map, "", null);
78  
79          // Don't screw up on empty properties. That should map to get("")
80          assertNotNull(getter);
81          assertEquals("Found wrong method", "get", getter. getMethodName());
82      }
83  
84      public void testEmptyPropertySetter()
85              throws Exception
86      {
87          Uberspect u = ri.getUberspect();
88          Map map = new HashMap();
89  
90          VelPropertySet setter = u.getPropertySet(map, "", Object.class, null);
91  
92          // Don't screw up on empty properties. That should map to put("", Object)
93          assertNotNull(setter);
94          assertEquals("Found wrong method", "put", setter.getMethodName());
95      }
96  
97      public void testNullPropertyGetter()
98          throws Exception
99      {
100         Uberspect u = ri.getUberspect();
101         GetPutObject gpo = new GetPutObject();
102         Map map = new HashMap();
103 
104         VelPropertyGet getter = u.getPropertyGet(gpo, null, null);
105 
106         // Don't screw up on null properties. That should map to get() on the GPO.
107         assertNotNull(getter);
108         assertEquals("Found wrong method", "get", getter.getMethodName());
109 
110         // And should be null on a Map which does not have a get()
111         getter = u.getPropertyGet(map, null, null);
112         assertNull(getter);
113 
114     }
115 
116     public void testNullPropertySetter()
117         throws Exception
118     {
119         Uberspect u = ri.getUberspect();
120         GetPutObject gpo = new GetPutObject();
121         Map map = new HashMap();
122 
123         // Don't screw up on null properties. That should map to put() on the GPO.
124         VelPropertySet setter = u.getPropertySet(gpo, null, "", null);
125         assertNotNull(setter);
126         assertEquals("Found wrong method", "put", setter.getMethodName());
127 
128         // And should be null on a Map which does not have a put()
129         setter = u.getPropertySet(map, null, "", null);
130         assertNull(setter);
131     }
132 
133     public void testNullParameterType()
134             throws Exception
135     {
136         VelPropertySet setter;
137 
138         Uberspect u = ri.getUberspect();
139         UberspectorTestObject uto = new UberspectorTestObject();
140 
141         // setRegular()
142         setter = u.getPropertySet(uto, "Regular", null, null);
143         assertNotNull(setter);
144         assertEquals("Found wrong method", "setRegular", setter.getMethodName());
145 
146         // setAmbigous() - String and StringBuffer available
147         setter = u.getPropertySet(uto, "Ambigous", null, null);
148         assertNull(setter);
149 
150         // setAmbigous() - same with Object?
151         setter = u.getPropertySet(uto, "Ambigous", new Object(), null);
152         assertNull(setter);
153     }
154 
155     public void testMultipleParameterTypes()
156             throws Exception
157     {
158         VelPropertySet setter;
159 
160         Uberspect u = ri.getUberspect();
161         UberspectorTestObject uto = new UberspectorTestObject();
162 
163         // setAmbigous() - String
164         setter = u.getPropertySet(uto, "Ambigous", "", null);
165         assertNotNull(setter);
166         assertEquals("Found wrong method", "setAmbigous", setter.getMethodName());
167 
168         // setAmbigous() - StringBuffer
169         setter = u.getPropertySet(uto, "Ambigous", new StringBuffer(), null);
170         assertNotNull(setter);
171         assertEquals("Found wrong method", "setAmbigous", setter.getMethodName());
172     }
173 
174 
175     public void testRegularGetters()
176             throws Exception
177     {
178         VelPropertyGet getter;
179 
180         Uberspect u = ri.getUberspect();
181         UberspectorTestObject uto = new UberspectorTestObject();
182 
183         // getRegular()
184         getter = u.getPropertyGet(uto, "Regular", null);
185         assertNotNull(getter);
186         assertEquals("Found wrong method", "getRegular", getter.getMethodName());
187 
188         // Lowercase regular
189         getter = u.getPropertyGet(uto, "regular", null);
190         assertNotNull(getter);
191         assertEquals("Found wrong method", "getRegular", getter.getMethodName());
192 
193         // lowercase: getpremium()
194         getter = u.getPropertyGet(uto, "premium", null);
195         assertNotNull(getter);
196         assertEquals("Found wrong method", "getpremium", getter.getMethodName());
197 
198         // test uppercase: getpremium()
199         getter = u.getPropertyGet(uto, "Premium", null);
200         assertNotNull(getter);
201         assertEquals("Found wrong method", "getpremium", getter.getMethodName());
202     }
203 
204     public void testBooleanGetters()
205             throws Exception
206     {
207         VelPropertyGet getter;
208 
209         Uberspect u = ri.getUberspect();
210         UberspectorTestObject uto = new UberspectorTestObject();
211 
212         // getRegular()
213         getter = u.getPropertyGet(uto, "RegularBool", null);
214         assertNotNull(getter);
215         assertEquals("Found wrong method", "isRegularBool", getter.getMethodName());
216 
217         // Lowercase regular
218         getter = u.getPropertyGet(uto, "regularBool", null);
219         assertNotNull(getter);
220         assertEquals("Found wrong method", "isRegularBool", getter.getMethodName());
221 
222         // lowercase: getpremiumBool()
223         getter = u.getPropertyGet(uto, "premiumBool", null);
224         assertNotNull(getter);
225         assertEquals("Found wrong method", "ispremiumBool", getter.getMethodName());
226 
227         // test uppercase: ()
228         getter = u.getPropertyGet(uto, "PremiumBool", null);
229         assertNotNull(getter);
230         assertEquals("Found wrong method", "ispremiumBool", getter.getMethodName());
231     }
232 
233 
234     public void testRegularSetters()
235             throws Exception
236     {
237         VelPropertySet setter;
238 
239         Uberspect u = ri.getUberspect();
240         UberspectorTestObject uto = new UberspectorTestObject();
241 
242         // setRegular()
243         setter = u.getPropertySet(uto, "Regular", "", null);
244         assertNotNull(setter);
245         assertEquals("Found wrong method", "setRegular", setter.getMethodName());
246 
247         // Lowercase regular
248         setter = u.getPropertySet(uto, "regular", "", null);
249         assertNotNull(setter);
250         assertEquals("Found wrong method", "setRegular", setter.getMethodName());
251 
252         // lowercase: setpremium()
253         setter = u.getPropertySet(uto, "premium", "", null);
254         assertNotNull(setter);
255         assertEquals("Found wrong method", "setpremium", setter.getMethodName());
256 
257         // test uppercase: getpremium()
258         setter = u.getPropertySet(uto, "Premium", "", null);
259         assertNotNull(setter);
260         assertEquals("Found wrong method", "setpremium", setter.getMethodName());
261     }
262 
263 
264     /*
265      *
266      *    public void testMapGetSet()
267      *        throws Exception
268      *    {
269      *        Uberspect u = ri.getUberspect();
270      *        Map map = new HashMap();
271      *
272      *        VelPropertyGet getter = u.getPropertyGet(map, "", null);
273      *        VelPropertySet setter = u.getPropertySet(map, "", Object.class, null);
274      *
275      *        assertNotNull("Got a null getter", getter);
276      *        assertNotNull("Got a null setter", setter);
277      *
278      *        assertEquals("Got wrong getter", "foo", getter.getMethodName());
279      *        assertEquals("Got wrong setter", "bar", setter.getMethodName());
280      *    }
281      */
282 }
283 
284 
285 
286