package eu.mikroskeem.utils.test.reflect; import eu.mikroskeem.utils.reflect.Reflect; import eu.mikroskeem.utils.reflect.Validate; import org.junit.Test; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Type; import static eu.mikroskeem.utils.reflect.Validate.ClassDescriptor.newClassDescriptor; import static eu.mikroskeem.utils.reflect.Validate.MethodDescriptor.newMethodDescriptor; import static eu.mikroskeem.utils.reflect.Validate.checkClass; import static eu.mikroskeem.utils.reflect.Validate.checkMethods; import static org.objectweb.asm.Opcodes.*; public class TestValidate { @Test public void testMethodNoArguments() throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES); cw.visit(V1_8, ACC_PUBLIC+ACC_SUPER, "eu/mikroskeem/utils/test/reflect/TestClass1", null, Type.getInternalName(Object.class), null); String desc = String.format("(%s)%s", "", "V"); MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "", desc, null, null); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(Object.class), "", desc, false); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); desc = String.format("(%s)%s", "", Type.getDescriptor(String.class)); mv = cw.visitMethod(ACC_PUBLIC, "toString", desc, null, null); mv.visitLdcInsn("TestClass1 instance"); mv.visitInsn(ARETURN); mv.visitMaxs(0, 0); mv.visitEnd(); cw.visitEnd(); Class clazz = Reflect.defineClass( ClassLoader.getSystemClassLoader(), "eu.mikroskeem.utils.test.reflect.TestClass1", cw.toByteArray()); Validate.ClassDescriptor cd = newClassDescriptor(clazz, Object.class); checkClass(cd); checkMethods(cd, newMethodDescriptor("toString")); } }