Implement more of the exception/object/class JNI functions.
Change-Id: Id835c1a37e5034d11e2fc43ccf49e578510abfc1
diff --git a/src/jni_internal_test.cc b/src/jni_internal_test.cc
index 62f6068..f205169 100644
--- a/src/jni_internal_test.cc
+++ b/src/jni_internal_test.cc
@@ -318,6 +318,20 @@
// Already tested in NewObjectArray/NewPrimitiveArray.
}
+TEST_F(JniInternalTest, GetObjectClass) {
+ jclass string_class = env_->FindClass("java/lang/String");
+ ASSERT_TRUE(string_class != NULL);
+ jclass class_class = env_->FindClass("java/lang/Class");
+ ASSERT_TRUE(class_class != NULL);
+
+ jstring s = env_->NewStringUTF("poop");
+ jclass c = env_->GetObjectClass(s);
+ ASSERT_TRUE(env_->IsSameObject(string_class, c));
+
+ jclass c2 = env_->GetObjectClass(c);
+ ASSERT_TRUE(env_->IsSameObject(class_class, env_->GetObjectClass(c2)));
+}
+
TEST_F(JniInternalTest, GetSuperclass) {
jclass object_class = env_->FindClass("java/lang/Object");
ASSERT_TRUE(object_class != NULL);
@@ -327,6 +341,16 @@
ASSERT_TRUE(env_->GetSuperclass(object_class) == NULL);
}
+TEST_F(JniInternalTest, IsAssignableFrom) {
+ jclass object_class = env_->FindClass("java/lang/Object");
+ ASSERT_TRUE(object_class != NULL);
+ jclass string_class = env_->FindClass("java/lang/String");
+ ASSERT_TRUE(string_class != NULL);
+
+ ASSERT_TRUE(env_->IsAssignableFrom(object_class, string_class));
+ ASSERT_FALSE(env_->IsAssignableFrom(string_class, object_class));
+}
+
TEST_F(JniInternalTest, NewStringUTF) {
EXPECT_TRUE(env_->NewStringUTF(NULL) == NULL);
EXPECT_TRUE(env_->NewStringUTF("") != NULL);
@@ -1254,4 +1278,30 @@
}
#endif // __arm__
+TEST_F(JniInternalTest, Throw) {
+ EXPECT_EQ(JNI_ERR, env_->Throw(NULL));
+
+ jclass exception_class = env_->FindClass("java/lang/RuntimeException");
+ ASSERT_TRUE(exception_class != NULL);
+ jthrowable exception = reinterpret_cast<jthrowable>(env_->AllocObject(exception_class));
+ ASSERT_TRUE(exception != NULL);
+
+ EXPECT_EQ(JNI_OK, env_->Throw(exception));
+ EXPECT_TRUE(env_->ExceptionCheck());
+ EXPECT_TRUE(env_->IsSameObject(exception, env_->ExceptionOccurred()));
+ env_->ExceptionClear();
+}
+
+TEST_F(JniInternalTest, ThrowNew) {
+ EXPECT_EQ(JNI_ERR, env_->Throw(NULL));
+
+ jclass exception_class = env_->FindClass("java/lang/RuntimeException");
+ ASSERT_TRUE(exception_class != NULL);
+
+ EXPECT_EQ(JNI_OK, env_->ThrowNew(exception_class, "hello world"));
+ EXPECT_TRUE(env_->ExceptionCheck());
+ EXPECT_TRUE(env_->IsInstanceOf(env_->ExceptionOccurred(), exception_class));
+ env_->ExceptionClear();
+}
+
}