1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/android/java/java_type.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content { 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass JavaTypeTest : public testing::Test { 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 16116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(JavaTypeTest, ScalarTypes) { 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch struct { 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* binary_type; 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType::Type java_type; 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* jni_name; 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* jni_signature; 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } scalar_types[] = { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"boolean", JavaType::TypeBoolean, "Z", "Z"}, 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"byte", JavaType::TypeByte, "B", "B"}, 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"char", JavaType::TypeChar, "C", "C"}, 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"short", JavaType::TypeShort, "S", "S"}, 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"int", JavaType::TypeInt, "I", "I"}, 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"long", JavaType::TypeLong, "J", "J"}, 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"float", JavaType::TypeFloat, "F", "F"}, 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"double", JavaType::TypeDouble, "D", "D"}, 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"void", JavaType::TypeVoid, "V", "V"}, 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"java.lang.String", JavaType::TypeString, "java/lang/String", 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Ljava/lang/String;"}, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"java.lang.Object", JavaType::TypeObject, "java/lang/Object", 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Ljava/lang/Object;"}, 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch {"my.nested.Type$Foo", JavaType::TypeObject, "my/nested/Type$Foo", 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Lmy/nested/Type$Foo;"}}; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (size_t i = 0; i < ARRAYSIZE_UNSAFE(scalar_types); ++i) { 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType jt = 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType::CreateFromBinaryName(scalar_types[i].binary_type); 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(scalar_types[i].java_type, jt.type); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(jt.inner_type); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(scalar_types[i].jni_name, jt.JNIName()); 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(scalar_types[i].jni_signature, jt.JNISignature()); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(JavaTypeTest, ArrayTypes) { 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType array_of_boolean = JavaType::CreateFromBinaryName("[Z"); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeArray, array_of_boolean.type); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(array_of_boolean.inner_type); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeBoolean, array_of_boolean.inner_type->type); 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(array_of_boolean.inner_type->inner_type); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[Z", array_of_boolean.JNIName()); 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[Z", array_of_boolean.JNISignature()); 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType array_of_boolean_2d = JavaType::CreateFromBinaryName("[[Z"); 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeArray, array_of_boolean_2d.type); 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(array_of_boolean_2d.inner_type); 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeArray, array_of_boolean_2d.inner_type->type); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(array_of_boolean_2d.inner_type->inner_type); 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeBoolean, 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch array_of_boolean_2d.inner_type->inner_type->type); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(array_of_boolean_2d.inner_type->inner_type->inner_type); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[[Z", array_of_boolean_2d.JNIName()); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[[Z", array_of_boolean_2d.JNISignature()); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType array_of_string = 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType::CreateFromBinaryName("[Ljava.lang.String;"); 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeArray, array_of_string.type); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(array_of_string.inner_type); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeString, array_of_string.inner_type->type); 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(array_of_string.inner_type->inner_type); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[Ljava/lang/String;", array_of_string.JNIName()); 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[Ljava/lang/String;", array_of_string.JNISignature()); 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType array_of_object = 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch JavaType::CreateFromBinaryName("[Ljava.lang.Object;"); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeArray, array_of_object.type); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(array_of_object.inner_type); 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(JavaType::TypeObject, array_of_object.inner_type->type); 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(array_of_object.inner_type->inner_type); 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[Ljava/lang/Object;", array_of_object.JNIName()); 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("[Ljava/lang/Object;", array_of_object.JNISignature()); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace content 88