blob: a7f69179dac6ce974555d1f0b67bca0295835dea [file] [log] [blame]
// Copyright 2011 Google Inc. All Rights Reserved.
#include "common_test.h"
#include <stdio.h>
#include "gtest/gtest.h"
namespace art {
class JniInternalTest : public RuntimeTest {
protected:
virtual void SetUp() {
RuntimeTest::SetUp();
env_ = Thread::Current()->GetJniEnv();
}
JNIEnv* env_;
};
TEST_F(JniInternalTest, GetVersion) {
ASSERT_EQ(JNI_VERSION_1_6, env_->GetVersion());
}
#define EXPECT_CLASS_FOUND(NAME) \
EXPECT_TRUE(env_->FindClass(NAME) != NULL)
#define EXPECT_CLASS_NOT_FOUND(NAME) \
EXPECT_TRUE(env_->FindClass(NAME) == NULL)
TEST_F(JniInternalTest, FindClass) {
// TODO: when these tests start failing because you're calling FindClass
// with a pending exception, fix EXPECT_CLASS_NOT_FOUND to assert that an
// exception was thrown and clear the exception.
// TODO: . is only allowed as an alternative to / if CheckJNI is off.
// Reference types...
// You can't include the "L;" in a JNI class descriptor.
EXPECT_CLASS_FOUND("java/lang/String");
EXPECT_CLASS_NOT_FOUND("Ljava/lang/String;");
// We support . as well as / for compatibility.
EXPECT_CLASS_FOUND("java.lang.String");
EXPECT_CLASS_NOT_FOUND("Ljava.lang.String;");
// ...for arrays too, where you must include "L;".
EXPECT_CLASS_FOUND("[Ljava/lang/String;");
EXPECT_CLASS_NOT_FOUND("[java/lang/String");
EXPECT_CLASS_FOUND("[Ljava.lang.String;");
EXPECT_CLASS_NOT_FOUND("[java.lang.String");
// Primitive arrays are okay (if the primitive type is valid)...
EXPECT_CLASS_FOUND("[C");
EXPECT_CLASS_NOT_FOUND("[K");
// But primitive types aren't allowed...
EXPECT_CLASS_NOT_FOUND("C");
EXPECT_CLASS_NOT_FOUND("K");
}
} // namespace art