Home | History | Annotate | Download | only in java
      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