1 22 package org.jboss.test.aop.methodhashing; 23 24 import java.lang.reflect.Method ; 25 import java.util.Iterator ; 26 import java.util.Map ; 27 28 import javassist.CtClass; 29 import javassist.CtMethod; 30 import junit.framework.TestCase; 31 32 import org.jboss.aop.util.ClassInfoMethodHashing; 33 import org.jboss.aop.util.JavassistMethodHashing; 34 import org.jboss.aop.util.MethodHashing; 35 import org.jboss.aop.util.ReflectToJavassist; 36 import org.jboss.reflect.plugins.introspection.IntrospectionTypeInfoFactory; 37 import org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactory; 38 import org.jboss.reflect.spi.ClassInfo; 39 import org.jboss.reflect.spi.MethodInfo; 40 41 49 public class MethodHashingTestCase extends TestCase 50 { 51 52 public MethodHashingTestCase(String arg0) 53 { 54 super(arg0); 56 } 57 58 public void testDeclaredMethodHashing() throws Exception 59 { 60 Class clazz = SubClass.class; 61 CtClass ctclass = getCtClass(clazz); 62 ClassInfo classInfoReflect = getIntrospectTypeInfo(clazz); 63 ClassInfo classInfoJavassist = getJavassistTypeInfo(clazz); 64 65 Map reflectInfoMethods = ClassInfoMethodHashing.getDeclaredMethodMap(classInfoReflect); 66 Map javassistInfoMethods = ClassInfoMethodHashing.getDeclaredMethodMap(classInfoJavassist); 67 Map javassistMethods = JavassistMethodHashing.getDeclaredMethodMap(ctclass); 68 69 compareMaps(reflectInfoMethods, javassistInfoMethods, 1); 70 compareMaps(reflectInfoMethods, javassistMethods, 1); 71 72 for (Iterator it = reflectInfoMethods.keySet().iterator() ; it.hasNext() ; ) 73 { 74 Long hash = (Long )it.next(); 75 CtMethod ctmethod = (CtMethod)javassistMethods.get(hash); 76 MethodInfo methodInfo = (MethodInfo)reflectInfoMethods.get(hash); 77 compareMethods(methodInfo, ctmethod); 78 79 MethodInfo methodInfo2 = (MethodInfo)javassistInfoMethods.get(hash); 80 compareMethods(methodInfo, methodInfo2); 81 82 Method method = MethodHashing.findMethodByHash(clazz, hash.longValue()); 83 assertNotNull(method); 84 compareMethods(methodInfo, method); 85 86 Method methodB = org.jboss.util.MethodHashing.findMethodByHash(clazz, hash.longValue()); 87 assertNotNull(methodB); 88 compareMethods(methodInfo, methodB); 89 } 90 } 91 92 public void testMethodHashing() throws Exception 93 { 94 Class clazz = SubClass.class; 95 CtClass ctclass = getCtClass(clazz); 96 ClassInfo classInfoReflect = getIntrospectTypeInfo(clazz); 97 ClassInfo classInfoJavassist = getJavassistTypeInfo(clazz); 98 99 Map reflectInfoMethods = ClassInfoMethodHashing.getMethodMap(classInfoReflect); 100 Map javassistInfoMethods = ClassInfoMethodHashing.getMethodMap(classInfoJavassist); 101 Map javassistMethods = JavassistMethodHashing.getMethodMap(ctclass); 102 103 compareMaps(reflectInfoMethods, javassistInfoMethods, 2); 104 compareMaps(reflectInfoMethods, javassistMethods, 2); 105 106 for (Iterator it = reflectInfoMethods.keySet().iterator() ; it.hasNext() ; ) 107 { 108 Long hash = (Long )it.next(); 109 CtMethod ctmethod = (CtMethod)javassistMethods.get(hash); 110 MethodInfo methodInfo = (MethodInfo)reflectInfoMethods.get(hash); 111 compareMethods(methodInfo, ctmethod); 112 113 MethodInfo methodInfo2 = (MethodInfo)javassistInfoMethods.get(hash); 114 compareMethods(methodInfo, methodInfo2); 115 116 Method method = MethodHashing.findMethodByHash(clazz, hash.longValue()); 117 assertNotNull(method); 118 compareMethods(methodInfo, method); 119 120 Method methodB = org.jboss.util.MethodHashing.findMethodByHash(clazz, hash.longValue()); 121 assertNotNull(methodB); 122 compareMethods(methodInfo, methodB); 123 } 124 } 125 126 private CtClass getCtClass(Class clazz) throws Exception 127 { 128 return ReflectToJavassist.classToJavassist(clazz); 129 } 130 131 private ClassInfo getIntrospectTypeInfo(Class clazz) 132 { 133 IntrospectionTypeInfoFactory typeInfoFactory = new IntrospectionTypeInfoFactory(); 134 ClassInfo classInfo = (ClassInfo)typeInfoFactory.getTypeInfo(clazz); 135 return classInfo; 136 } 137 138 private ClassInfo getJavassistTypeInfo(Class clazz) 139 { 140 JavassistTypeInfoFactory typeInfoFactory = new JavassistTypeInfoFactory(); 141 ClassInfo classInfo = (ClassInfo)typeInfoFactory.getTypeInfo(clazz); 142 return classInfo; 143 } 144 145 private void compareMaps(Map mapA, Map mapB, int expecedSize) 146 { 147 assertEquals(expecedSize, mapA.size()); 148 assertEquals(expecedSize, mapB.size()); 149 150 for (Iterator it = mapA.keySet().iterator() ; it.hasNext() ; ) 151 { 152 Long l = (Long )it.next(); 153 assertNotNull(mapB.get(l)); 154 } 155 } 156 157 private void compareMethods(MethodInfo methodInfo, CtMethod method) throws Exception 158 { 159 System.out.println("-----> method " + method); 160 assertEquals(methodInfo.getName(), method.getName()); 161 assertEquals(methodInfo.getDeclaringClass().getName(), method.getDeclaringClass().getName()); 162 assertEquals(methodInfo.getReturnType().getName(), method.getReturnType().getName()); 163 assertEquals(methodInfo.getModifiers(), method.getModifiers()); 164 assertEquals(methodInfo.getParameterTypes().length, method.getParameterTypes().length); 165 } 166 167 private void compareMethods(MethodInfo methodInfo, MethodInfo method) throws Exception 168 { 169 System.out.println("-----> method " + method); 170 assertEquals(methodInfo.getName(), method.getName()); 171 assertEquals(methodInfo.getDeclaringClass().getName(), method.getDeclaringClass().getName()); 172 assertEquals(methodInfo.getReturnType().getName(), method.getReturnType().getName()); 173 assertEquals(methodInfo.getModifiers(), method.getModifiers()); 174 assertEquals(methodInfo.getParameterTypes().length, method.getParameterTypes().length); 175 } 176 177 private void compareMethods(MethodInfo methodInfo, Method method) throws Exception 178 { 179 System.out.println("-----> method " + method); 180 assertEquals(methodInfo.getName(), method.getName()); 181 assertEquals(methodInfo.getDeclaringClass().getName(), method.getDeclaringClass().getName()); 182 assertEquals(methodInfo.getReturnType().getName(), method.getReturnType().getName()); 183 assertEquals(methodInfo.getModifiers(), method.getModifiers()); 184 assertEquals(methodInfo.getParameterTypes().length, method.getParameterTypes().length); 185 } 186 187 } 188 | Popular Tags |