diff options
Diffstat (limited to 'test/native/lib')
-rw-r--r-- | test/native/lib/JNILinkTest.java | 103 | ||||
-rw-r--r-- | test/native/lib/MethodTester.c | 110 | ||||
-rw-r--r-- | test/native/lib/MethodTester.h | 61 | ||||
-rw-r--r-- | test/native/lib/PrimlibInterface.c | 162 | ||||
-rw-r--r-- | test/native/lib/PrimlibInterface.h | 141 | ||||
-rw-r--r-- | test/native/lib/PrimlibTest.java | 88 |
6 files changed, 665 insertions, 0 deletions
diff --git a/test/native/lib/JNILinkTest.java b/test/native/lib/JNILinkTest.java new file mode 100644 index 000000000..326c8ea04 --- /dev/null +++ b/test/native/lib/JNILinkTest.java @@ -0,0 +1,103 @@ +public class JNILinkTest { + static { + System.loadLibrary("jnilinktest"); + } + + public static void main(String args[]) { + MethodTester m = new MethodTester(); + Data1 d1 = new Data1(); + Data2 d2 = new Data2(); + int NUM_TESTS=4; + for(int i=0;i<NUM_TESTS;i++) { + try { + if(m.test1(d1,d2)) + System.out.println("SUCCEED: test1"); + else + System.out.println("FAIL: test1"); + } catch(Exception E) { + System.out.println("FAIL: test1 (exception)"); + } + } + for(int i=0;i<NUM_TESTS;i++) { + try { + if(m.test2(d1,d2)) + System.out.println("SUCCEED: test2"); + else + System.out.println("FAIL: test2"); + } catch(Exception E) { + System.out.println("FAIL: test2"); + } + } + for(int i=0;i<NUM_TESTS;i++) { + try { + if(m.test3(d1,d2)) + System.out.println("SUCCEED: test3"); + else + System.out.println("FAIL: test3"); + } catch(Exception E) { + System.out.println("FAIL: test3"); + } + } + for(int i=0;i<NUM_TESTS;i++) { + try { + if(m.test4(d1,d2)) + System.out.println("SUCCEED: test4"); + else + System.out.println("FAIL: test4"); + } catch(Exception E) { + System.out.println("FAIL: test4"); + } + } + for(int i=0;i<NUM_TESTS;i++) { + try { + if(m.test5(d1,d2)) + System.out.println("SUCCEED: test5"); + else + System.out.println("FAIL: test5"); + } catch(Exception E) { + System.out.println("FAIL: test5"); + } + } + for(int i=0;i<NUM_TESTS;i++) { + try { + if(m.test6(d1,d2)) + System.out.println("SUCCEED: test6"); + else + System.out.println("FAIL: test6"); + } catch(Exception E) { + System.out.println("FAIL: test5"); + } + } + } +} + +class MethodTester { + // class test + native boolean test1(Data1 d1, Data2 d2); + // field test + native boolean test2(Data1 d1, Data2 d2); + // static field test + native boolean test3(Data1 d1, Data2 d2); + // method test + native boolean test4(Data1 d1, Data2 d2); + // static method test + native boolean test5(Data1 d1, Data2 d2); + // final method test + native boolean test6(Data1 d1, Data2 d2); +} + +class Data1 { + static boolean staticVar = true; + private boolean instanceVar = true; + static boolean staticMethod() { return true; } + boolean instanceMethod() { return true; } + boolean finalMethod() { return true; } +} + +class Data2 extends Data1 { + static boolean staticVar = false; + private boolean instanceVar = false; + static boolean staticMethod() { return false; } + boolean instanceMethod() { return false; } + boolean finalMethod() { return false; } +} diff --git a/test/native/lib/MethodTester.c b/test/native/lib/MethodTester.c new file mode 100644 index 000000000..24f59bd11 --- /dev/null +++ b/test/native/lib/MethodTester.c @@ -0,0 +1,110 @@ +#include "MethodTester.h" +#include <jnilink.h> +#include <jcl.h> + +static linkPtr t1_1=NULL; +static linkPtr t1_2=NULL; +static linkPtr t2=NULL; +static linkPtr t3=NULL; +static linkPtr t4=NULL; +static linkPtr t5=NULL; +static linkPtr t6=NULL; + +/* + * Class: MethodTester + * Method: test1 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test1 +(JNIEnv * env, jobject thisObj, jobject d1, jobject d2) { + if(LINK_LinkClass(env,&t1_1,"Data1") == NULL || LINK_LinkClass(env,&t1_2,"Data2") == NULL) + return JNI_FALSE; + if(!(*env)->IsAssignableFrom(env, LINK_ResolveClass(env,t1_1), LINK_ResolveClass(env,t1_2)) + && (*env)->IsAssignableFrom(env, LINK_ResolveClass(env,t1_2), LINK_ResolveClass(env,t1_1))) { + return JNI_TRUE; + } else { + return JNI_FALSE; + } +} + +/* + * Class: MethodTester + * Method: test2 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test2 +(JNIEnv * env, jobject thisObj, jobject d1, jobject d2) { + jclass c1 = (*env)->GetObjectClass(env,d1); + jclass c2 = (*env)->GetObjectClass(env,d2); + if(LINK_LinkField(env,&t2,c1,"instanceVar","Z") == NULL) + return JNI_FALSE; + return (*env)->GetBooleanField(env,d1,LINK_ResolveField(env,t2)) + && (*env)->GetBooleanField(env,d2,LINK_ResolveField(env,t2)); +} + +/* + * Class: MethodTester + * Method: test3 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test3 + (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) { + jclass c1 = (*env)->GetObjectClass(env,d1); + jclass c2 = (*env)->GetObjectClass(env,d2); + if(LINK_LinkStaticField(env,&t3,c1,"staticVar","Z") == NULL) + return JNI_FALSE; + return (*env)->GetStaticBooleanField(env,d1,LINK_ResolveStaticField(env,t3)) + && (*env)->GetStaticBooleanField(env,d2,LINK_ResolveStaticField(env,t3)); +} + +/* + * Class: MethodTester + * Method: test4 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test4 + (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) { + jclass c1 = (*env)->GetObjectClass(env,d1); + jclass c2 = (*env)->GetObjectClass(env,d2); + jmethodID m1; + jmethodID m2; + if(LINK_LinkMethod(env,&t4,c1,"instanceMethod","()Z") == NULL) + return JNI_FALSE; + m1 = LINK_ResolveMethod(env,t4); + m2 = LINK_ResolveMethod(env,t4); + return (*env)->CallBooleanMethod(env,d1,m1) + && !(*env)->CallBooleanMethod(env,d2,m2); +} + + +/* + * Class: MethodTester + * Method: test5 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test5 + (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) { + jclass c1 = (*env)->GetObjectClass(env,d1); + jclass c2 = (*env)->GetObjectClass(env,d2); + if(LINK_LinkStaticMethod(env,&t5,c1,"staticMethod","()Z") == NULL) + return JNI_FALSE; + return (*env)->CallStaticBooleanMethod(env,c1,LINK_ResolveStaticMethod(env,t5)) + && (*env)->CallStaticBooleanMethod(env,c2,LINK_ResolveStaticMethod(env,t5)); +} + + +/* + * Class: MethodTester + * Method: test6 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test6 + (JNIEnv * env, jobject thisObj, jobject d1, jobject d2) { + jclass c1 = (*env)->GetObjectClass(env,d1); + jclass c2 = (*env)->GetObjectClass(env,d2); + if(LINK_LinkMethod(env,&t6,c1,"finalMethod","()Z") == NULL) + return JNI_FALSE; + return (*env)->CallBooleanMethod(env,d1,LINK_ResolveMethod(env,t6)) + && !(*env)->CallBooleanMethod(env,d2,LINK_ResolveMethod(env,t6)); +} + diff --git a/test/native/lib/MethodTester.h b/test/native/lib/MethodTester.h new file mode 100644 index 000000000..896fc05c7 --- /dev/null +++ b/test/native/lib/MethodTester.h @@ -0,0 +1,61 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class MethodTester */ + +#ifndef _Included_MethodTester +#define _Included_MethodTester +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: MethodTester + * Method: test1 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test1 + (JNIEnv *, jobject, jobject, jobject); + +/* + * Class: MethodTester + * Method: test2 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test2 + (JNIEnv *, jobject, jobject, jobject); + +/* + * Class: MethodTester + * Method: test3 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test3 + (JNIEnv *, jobject, jobject, jobject); + +/* + * Class: MethodTester + * Method: test4 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test4 + (JNIEnv *, jobject, jobject, jobject); + +/* + * Class: MethodTester + * Method: test5 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test5 + (JNIEnv *, jobject, jobject, jobject); + +/* + * Class: MethodTester + * Method: test6 + * Signature: (LData1;LData2;)Z + */ +JNIEXPORT jboolean JNICALL Java_MethodTester_test6 + (JNIEnv *, jobject, jobject, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/test/native/lib/PrimlibInterface.c b/test/native/lib/PrimlibInterface.c new file mode 100644 index 000000000..47918470a --- /dev/null +++ b/test/native/lib/PrimlibInterface.c @@ -0,0 +1,162 @@ +#include "PrimlibInterface.h" +#include <primlib.h> + +/* + * Class: PrimlibInterface + * Method: unwrapBoolean + * Signature: (Ljava/lang/Object;)Z + */ +JNIEXPORT jboolean JNICALL Java_PrimlibInterface_unwrapBoolean +(JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapBoolean(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapByte + * Signature: (Ljava/lang/Object;)B + */ +JNIEXPORT jbyte JNICALL Java_PrimlibInterface_unwrapByte + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapByte(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapShort + * Signature: (Ljava/lang/Object;)S + */ +JNIEXPORT jshort JNICALL Java_PrimlibInterface_unwrapShort + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapShort(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapChar + * Signature: (Ljava/lang/Object;)C + */ +JNIEXPORT jchar JNICALL Java_PrimlibInterface_unwrapChar + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapChar(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapInt + * Signature: (Ljava/lang/Object;)I + */ +JNIEXPORT jint JNICALL Java_PrimlibInterface_unwrapInt + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapInt(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapLong + * Signature: (Ljava/lang/Object;)J + */ +JNIEXPORT jlong JNICALL Java_PrimlibInterface_unwrapLong + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapLong(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapFloat + * Signature: (Ljava/lang/Object;)F + */ +JNIEXPORT jfloat JNICALL Java_PrimlibInterface_unwrapFloat + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapFloat(env, o); +} + +/* + * Class: PrimlibInterface + * Method: unwrapDouble + * Signature: (Ljava/lang/Object;)D + */ +JNIEXPORT jdouble JNICALL Java_PrimlibInterface_unwrapDouble + (JNIEnv * env, jclass thisClass, jobject o) { + return PRIMLIB_UnwrapDouble(env, o); +} + +/* + * Class: PrimlibInterface + * Method: wrapBoolean + * Signature: (Z)Ljava/lang/Boolean; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapBoolean +(JNIEnv * env, jclass thisClass, jboolean val) { + return PRIMLIB_WrapBoolean(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapByte + * Signature: (B)Ljava/lang/Byte; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapByte +(JNIEnv * env, jclass thisClass, jbyte val) { + return PRIMLIB_WrapByte(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapShort + * Signature: (S)Ljava/lang/Short; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapShort +(JNIEnv * env, jclass thisClass, jshort val) { + return PRIMLIB_WrapShort(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapChar + * Signature: (C)Ljava/lang/Character; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapChar +(JNIEnv * env, jclass thisClass, jchar val) { + return PRIMLIB_WrapChar(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapInt + * Signature: (I)Ljava/lang/Integer; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapInt +(JNIEnv * env, jclass thisClass, jint val) { + return PRIMLIB_WrapInt(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapLong + * Signature: (J)Ljava/lang/Long; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapLong +(JNIEnv * env, jclass thisClass, jlong val) { + return PRIMLIB_WrapLong(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapFloat + * Signature: (F)Ljava/lang/Float; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapFloat +(JNIEnv * env, jclass thisClass, jfloat val) { + return PRIMLIB_WrapFloat(env, val); +} + +/* + * Class: PrimlibInterface + * Method: wrapDouble + * Signature: (D)Ljava/lang/Double; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapDouble +(JNIEnv * env, jclass thisClass, jdouble val) { + return PRIMLIB_WrapDouble(env, val); +} diff --git a/test/native/lib/PrimlibInterface.h b/test/native/lib/PrimlibInterface.h new file mode 100644 index 000000000..2e0463cc2 --- /dev/null +++ b/test/native/lib/PrimlibInterface.h @@ -0,0 +1,141 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class PrimlibInterface */ + +#ifndef _Included_PrimlibInterface +#define _Included_PrimlibInterface +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: PrimlibInterface + * Method: unwrapBoolean + * Signature: (Ljava/lang/Object;)Z + */ +JNIEXPORT jboolean JNICALL Java_PrimlibInterface_unwrapBoolean + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapByte + * Signature: (Ljava/lang/Object;)B + */ +JNIEXPORT jbyte JNICALL Java_PrimlibInterface_unwrapByte + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapShort + * Signature: (Ljava/lang/Object;)S + */ +JNIEXPORT jshort JNICALL Java_PrimlibInterface_unwrapShort + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapChar + * Signature: (Ljava/lang/Object;)C + */ +JNIEXPORT jchar JNICALL Java_PrimlibInterface_unwrapChar + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapInt + * Signature: (Ljava/lang/Object;)I + */ +JNIEXPORT jint JNICALL Java_PrimlibInterface_unwrapInt + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapLong + * Signature: (Ljava/lang/Object;)J + */ +JNIEXPORT jlong JNICALL Java_PrimlibInterface_unwrapLong + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapFloat + * Signature: (Ljava/lang/Object;)F + */ +JNIEXPORT jfloat JNICALL Java_PrimlibInterface_unwrapFloat + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: unwrapDouble + * Signature: (Ljava/lang/Object;)D + */ +JNIEXPORT jdouble JNICALL Java_PrimlibInterface_unwrapDouble + (JNIEnv *, jclass, jobject); + +/* + * Class: PrimlibInterface + * Method: wrapBoolean + * Signature: (Z)Ljava/lang/Boolean; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapBoolean + (JNIEnv *, jclass, jboolean); + +/* + * Class: PrimlibInterface + * Method: wrapByte + * Signature: (B)Ljava/lang/Byte; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapByte + (JNIEnv *, jclass, jbyte); + +/* + * Class: PrimlibInterface + * Method: wrapShort + * Signature: (S)Ljava/lang/Short; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapShort + (JNIEnv *, jclass, jshort); + +/* + * Class: PrimlibInterface + * Method: wrapChar + * Signature: (C)Ljava/lang/Character; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapChar + (JNIEnv *, jclass, jchar); + +/* + * Class: PrimlibInterface + * Method: wrapInt + * Signature: (I)Ljava/lang/Integer; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapInt + (JNIEnv *, jclass, jint); + +/* + * Class: PrimlibInterface + * Method: wrapLong + * Signature: (J)Ljava/lang/Long; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapLong + (JNIEnv *, jclass, jlong); + +/* + * Class: PrimlibInterface + * Method: wrapFloat + * Signature: (F)Ljava/lang/Float; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapFloat + (JNIEnv *, jclass, jfloat); + +/* + * Class: PrimlibInterface + * Method: wrapDouble + * Signature: (D)Ljava/lang/Double; + */ +JNIEXPORT jobject JNICALL Java_PrimlibInterface_wrapDouble + (JNIEnv *, jclass, jdouble); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/test/native/lib/PrimlibTest.java b/test/native/lib/PrimlibTest.java new file mode 100644 index 000000000..94b2fb41c --- /dev/null +++ b/test/native/lib/PrimlibTest.java @@ -0,0 +1,88 @@ +public class PrimlibTest { + static { + System.loadLibrary("jnilinktest"); + } + + public static void main(String args[]) { + Object[] o = new Object[8]; + o[0] = new Boolean(true); + o[1] = new Byte((byte)1); + o[2] = new Short((short)2); + o[3] = new Character((char)3); + o[4] = new Integer(4); + o[5] = new Long(5L); + o[6] = new Float(6F); + o[7] = new Double(7D); + + String[] s = {"boolean", "byte", "short", "char", "int", "long", "float", "double"}; + for(int i=0;i<8;i++) { + try { + System.out.println(PrimlibInterface.unwrapBoolean(o[i]) ? "CONVERTED: UnwrapBoolean(" + s[i] + ")" : "INCORRECT: UnwrapBoolean(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapBoolean(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapByte(o[i]) == i ? "CONVERTED: UnwrapByte(" + s[i] + ")" : "INCORRECT: UnwrapByte(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapByte(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapShort(o[i]) == i ? "CONVERTED: UnwrapShort(" + s[i] + ")" : "INCORRECT: UnwrapShort(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapShort(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapChar(o[i]) == i ? "CONVERTED: UnwrapChar(" + s[i] + ")" : "INCORRECT: UnwrapChar(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapChar(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapInt(o[i]) == i ? "CONVERTED: UnwrapInt(" + s[i] + ")" : "INCORRECT: UnwrapInt(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapInt(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapLong(o[i]) == i ? "CONVERTED: UnwrapLong(" + s[i] + ")" : "INCORRECT: UnwrapLong(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapLong(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapFloat(o[i]) == i ? "CONVERTED: UnwrapFloat(" + s[i] + ")" : "INCORRECT: UnwrapFloat(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapFloat(" + s[i] + ")"); + } + + try { + System.out.println(PrimlibInterface.unwrapDouble(o[i]) == i ? "CONVERTED: UnwrapDouble(" + s[i] + ")" : "INCORRECT: UnwrapDouble(" + s[i] + ")"); + } catch(Exception E) { + System.out.println("EXCEPTION: UnwrapDouble(" + s[i] + ")"); + } + } + } +} + +class PrimlibInterface { + static native boolean unwrapBoolean(Object o); + static native byte unwrapByte(Object o); + static native short unwrapShort(Object o); + static native char unwrapChar(Object o); + static native int unwrapInt(Object o); + static native long unwrapLong(Object o); + static native float unwrapFloat(Object o); + static native double unwrapDouble(Object o); + + static native Boolean wrapBoolean(boolean val); + static native Byte wrapByte(byte val); + static native Short wrapShort(short val); + static native Character wrapChar(char val); + static native Integer wrapInt(int val); + static native Long wrapLong(long val); + static native Float wrapFloat(float val); + static native Double wrapDouble(double val); +} |