X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=tests%2Fregression%2Fnative%2Fcheckjni.c;h=5d7eca6246a7aadfd587534a72129e49462d53c0;hb=79c1f3f6d7847231db61bcdff0ca81872fa80556;hp=f765ebabce5411ddc811dd863df11f44643d9ee4;hpb=b6fbb1958c8971b06e87ea3c37be0deaff131768;p=cacao.git diff --git a/tests/regression/native/checkjni.c b/tests/regression/native/checkjni.c index f765ebabc..5d7eca624 100644 --- a/tests/regression/native/checkjni.c +++ b/tests/regression/native/checkjni.c @@ -1,9 +1,7 @@ /* src/tests/native/checkjni.c - for testing JNI stuff - Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel, - C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, - E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, - TU Wien + Copyright (C) 1996-2005, 2006, 2008 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -22,19 +20,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - Contact: cacao@cacaojvm.org - - Authors: Christian Thalinger - - Changes: - */ +#include "config.h" + #include +#include -#include "config.h" -#include "native/jni.h" +#include INCLUDE_JNI_MD_H +#include INCLUDE_JNI_H JNIEXPORT jboolean JNICALL Java_checkjni_IsAssignableFrom(JNIEnv *env, jclass clazz, jclass sub, jclass sup) @@ -47,7 +42,80 @@ JNIEXPORT jboolean JNICALL Java_checkjni_IsInstanceOf(JNIEnv *env, jclass clazz, return (*env)->IsInstanceOf(env, obj, c); } +JNIEXPORT jboolean JNICALL Java_checkjni_IsSameObject(JNIEnv *env, jclass clazz, jobject obj1, jobject obj2) +{ + return (*env)->IsSameObject(env, obj1, obj2); +} + JNIEXPORT jint JNICALL Java_checkjni_PushLocalFrame(JNIEnv *env, jclass clazz, jint capacity) { return (*env)->PushLocalFrame(env, capacity); } + +JNIEXPORT void JNICALL Java_checkjni_Throw(JNIEnv *env, jclass clazz) +{ + jclass c = (*env)->FindClass(env, "java/lang/Exception"); + (*env)->ThrowNew(env, c, "Exception from JNI"); +} + +JNIEXPORT jclass JNICALL Java_checkjni_GetObjectClass(JNIEnv *env, jclass clazz, jobject obj) +{ + return (*env)->GetObjectClass(env, obj); +} + +#define CHECKJNI_GET_FIELD(type, name, fieldname, sig) \ +JNIEXPORT type JNICALL Java_checkjni_Get##name##Field(JNIEnv *env, jclass clazz, jobject obj) \ +{ \ + jclass c = (*env)->GetObjectClass(env, obj); \ + jfieldID id = (*env)->GetFieldID(env, c, fieldname, sig); \ + if ((*env)->ExceptionCheck(env)) return 0; \ + return (*env)->Get##name##Field(env, obj, id); \ +} +CHECKJNI_GET_FIELD(jint, Int, "jfI", "I") +CHECKJNI_GET_FIELD(jobject, Object, "jfL", "Ljava/lang/Object;") + +#define CHECKJNI_GET_STATIC_FIELD(type, name, fieldname, sig) \ +JNIEXPORT type JNICALL Java_checkjni_GetStatic##name##Field(JNIEnv *env, jclass clazz) \ +{ \ + jfieldID id = (*env)->GetStaticFieldID(env, clazz, fieldname, sig); \ + if ((*env)->ExceptionCheck(env)) return 0; \ + return (*env)->GetStatic##name##Field(env, clazz, id); \ +} +CHECKJNI_GET_STATIC_FIELD(jint, Int, "jsfI", "I") +CHECKJNI_GET_STATIC_FIELD(jobject, Object, "jsfL", "Ljava/lang/Object;") + +#define CHECKJNI_SET_STATIC_FIELD(type, name, fieldname, sig) \ +JNIEXPORT type JNICALL Java_checkjni_SetStatic##name##Field(JNIEnv *env, jclass clazz, type val) \ +{ \ + jfieldID id = (*env)->GetStaticFieldID(env, clazz, fieldname, sig); \ + if ((*env)->ExceptionCheck(env)) return 0; \ + (*env)->SetStatic##name##Field(env, clazz, id, val); \ +} +CHECKJNI_SET_STATIC_FIELD(jint, Int, "jsfI", "I") +CHECKJNI_SET_STATIC_FIELD(jobject, Object, "jsfL", "Ljava/lang/Object;") + +#define CHECKJNI_NEW_ARRAY(type, name) \ +JNIEXPORT type##Array JNICALL Java_checkjni_New##name##Array(JNIEnv *env, jclass clazz, jint size) \ +{ \ + int i; \ + type##Array a; \ + type *p; \ + jboolean iscopy; \ + a = (*env)->New##name##Array(env, size); \ + p = (*env)->Get##name##ArrayElements(env, a, &iscopy); \ + for (i = 0; i < size; i++) p[i] = i; \ + (*env)->Release##name##ArrayElements(env, a, p, 0); \ + return a; \ +} +CHECKJNI_NEW_ARRAY(jint, Int) +CHECKJNI_NEW_ARRAY(jlong, Long) + +JNIEXPORT jstring JNICALL Java_checkjni_NewString(JNIEnv *env, jclass clazz, jint type) +{ + if (type == 1) + return (*env)->NewString(env, (jchar *) "Test String from JNI", (jsize) strlen("Test String from JNI")); + else + return (*env)->NewStringUTF(env, "Test String from JNI with UTF"); +} + +