1 21 package com.db4o.test.reflect; 22 23 import com.db4o.reflect.*; 24 import com.db4o.reflect.generic.*; 25 import com.db4o.reflect.jdk.*; 26 27 41 public class Reflection extends Test { 42 43 private final Reflector _reflector; 44 private final ReflectClass _classReflector; 45 46 public Reflection() throws ClassNotFoundException { 47 this(new GenericReflector(null, new JdkReflector(Thread.currentThread().getContextClassLoader()))); 48 } 49 50 public Reflection(Reflector reflector) { 51 _reflector = reflector; 52 _classReflector = _reflector.forName(TestReflectClass.class.getName()); 53 } 54 55 public void testIClass() throws ClassNotFoundException { 56 ReflectField[] fields = _classReflector.getDeclaredFields(); 57 _assert( 58 fields.length == TestReflectClass.FIELD_COUNT, "getDeclaredFields method failed."); 59 for (int i = 0; i < fields.length; i++) { 60 _assert(fields != null, "getDeclaredFields[" + i + "] is valid"); 61 String fieldName = fields[i].getName(); 62 ReflectField fieldReflector = _classReflector.getDeclaredField(fieldName); 63 _assert( 64 fieldReflector != null, 65 "getDeclaredField('" + fieldName + "') is valid"); 66 } 67 68 tstIField(); 69 70 ReflectClass abstractReflector = 71 _reflector.forName(TestReflectAbstractClass.class.getName()); 72 _assert(abstractReflector.isAbstract(), "isAbstract"); 73 ReflectClass interfaceReflector = 74 _reflector.forName(TestReflectInterface.class.getName()); 75 _assert(interfaceReflector.isInterface(), "isInterface"); 76 Object instance = _classReflector.newInstance(); 77 _assert(instance != null, "newInstance"); 78 79 } 80 81 private void tstIField() { 82 tstIField1("myString", "HiBabe", String .class); 83 tstIField1("myInt", new Integer (10), int.class); 84 tstIField1("myTyped", new TestReflectClass(), TestReflectClass.class); 85 tstIField1("myUntyped", "Foooo", Object .class); 86 tstIField1("myUntyped", new TestReflectClass(), Object .class); 87 _assert( 88 _classReflector.getDeclaredField("myStatic").isStatic(), 89 "IField.isStatic()"); 90 _assert( 91 _classReflector.getDeclaredField("myTransient").isTransient(), 92 "IField.isTransient()"); 93 } 94 95 private void tstIField1(String fieldName, Object obj, Class clazz) { 96 ReflectClass claxx = _reflector.forClass(clazz); 97 String fieldMessage = 98 TestReflectClass.class.getName() + ":" + fieldName; 99 TestReflectClass onObject = new TestReflectClass(); 100 ReflectField fieldReflector = _classReflector.getDeclaredField(fieldName); 101 fieldReflector.set(onObject, obj); 102 Object got = fieldReflector.get(onObject); 103 _assert(got != null, fieldMessage + " IField.get returns NULL"); 104 _assert( 105 obj.equals(got), 106 fieldMessage + " IField.get returns strange Object"); 107 _assert( 108 fieldReflector.getName().equals(fieldName), 109 "IField.getName()"); 110 _assert(fieldReflector.isPublic(), "IField.isPublic()"); 111 _assert(!fieldReflector.isStatic(), "IField.isStatic()"); 112 _assert(!fieldReflector.isTransient(), "IField.isTransient()"); 113 _assert(fieldReflector.getFieldType().equals(claxx), "IField.getType()"); 114 } 115 116 public void testIArray() { 117 tstIArray1(new Object [] {"", "hi", "Cool"}); 118 tstIArray1(new Object [] {new Object (), new TestReflectClass(), "Woooa", new Integer (3)}); 119 tstIArray1(new Object [] {new TestReflectClass(),new TestReflectClass()}); 120 tstIArray2(new int[] {1,2,3}); 121 tstIArray2(new long[] {1L,2L,3L}); 122 } 123 124 public void tstEverything() throws ClassNotFoundException { 125 testIClass(); 126 testIArray(); 127 } 128 129 private void tstIArray1(Object [] elements){ 130 ReflectArray array = _reflector.array(); 131 ReflectClass clazz = _reflector.forObject(elements[0]); 132 Object obj = array.newInstance(clazz,0); 133 _assert(obj != null, "Creation of zero length array"); 134 _assert(array.getLength(obj) == 0, "Zero length array length"); 135 obj = array.newInstance(clazz, elements.length); 136 _assert(obj != null, "Creation of variable length array"); 137 _assert(array.getLength(obj) == elements.length, "Variable length array length"); 138 for (int i = 0; i < elements.length; i++) { 139 array.set(obj, i, elements[i]); 140 } 141 for (int i = 0; i < elements.length; i++) { 142 _assert(elements[i].equals(array.get(obj, i)), "Array element comparison"); 143 } 144 } 145 146 private void tstIArray2(Object arr){ 147 ReflectArray array = _reflector.array(); 148 Object element = array.get(arr, 0); 149 ReflectClass clazz = _reflector.forObject(element); 150 Object obj = array.newInstance(clazz,0); 151 _assert(obj != null, "Creation of zero length array"); 152 _assert(array.getLength(obj) == 0, "Zero length array length"); 153 int length = array.getLength(arr); 154 obj = array.newInstance(clazz, length); 155 _assert(obj != null, "Creation of variable length array"); 156 _assert(array.getLength(obj) == length, "Variable length array length"); 157 for (int i = 0; i < length; i++) { 158 array.set(obj, i, array.get(arr,i)); 159 } 160 for (int i = 0; i < length; i++) { 161 _assert(array.get(arr,i).equals(array.get(obj, i)), "Array element comparison"); 162 } 163 } 164 } 165 | Popular Tags |