blob: 9c1042c38bde034c6956365d30011cb5104b2451 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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));
}
}
}
|