1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/browser/android/java/java_type.h" 6 7 #include "base/macros.h" 8 #include "base/memory/scoped_ptr.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 11 namespace content { 12 13 class JavaTypeTest : public testing::Test { 14 }; 15 16 TEST_F(JavaTypeTest, ScalarTypes) { 17 struct { 18 const char* binary_type; 19 JavaType::Type java_type; 20 const char* jni_name; 21 const char* jni_signature; 22 } scalar_types[] = { 23 {"boolean", JavaType::TypeBoolean, "Z", "Z"}, 24 {"byte", JavaType::TypeByte, "B", "B"}, 25 {"char", JavaType::TypeChar, "C", "C"}, 26 {"short", JavaType::TypeShort, "S", "S"}, 27 {"int", JavaType::TypeInt, "I", "I"}, 28 {"long", JavaType::TypeLong, "J", "J"}, 29 {"float", JavaType::TypeFloat, "F", "F"}, 30 {"double", JavaType::TypeDouble, "D", "D"}, 31 {"void", JavaType::TypeVoid, "V", "V"}, 32 {"java.lang.String", JavaType::TypeString, "java/lang/String", 33 "Ljava/lang/String;"}, 34 {"java.lang.Object", JavaType::TypeObject, "java/lang/Object", 35 "Ljava/lang/Object;"}, 36 {"my.nested.Type$Foo", JavaType::TypeObject, "my/nested/Type$Foo", 37 "Lmy/nested/Type$Foo;"}}; 38 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(scalar_types); ++i) { 39 JavaType jt = 40 JavaType::CreateFromBinaryName(scalar_types[i].binary_type); 41 EXPECT_EQ(scalar_types[i].java_type, jt.type); 42 EXPECT_FALSE(jt.inner_type); 43 EXPECT_EQ(scalar_types[i].jni_name, jt.JNIName()); 44 EXPECT_EQ(scalar_types[i].jni_signature, jt.JNISignature()); 45 } 46 } 47 48 TEST_F(JavaTypeTest, ArrayTypes) { 49 JavaType array_of_boolean = JavaType::CreateFromBinaryName("[Z"); 50 EXPECT_EQ(JavaType::TypeArray, array_of_boolean.type); 51 EXPECT_TRUE(array_of_boolean.inner_type); 52 EXPECT_EQ(JavaType::TypeBoolean, array_of_boolean.inner_type->type); 53 EXPECT_FALSE(array_of_boolean.inner_type->inner_type); 54 EXPECT_EQ("[Z", array_of_boolean.JNIName()); 55 EXPECT_EQ("[Z", array_of_boolean.JNISignature()); 56 57 JavaType array_of_boolean_2d = JavaType::CreateFromBinaryName("[[Z"); 58 EXPECT_EQ(JavaType::TypeArray, array_of_boolean_2d.type); 59 EXPECT_TRUE(array_of_boolean_2d.inner_type); 60 EXPECT_EQ(JavaType::TypeArray, array_of_boolean_2d.inner_type->type); 61 EXPECT_TRUE(array_of_boolean_2d.inner_type->inner_type); 62 EXPECT_EQ(JavaType::TypeBoolean, 63 array_of_boolean_2d.inner_type->inner_type->type); 64 EXPECT_FALSE(array_of_boolean_2d.inner_type->inner_type->inner_type); 65 EXPECT_EQ("[[Z", array_of_boolean_2d.JNIName()); 66 EXPECT_EQ("[[Z", array_of_boolean_2d.JNISignature()); 67 68 JavaType array_of_string = 69 JavaType::CreateFromBinaryName("[Ljava.lang.String;"); 70 EXPECT_EQ(JavaType::TypeArray, array_of_string.type); 71 EXPECT_TRUE(array_of_string.inner_type); 72 EXPECT_EQ(JavaType::TypeString, array_of_string.inner_type->type); 73 EXPECT_FALSE(array_of_string.inner_type->inner_type); 74 EXPECT_EQ("[Ljava/lang/String;", array_of_string.JNIName()); 75 EXPECT_EQ("[Ljava/lang/String;", array_of_string.JNISignature()); 76 77 JavaType array_of_object = 78 JavaType::CreateFromBinaryName("[Ljava.lang.Object;"); 79 EXPECT_EQ(JavaType::TypeArray, array_of_object.type); 80 EXPECT_TRUE(array_of_object.inner_type); 81 EXPECT_EQ(JavaType::TypeObject, array_of_object.inner_type->type); 82 EXPECT_FALSE(array_of_object.inner_type->inner_type); 83 EXPECT_EQ("[Ljava/lang/Object;", array_of_object.JNIName()); 84 EXPECT_EQ("[Ljava/lang/Object;", array_of_object.JNISignature()); 85 } 86 87 } // namespace content 88