aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/glavo/javah/ClassMetaInfoTest.java
diff options
context:
space:
mode:
authorGlavo <zjx001202@126.com>2019-12-06 03:42:00 +0800
committerGlavo <zjx001202@126.com>2019-12-06 03:42:00 +0800
commite48c0668029849af07d1966729c5b703e89b1d00 (patch)
treefec378e2c6e52d86e601f0df45ba13728003fa2b /src/test/java/org/glavo/javah/ClassMetaInfoTest.java
parent6fd5804e3f2c337839efcf5c10426faed1d8b1af (diff)
downloadgjavah-e48c0668029849af07d1966729c5b703e89b1d00.tar.gz
gjavah-e48c0668029849af07d1966729c5b703e89b1d00.tar.bz2
gjavah-e48c0668029849af07d1966729c5b703e89b1d00.zip
update
Diffstat (limited to 'src/test/java/org/glavo/javah/ClassMetaInfoTest.java')
-rw-r--r--src/test/java/org/glavo/javah/ClassMetaInfoTest.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/test/java/org/glavo/javah/ClassMetaInfoTest.java b/src/test/java/org/glavo/javah/ClassMetaInfoTest.java
new file mode 100644
index 0000000..9c1042c
--- /dev/null
+++ b/src/test/java/org/glavo/javah/ClassMetaInfoTest.java
@@ -0,0 +1,54 @@
+package org.glavo.javah;
+
+import org.junit.jupiter.api.Test;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+
+import java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class ClassMetaInfoTest {
+ static class TestData {
+ ClassName name;
+ ClassName superName;
+
+ TestData(ClassName name, ClassName superName) {
+ this.name = name;
+ this.superName = superName;
+ }
+ }
+
+ class C1 {
+ public native int f();
+ }
+
+ @Test
+ void test() throws IOException, ClassNotFoundException {
+ TestData[] data = new TestData[]{
+ new TestData(ClassName.of("java.lang.Object"), null),
+ new TestData(ClassName.of("java.lang.String"), ClassName.of("java.lang.Object")),
+ new TestData(ClassName.of(C1.class.getName()), ClassName.of(C1.class.getSuperclass().getName()))
+ };
+ for (TestData d : data) {
+ Class<?> cls = Class.forName(d.name.className());
+ List<NativeMethod> methods = Arrays.stream(cls.getDeclaredMethods())
+ .filter(m -> (m.getModifiers() & Modifier.NATIVE) != 0)
+ .map(m -> NativeMethod.of(m.getModifiers(), m.getName(), Type.getMethodDescriptor(m)))
+ .collect(Collectors.toList());
+
+ ClassMetaInfo info = new ClassMetaInfo();
+ ClassReader reader = new ClassReader(d.name.className());
+ reader.accept(info, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG);
+
+ assertEquals(info.name, d.name);
+ assertEquals(info.superClassName, d.superName);
+
+ assertTrue(info.methods.containsAll(methods) && methods.containsAll(info.methods));
+ }
+ }
+}