diff options
author | Brian Carlstrom <bdc@google.com> | 2014-06-18 08:34:01 -0700 |
---|---|---|
committer | Brian Carlstrom <bdc@google.com> | 2014-06-18 09:36:33 -0700 |
commit | 004644fe87046b965442b1ee1008b7206817d187 (patch) | |
tree | f5ade3240a9f969a359491990fd967a32173959d /runtime/jni_internal_test.cc | |
parent | df88a9e44673655009cc560947d29c1400516f12 (diff) | |
download | android_art-004644fe87046b965442b1ee1008b7206817d187.tar.gz android_art-004644fe87046b965442b1ee1008b7206817d187.tar.bz2 android_art-004644fe87046b965442b1ee1008b7206817d187.zip |
Fix GetMethodID to find an interface method from a super-interface
Bug: 15651032
Change-Id: I5df113e9489a1615e901f03bed92ed2a1a42bd67
Diffstat (limited to 'runtime/jni_internal_test.cc')
-rw-r--r-- | runtime/jni_internal_test.cc | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/runtime/jni_internal_test.cc b/runtime/jni_internal_test.cc index f182e950bd..5e46c57de1 100644 --- a/runtime/jni_internal_test.cc +++ b/runtime/jni_internal_test.cc @@ -268,32 +268,38 @@ TEST_F(JniInternalTest, GetMethodID) { jclass jlobject = env_->FindClass("java/lang/Object"); jclass jlstring = env_->FindClass("java/lang/String"); jclass jlnsme = env_->FindClass("java/lang/NoSuchMethodError"); + jclass jncrbc = env_->FindClass("java/nio/channels/ReadableByteChannel"); - // Sanity check that no exceptions are pending + // Sanity check that no exceptions are pending. ASSERT_FALSE(env_->ExceptionCheck()); // Check that java.lang.Object.foo() doesn't exist and NoSuchMethodError is - // a pending exception + // a pending exception. jmethodID method = env_->GetMethodID(jlobject, "foo", "()V"); EXPECT_EQ(nullptr, method); ExpectException(jlnsme); - // Check that java.lang.Object.equals() does exist + // Check that java.lang.Object.equals() does exist. method = env_->GetMethodID(jlobject, "equals", "(Ljava/lang/Object;)Z"); EXPECT_NE(nullptr, method); EXPECT_FALSE(env_->ExceptionCheck()); // Check that GetMethodID for java.lang.String.valueOf(int) fails as the - // method is static + // method is static. method = env_->GetMethodID(jlstring, "valueOf", "(I)Ljava/lang/String;"); EXPECT_EQ(nullptr, method); ExpectException(jlnsme); - // Check that GetMethodID for java.lang.NoSuchMethodError.<init>(String) finds the constructor + // Check that GetMethodID for java.lang.NoSuchMethodError.<init>(String) finds the constructor. method = env_->GetMethodID(jlnsme, "<init>", "(Ljava/lang/String;)V"); EXPECT_NE(nullptr, method); EXPECT_FALSE(env_->ExceptionCheck()); + // Check that GetMethodID can find a interface method inherited from another interface. + method = env_->GetMethodID(jncrbc, "close", "()V"); + EXPECT_NE(nullptr, method); + EXPECT_FALSE(env_->ExceptionCheck()); + // Bad arguments. CheckJniAbortCatcher check_jni_abort_catcher; method = env_->GetMethodID(nullptr, "<init>", "(Ljava/lang/String;)V"); @@ -630,11 +636,13 @@ TEST_F(JniInternalTest, GetPrimitiveArrayElementsOfWrongType) { jni_abort_catcher.Check( "attempt to get double primitive array elements with an object of type boolean[]"); jbyteArray array2 = env_->NewByteArray(10); - EXPECT_EQ(env_->GetBooleanArrayElements(reinterpret_cast<jbooleanArray>(array2), &is_copy), nullptr); + EXPECT_EQ(env_->GetBooleanArrayElements(reinterpret_cast<jbooleanArray>(array2), &is_copy), + nullptr); jni_abort_catcher.Check( "attempt to get boolean primitive array elements with an object of type byte[]"); jobject object = env_->NewStringUTF("Test String"); - EXPECT_EQ(env_->GetBooleanArrayElements(reinterpret_cast<jbooleanArray>(object), &is_copy), nullptr); + EXPECT_EQ(env_->GetBooleanArrayElements(reinterpret_cast<jbooleanArray>(object), &is_copy), + nullptr); jni_abort_catcher.Check( "attempt to get boolean primitive array elements with an object of type java.lang.String"); } @@ -681,7 +689,8 @@ TEST_F(JniInternalTest, ReleasePrimitiveArrayElementsOfWrongType) { jobject object = env_->NewStringUTF("Test String"); env_->ReleaseBooleanArrayElements(reinterpret_cast<jbooleanArray>(object), elements, 0); jni_abort_catcher.Check( - "attempt to release boolean primitive array elements with an object of type java.lang.String"); + "attempt to release boolean primitive array elements with an object of type " + "java.lang.String"); } TEST_F(JniInternalTest, GetReleasePrimitiveArrayCriticalOfWrongType) { CheckJniAbortCatcher jni_abort_catcher; @@ -736,7 +745,8 @@ TEST_F(JniInternalTest, GetPrimitiveArrayRegionElementsOfWrongType) { env_->GetBooleanArrayRegion(reinterpret_cast<jbooleanArray>(object), 0, kLength, reinterpret_cast<jboolean*>(elements)); jni_abort_catcher.Check( - "attempt to get region of boolean primitive array elements with an object of type java.lang.String"); + "attempt to get region of boolean primitive array elements with an object of type " + "java.lang.String"); } TEST_F(JniInternalTest, SetPrimitiveArrayRegionElementsOfWrongType) { @@ -782,7 +792,8 @@ TEST_F(JniInternalTest, SetPrimitiveArrayRegionElementsOfWrongType) { env_->SetBooleanArrayRegion(reinterpret_cast<jbooleanArray>(object), 0, kLength, reinterpret_cast<jboolean*>(elements)); jni_abort_catcher.Check( - "attempt to set region of boolean primitive array elements with an object of type java.lang.String"); + "attempt to set region of boolean primitive array elements with an object of type " + "java.lang.String"); } TEST_F(JniInternalTest, NewObjectArray) { |