diff options
author | Joonas Reynders <joonas.reynders@iki.fi> | 2012-02-09 21:45:54 +0200 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-02-09 23:16:35 +0200 |
commit | 93a545b5758ce89070006550ed294a8212b20a88 (patch) | |
tree | c77142749179de6df69cbbf56326c6b2a7d28907 | |
parent | 8c6cee29f742f068d8acb3a981bf5d67bb7f5dea (diff) | |
download | jato-93a545b5758ce89070006550ed294a8212b20a88.tar.gz |
Add tests for function JNI_MethodID
Signed-off-by: Joonas Reynders <joonas.reynders@iki.fi>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r-- | test/functional/java/lang/JNITest.java | 19 | ||||
-rw-r--r-- | test/functional/jni/jnitest.c | 31 |
2 files changed, 50 insertions, 0 deletions
diff --git a/test/functional/java/lang/JNITest.java b/test/functional/java/lang/JNITest.java index c2fff009..319fb2c4 100644 --- a/test/functional/java/lang/JNITest.java +++ b/test/functional/java/lang/JNITest.java @@ -100,6 +100,7 @@ public class JNITest extends TestCase { native static public Object testNewObjectV(Class<?> clazz, String constructorSignature, Object args); native static public Class<?> testGetObjectClass(Object obj); native static public boolean isInstanceOf(Object obj, Class<?> clazz); + native static public boolean testMethodID(Class<?> clazz, String methodName, String signature); private static JNITest jniTest = new JNITest(); @@ -371,6 +372,23 @@ public class JNITest extends TestCase { assertTrue(isInstanceOf(jniTest, JNITest.class)); } + public static void testMethodID() { + + assertTrue(testMethodID(JNITest.class, "testMethodID", "()V")); + + assertThrows(new Block() { + public void run() throws Throwable { + testMethodID(JNITest.class, "testMethodID", "(Ljava/lang/String;)V"); + } + }, NoSuchMethodError.class); + + assertThrows(new Block() { + public void run() throws Throwable { + testMethodID(JNITest.class, "nosuchmethod", "()V"); + } + }, NoSuchMethodError.class); + } + public static void main(String[] args) { testReturnPassedString(); testReturnPassedInt(); @@ -400,5 +418,6 @@ public class JNITest extends TestCase { testNewObjectV(); testGetObjectClass(); testIsInstanceOf(); + testMethodID(); } } diff --git a/test/functional/jni/jnitest.c b/test/functional/jni/jnitest.c index 4498d3c1..4f6a2833 100644 --- a/test/functional/jni/jnitest.c +++ b/test/functional/jni/jnitest.c @@ -760,3 +760,34 @@ JNIEXPORT jboolean JNICALL Java_java_lang_JNITest_isInstanceOf(JNIEnv *env, jcla { return (*env)->IsInstanceOf(env, obj, clazz); } + +/* + * Class: java_lang_JNITest + * Method: testMethodID + * Signature: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Z + */ +JNIEXPORT jboolean JNICALL Java_java_lang_JNITest_testMethodID(JNIEnv *env, jclass clazz, jclass classForMethodID, jstring methodName, jstring signature) +{ + char *methodNameStr; + char *signatureStr; + jboolean iscopy; + + methodNameStr = (char *) (*env)->GetStringUTFChars(env, methodName, &iscopy); + if (signatureStr == NULL) { + return false; /* OutOfMemoryError */ + } + + signatureStr = (char *) (*env)->GetStringUTFChars(env, signature, &iscopy); + if (signatureStr == NULL) { + return false; /* OutOfMemoryError */ + } + + jmethodID methodID = (*env)->GetMethodID(env, classForMethodID, methodNameStr, signatureStr); + if (methodID == NULL) + return false; + + (*env)->ReleaseStringUTFChars(env, methodName, methodNameStr); + (*env)->ReleaseStringUTFChars(env, signature, signatureStr); + + return true; +}
\ No newline at end of file |