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) throws Exception
35      {
36          VelMethod method = super.getMethod(obj, methodName, args, i);
37  
38          if (method == null)
39          {
40              if (obj == null)
41                  throw new UberspectTestException("Can't call method '" + methodName + "' on null object",i);
42              else
43                  throw new UberspectTestException("Did not find method "+ obj.getClass().getName()+"."+methodName, i);
44          }
45  
46          return method;
47      }
48  
49      public VelPropertyGet getPropertyGet(Object obj, String identifier, Info i) throws Exception
50      {
51          VelPropertyGet propertyGet = super.getPropertyGet(obj, identifier, i);
52  
53          if (propertyGet == null)
54          {
55              if (obj == null)
56                  throw new UberspectTestException("Can't call getter '" + identifier + "' on null object",i);
57              else
58                  throw new UberspectTestException("Did not find "+ obj.getClass().getName()+"."+identifier, i);
59          }
60  
61          return propertyGet;
62      }
63  
64  }