blob: a7f69179dac6ce974555d1f0b67bca0295835dea [file] [log] [blame]
Elliott Hughes0c9cd562011-08-12 10:59:29 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#include "common_test.h"
4
5#include <stdio.h>
6#include "gtest/gtest.h"
7
8namespace art {
9
10class JniInternalTest : public RuntimeTest {
Elliott Hughesc7ac37f2011-08-12 12:21:58 -070011 protected:
12 virtual void SetUp() {
13 RuntimeTest::SetUp();
14 env_ = Thread::Current()->GetJniEnv();
15 }
16 JNIEnv* env_;
Elliott Hughes0c9cd562011-08-12 10:59:29 -070017};
18
Elliott Hughesc7ac37f2011-08-12 12:21:58 -070019TEST_F(JniInternalTest, GetVersion) {
20 ASSERT_EQ(JNI_VERSION_1_6, env_->GetVersion());
21}
22
Elliott Hughes0c9cd562011-08-12 10:59:29 -070023#define EXPECT_CLASS_FOUND(NAME) \
Elliott Hughesc7ac37f2011-08-12 12:21:58 -070024 EXPECT_TRUE(env_->FindClass(NAME) != NULL)
Elliott Hughes0c9cd562011-08-12 10:59:29 -070025
26#define EXPECT_CLASS_NOT_FOUND(NAME) \
Elliott Hughesc7ac37f2011-08-12 12:21:58 -070027 EXPECT_TRUE(env_->FindClass(NAME) == NULL)
Elliott Hughes0c9cd562011-08-12 10:59:29 -070028
29TEST_F(JniInternalTest, FindClass) {
Elliott Hughes0c9cd562011-08-12 10:59:29 -070030 // TODO: when these tests start failing because you're calling FindClass
31 // with a pending exception, fix EXPECT_CLASS_NOT_FOUND to assert that an
32 // exception was thrown and clear the exception.
33
34 // TODO: . is only allowed as an alternative to / if CheckJNI is off.
35
36 // Reference types...
37 // You can't include the "L;" in a JNI class descriptor.
38 EXPECT_CLASS_FOUND("java/lang/String");
39 EXPECT_CLASS_NOT_FOUND("Ljava/lang/String;");
40 // We support . as well as / for compatibility.
41 EXPECT_CLASS_FOUND("java.lang.String");
42 EXPECT_CLASS_NOT_FOUND("Ljava.lang.String;");
43 // ...for arrays too, where you must include "L;".
44 EXPECT_CLASS_FOUND("[Ljava/lang/String;");
45 EXPECT_CLASS_NOT_FOUND("[java/lang/String");
46 EXPECT_CLASS_FOUND("[Ljava.lang.String;");
47 EXPECT_CLASS_NOT_FOUND("[java.lang.String");
48
49 // Primitive arrays are okay (if the primitive type is valid)...
50 EXPECT_CLASS_FOUND("[C");
51 EXPECT_CLASS_NOT_FOUND("[K");
52 // But primitive types aren't allowed...
53 EXPECT_CLASS_NOT_FOUND("C");
54 EXPECT_CLASS_NOT_FOUND("K");
55}
56
57} // namespace art