46 lines
1.9 KiB
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"));
|
|
}
|
|
}
|