blob: bc3ddcca85d6c8d7f4dc86d5859c1d9fb3565f36 [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 {
11};
12
13#define EXPECT_CLASS_FOUND(NAME) \
14 EXPECT_TRUE(env->FindClass(NAME) != NULL)
15
16#define EXPECT_CLASS_NOT_FOUND(NAME) \
17 EXPECT_TRUE(env->FindClass(NAME) == NULL)
18
19TEST_F(JniInternalTest, FindClass) {
20 JNIEnv* env = Thread::Current()->GetJniEnv();
21
22 // TODO: when these tests start failing because you're calling FindClass
23 // with a pending exception, fix EXPECT_CLASS_NOT_FOUND to assert that an
24 // exception was thrown and clear the exception.
25
26 // TODO: . is only allowed as an alternative to / if CheckJNI is off.
27
28 // Reference types...
29 // You can't include the "L;" in a JNI class descriptor.
30 EXPECT_CLASS_FOUND("java/lang/String");
31 EXPECT_CLASS_NOT_FOUND("Ljava/lang/String;");
32 // We support . as well as / for compatibility.
33 EXPECT_CLASS_FOUND("java.lang.String");
34 EXPECT_CLASS_NOT_FOUND("Ljava.lang.String;");
35 // ...for arrays too, where you must include "L;".
36 EXPECT_CLASS_FOUND("[Ljava/lang/String;");
37 EXPECT_CLASS_NOT_FOUND("[java/lang/String");
38 EXPECT_CLASS_FOUND("[Ljava.lang.String;");
39 EXPECT_CLASS_NOT_FOUND("[java.lang.String");
40
41 // Primitive arrays are okay (if the primitive type is valid)...
42 EXPECT_CLASS_FOUND("[C");
43 EXPECT_CLASS_NOT_FOUND("[K");
44 // But primitive types aren't allowed...
45 EXPECT_CLASS_NOT_FOUND("C");
46 EXPECT_CLASS_NOT_FOUND("K");
47}
48
49} // namespace art