diff options
author | Narayan Kamath <narayan@google.com> | 2014-07-11 19:15:11 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-08-01 14:53:30 +0100 |
commit | 1268b742c8cff7318dc0b5b283cbaeabfe0725ba (patch) | |
tree | 62ccc7504d91617154c6474b933562cc70255fce /runtime/jni_internal_test.cc | |
parent | 89c210bf418a152ccabfbbf853ddcce33aea450d (diff) | |
download | android_art-1268b742c8cff7318dc0b5b283cbaeabfe0725ba.tar.gz android_art-1268b742c8cff7318dc0b5b283cbaeabfe0725ba.tar.bz2 android_art-1268b742c8cff7318dc0b5b283cbaeabfe0725ba.zip |
Fix broken JNI IsAssignableFrom.
The expected argument order was the opposite of what the spec
dictated.
Reported-By: Mikhail Naganov <mnaganov@google.com>
bug: 16531674
Change-Id: I1ebc6d5814ebb4feeb96f3ecdf1a4602da4ba7ce
Diffstat (limited to 'runtime/jni_internal_test.cc')
-rw-r--r-- | runtime/jni_internal_test.cc | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/runtime/jni_internal_test.cc b/runtime/jni_internal_test.cc index 7c7e60c5ee..da3080f218 100644 --- a/runtime/jni_internal_test.cc +++ b/runtime/jni_internal_test.cc @@ -950,8 +950,28 @@ TEST_F(JniInternalTest, IsAssignableFrom) { jclass string_class = env_->FindClass("java/lang/String"); ASSERT_NE(string_class, nullptr); - ASSERT_TRUE(env_->IsAssignableFrom(object_class, string_class)); - ASSERT_FALSE(env_->IsAssignableFrom(string_class, object_class)); + // A superclass is assignable from an instance of its + // subclass but not vice versa. + ASSERT_TRUE(env_->IsAssignableFrom(string_class, object_class)); + ASSERT_FALSE(env_->IsAssignableFrom(object_class, string_class)); + + jclass charsequence_interface = env_->FindClass("java/lang/CharSequence"); + ASSERT_NE(charsequence_interface, nullptr); + + // An interface is assignable from an instance of an implementing + // class but not vice versa. + ASSERT_TRUE(env_->IsAssignableFrom(string_class, charsequence_interface)); + ASSERT_FALSE(env_->IsAssignableFrom(charsequence_interface, string_class)); + + // Check that arrays are covariant. + jclass string_array_class = env_->FindClass("[Ljava/lang/String;"); + ASSERT_NE(string_array_class, nullptr); + jclass object_array_class = env_->FindClass("[Ljava/lang/Object;"); + ASSERT_NE(object_array_class, nullptr); + ASSERT_TRUE(env_->IsAssignableFrom(string_array_class, object_array_class)); + ASSERT_FALSE(env_->IsAssignableFrom(object_array_class, string_array_class)); + + // Primitive types are tested in 004-JniTest. // Null as either class should fail. CheckJniAbortCatcher jni_abort_catcher; |