1   package org.apache.velocity.test.misc;
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 org.apache.velocity.util.introspection.Info;
23  import org.apache.velocity.util.introspection.UberspectImpl;
24  import org.apache.velocity.util.introspection.VelMethod;
25  import org.apache.velocity.util.introspection.VelPropertyGet;
26  
27  
28  /**
29   * A introspector that allows testing when methods are not found.
30   */
31  public class UberspectTestImpl extends UberspectImpl
32  {
33  
34      public VelMethod getMethod(Object obj, String methodName, Object[] args, Info i)
35          throws Exception
36      {
37          VelMethod method = super.getMethod(obj, methodName, args, i);
38  
39          if (method == null)
40          {
41              if (obj == null)
42                  throw new UberspectTestException("Can't call method '" + methodName + "' on null object",i);
43              else
44                  throw new UberspectTestException("Did not find method "+ obj.getClass().getName()+"."+methodName, i);
45          }
46  
47          return method;
48      }
49  
50      public VelPropertyGet getPropertyGet(Object obj, String identifier, Info i)
51          throws Exception
52      {
53          VelPropertyGet propertyGet = super.getPropertyGet(obj, identifier, i);
54  
55          if (propertyGet == null)
56          {
57              if (obj == null)
58                  throw new UberspectTestException("Can't call getter '" + identifier + "' on null object",i);
59              else
60                  throw new UberspectTestException("Did not find "+ obj.getClass().getName()+"."+identifier, i);
61          }
62  
63          return propertyGet;
64      }
65  
66  }