Utils/Reflect/src/test/java/eu/mikroskeem/utils/test/reflect/TestValidate.java

46 lines
1.9 KiB
Java

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, "<init>", desc, null, null);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(Object.class), "<init>", 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"));
}
}