diff --git a/Reflect/pom.xml b/Reflect/pom.xml
index ff10131..faff0f6 100644
--- a/Reflect/pom.xml
+++ b/Reflect/pom.xml
@@ -23,5 +23,11 @@
4.12
test
+
+ org.ow2.asm
+ asm-all
+ 5.1
+ test
+
\ No newline at end of file
diff --git a/Reflect/src/test/java/eu/mikroskeem/utils/test/reflect/TestReflect.java b/Reflect/src/test/java/eu/mikroskeem/utils/test/reflect/TestReflect.java
index 3eba74a..8fc327a 100644
--- a/Reflect/src/test/java/eu/mikroskeem/utils/test/reflect/TestReflect.java
+++ b/Reflect/src/test/java/eu/mikroskeem/utils/test/reflect/TestReflect.java
@@ -3,10 +3,17 @@ package eu.mikroskeem.utils.test.reflect;
import eu.mikroskeem.utils.reflect.Reflect;
import org.junit.Assert;
import org.junit.Test;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Type;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import static org.objectweb.asm.Opcodes.*;
+import static org.objectweb.asm.Opcodes.RETURN;
+
public class TestReflect {
@Test
public void testGetClass(){
@@ -75,4 +82,34 @@ public class TestReflect {
Reflect.simpleWriteField(testClass, "FOOBAR", "yeah");
Assert.assertEquals("yeah", Reflect.simpleReadField(testClass, "FOOBAR"));
}
+
+ @Test
+ public void testClassLoading(){
+ String className = "eu.mikroskeem.utils.test.reflect.GeneratedTestClass";
+ String classNameInternal = className.replaceAll("\\.", "/");
+
+ ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES);
+ cw.visit(
+ V1_8,
+ ACC_PUBLIC + ACC_SUPER,
+ classNameInternal,
+ null,
+ Type.getInternalName(Object.class),
+ null);
+ FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "test", Type.getDescriptor(String.class), null, "hey");
+ fv.visitEnd();
+ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null);
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(Object.class), "", "()V", false);
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(0, 0);
+ mv.visitEnd();
+ cw.visitEnd();
+
+ Class> generated = Reflect.defineClass(ClassLoader.getSystemClassLoader(), className, cw.toByteArray());
+ Field testField = Reflect.getField(generated, "test");
+ String testFieldContent = (String) Reflect.readField(testField, null);
+ Assert.assertTrue(Reflect.classExists(className));
+ Assert.assertEquals("hey", testFieldContent);
+ }
}