Add stale weak global unit test to jni_internal_test.
Prevents regressions related to:
https://code.google.com/p/android/issues/detail?id=63929
Change-Id: I4a3dbb2765523eac47e308fbdefa9558a38d346d
diff --git a/runtime/jni_internal_test.cc b/runtime/jni_internal_test.cc
index 26b1836..2240447 100644
--- a/runtime/jni_internal_test.cc
+++ b/runtime/jni_internal_test.cc
@@ -1204,6 +1204,21 @@
// TODO: invoke a native method and test that its arguments are considered local references.
}
+TEST_F(JniInternalTest, StaleWeakGlobal) {
+ jclass java_lang_Class = env_->FindClass("java/lang/Class");
+ ASSERT_TRUE(java_lang_Class != NULL);
+ jobjectArray local_ref = env_->NewObjectArray(1, java_lang_Class, NULL);
+ ASSERT_TRUE(local_ref != NULL);
+ jweak weak_global = env_->NewWeakGlobalRef(local_ref);
+ ASSERT_TRUE(weak_global != NULL);
+ env_->DeleteLocalRef(local_ref);
+ Runtime::Current()->GetHeap()->CollectGarbage(false); // GC should clear the weak global.
+ jobject new_global_ref = env_->NewGlobalRef(weak_global);
+ EXPECT_TRUE(new_global_ref == NULL);
+ jobject new_local_ref = env_->NewLocalRef(weak_global);
+ EXPECT_TRUE(new_local_ref == NULL);
+}
+
TEST_F(JniInternalTest, NewStringUTF) {
EXPECT_TRUE(env_->NewStringUTF(NULL) == NULL);
jstring s;