1 /*
2 This project provide access to non public fields
3 and methods as help for writing tests.
4 Copyright (C) 2007 Christof Lehmann
5
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20 package net.sf.testextensions;
21
22 /**
23 * The <code>AccessibleObjectContainer</code> declares a usefull
24 * method, which would be used by subclasses.
25 * @author forge-cl
26 *
27 */
28 class AccessibleObjectContainer {
29
30 /**
31 * The field <code>parameterClasses</code> remember the types
32 * of the callable method or constructor.
33 */
34 private Class < ? > [] parameterClasses;
35
36 /**
37 * The constructor initialize the field argumentClasses.
38 * @param theParameterClasses the types of the method invocation
39 */
40 protected AccessibleObjectContainer(
41 final Class < ? > [] theParameterClasses) {
42 parameterClasses = theParameterClasses;
43 }
44
45 /**
46 * The method <code>suitesToArgs</code> check, if the types
47 * of the arguments for a method call suites to the accepted
48 * types.
49 * @param args the arguments for the method call
50 * @return true if the arguments suites to the method declaration
51 */
52 public boolean suitesToArgs(final Object[] args) {
53 boolean flag = parameterClasses != null
54 &&
55 parameterClasses .length == args .length;
56 for (int i = 0; i < parameterClasses.length && flag; i++) {
57 Object curParameter = args[i];
58 Class curParamClass = parameterClasses[i];
59 flag = isInstanceOf(curParameter, curParamClass);
60 }
61 return flag;
62 }
63
64 /**
65 * The method <code>isInstanceOf</code> checks, if a object is an instance
66 * of a class. Its also works with primitive.
67 *
68 * @param aObject
69 * the object, which should be an instanceOf
70 * @param aClass
71 * the object should be an instance of this class.
72 * @return true wenn aClass.isInstance(aObject) or its aquivalent
73 *
74 */
75 private boolean isInstanceOf(final Object aObject, final Class aClass) {
76 return aClass.isInstance(aObject)
77 || (getAequivalent(aClass).isInstance(aObject));
78 }
79
80 /**
81 * The method <code>getQequivalent</code> returns the non primitive
82 * representation of a primitive.
83 *
84 * @param aClass
85 * a primitive Class
86 * @return the non primitive or the same class
87 */
88 private Class getAequivalent(final Class aClass) {
89 if (aClass.isPrimitive()) {
90 String theName = aClass.getName();
91 if (theName.equals("int")) {
92 return Integer.class;
93 } else if (theName.equals("double")) {
94 return Double.class;
95 } else if (theName.equals("short")) {
96 return Short.class;
97 } else if (theName.equals("char")) {
98 return Character.class;
99 } else if (theName.equals("long")) {
100 return Long.class;
101 } else if (theName.equals("boolean")) {
102 return Boolean.class;
103 } else if (theName.equals("byte")) {
104 return Byte.class;
105 } else {
106 return aClass;
107 }
108 } else {
109 return aClass;
110 }
111 }
112
113
114 }