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;