9aca730db38835fc5596b49b56cfdfc36f7113b9
[platform/framework/web/crosswalk.git] / src / tools / json_schema_compiler / test / arrays_unittest.cc
1 // Copyright (c) 2012 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 "tools/json_schema_compiler/test/arrays.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 using namespace test::api::arrays;
10
11 namespace {
12
13 // TODO(calamity): Change to AppendString etc once kalman's patch goes through
14 static scoped_ptr<base::DictionaryValue> CreateBasicArrayTypeDictionary() {
15   base::DictionaryValue* value = new base::DictionaryValue();
16   base::ListValue* strings_value = new base::ListValue();
17   strings_value->Append(base::Value::CreateStringValue("a"));
18   strings_value->Append(base::Value::CreateStringValue("b"));
19   strings_value->Append(base::Value::CreateStringValue("c"));
20   strings_value->Append(base::Value::CreateStringValue("it's easy as"));
21   base::ListValue* integers_value = new base::ListValue();
22   integers_value->Append(base::Value::CreateIntegerValue(1));
23   integers_value->Append(base::Value::CreateIntegerValue(2));
24   integers_value->Append(base::Value::CreateIntegerValue(3));
25   base::ListValue* booleans_value = new base::ListValue();
26   booleans_value->Append(base::Value::CreateBooleanValue(false));
27   booleans_value->Append(base::Value::CreateBooleanValue(true));
28   base::ListValue* numbers_value = new base::ListValue();
29   numbers_value->Append(base::Value::CreateDoubleValue(6.1));
30   value->Set("numbers", numbers_value);
31   value->Set("booleans", booleans_value);
32   value->Set("strings", strings_value);
33   value->Set("integers", integers_value);
34   return scoped_ptr<base::DictionaryValue>(value);
35 }
36
37 static base::Value* CreateItemValue(int val) {
38   base::DictionaryValue* value(new base::DictionaryValue());
39   value->Set("val", base::Value::CreateIntegerValue(val));
40   return value;
41 }
42
43 }  // namespace
44
45 TEST(JsonSchemaCompilerArrayTest, BasicArrayType) {
46   {
47     scoped_ptr<base::DictionaryValue> value = CreateBasicArrayTypeDictionary();
48     scoped_ptr<BasicArrayType> basic_array_type(new BasicArrayType());
49     ASSERT_TRUE(BasicArrayType::Populate(*value, basic_array_type.get()));
50     EXPECT_TRUE(value->Equals(basic_array_type->ToValue().get()));
51   }
52 }
53
54 TEST(JsonSchemaCompilerArrayTest, EnumArrayType) {
55   // { "types": ["one", "two", "three"] }
56   base::ListValue* types = new base::ListValue();
57   types->AppendString("one");
58   types->AppendString("two");
59   types->AppendString("three");
60   base::DictionaryValue value;
61   value.Set("types", types);
62
63   EnumArrayType enum_array_type;
64
65   // Test Populate.
66   ASSERT_TRUE(EnumArrayType::Populate(value, &enum_array_type));
67   {
68     EnumArrayType::TypesType enums[] = {
69       EnumArrayType::TYPES_TYPE_ONE,
70       EnumArrayType::TYPES_TYPE_TWO,
71       EnumArrayType::TYPES_TYPE_THREE,
72     };
73     std::vector<EnumArrayType::TypesType> enums_vector(
74         enums, enums + arraysize(enums));
75     EXPECT_EQ(enums_vector, enum_array_type.types);
76   }
77
78   // Test ToValue.
79   scoped_ptr<base::Value> as_value(enum_array_type.ToValue());
80   EXPECT_TRUE(value.Equals(as_value.get())) << value << " != " << *as_value;
81 }
82
83 TEST(JsonSchemaCompilerArrayTest, OptionalEnumArrayType) {
84   {
85     std::vector<OptionalEnumArrayType::TypesType> enums;
86     enums.push_back(OptionalEnumArrayType::TYPES_TYPE_ONE);
87     enums.push_back(OptionalEnumArrayType::TYPES_TYPE_TWO);
88     enums.push_back(OptionalEnumArrayType::TYPES_TYPE_THREE);
89
90     scoped_ptr<base::ListValue> types(new base::ListValue());
91     for (size_t i = 0; i < enums.size(); ++i) {
92       types->Append(new base::StringValue(
93           OptionalEnumArrayType::ToString(enums[i])));
94     }
95
96     base::DictionaryValue value;
97     value.Set("types", types.release());
98
99     OptionalEnumArrayType enum_array_type;
100     ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type));
101     EXPECT_EQ(enums, *enum_array_type.types);
102   }
103   {
104     base::DictionaryValue value;
105     scoped_ptr<base::ListValue> enum_array(new base::ListValue());
106     enum_array->Append(base::Value::CreateStringValue("invalid"));
107
108     value.Set("types", enum_array.release());
109     OptionalEnumArrayType enum_array_type;
110     ASSERT_FALSE(OptionalEnumArrayType::Populate(value, &enum_array_type));
111     EXPECT_TRUE(enum_array_type.types->empty());
112   }
113 }
114
115 TEST(JsonSchemaCompilerArrayTest, RefArrayType) {
116   {
117     scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
118     scoped_ptr<base::ListValue> ref_array(new base::ListValue());
119     ref_array->Append(CreateItemValue(1));
120     ref_array->Append(CreateItemValue(2));
121     ref_array->Append(CreateItemValue(3));
122     value->Set("refs", ref_array.release());
123     scoped_ptr<RefArrayType> ref_array_type(new RefArrayType());
124     EXPECT_TRUE(RefArrayType::Populate(*value, ref_array_type.get()));
125     ASSERT_EQ(3u, ref_array_type->refs.size());
126     EXPECT_EQ(1, ref_array_type->refs[0]->val);
127     EXPECT_EQ(2, ref_array_type->refs[1]->val);
128     EXPECT_EQ(3, ref_array_type->refs[2]->val);
129   }
130   {
131     scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
132     scoped_ptr<base::ListValue> not_ref_array(new base::ListValue());
133     not_ref_array->Append(CreateItemValue(1));
134     not_ref_array->Append(base::Value::CreateIntegerValue(3));
135     value->Set("refs", not_ref_array.release());
136     scoped_ptr<RefArrayType> ref_array_type(new RefArrayType());
137     EXPECT_FALSE(RefArrayType::Populate(*value, ref_array_type.get()));
138   }
139 }
140
141 TEST(JsonSchemaCompilerArrayTest, IntegerArrayParamsCreate) {
142   scoped_ptr<base::ListValue> params_value(new base::ListValue());
143   scoped_ptr<base::ListValue> integer_array(new base::ListValue());
144   integer_array->Append(base::Value::CreateIntegerValue(2));
145   integer_array->Append(base::Value::CreateIntegerValue(4));
146   integer_array->Append(base::Value::CreateIntegerValue(8));
147   params_value->Append(integer_array.release());
148   scoped_ptr<IntegerArray::Params> params(
149       IntegerArray::Params::Create(*params_value));
150   EXPECT_TRUE(params.get());
151   ASSERT_EQ(3u, params->nums.size());
152   EXPECT_EQ(2, params->nums[0]);
153   EXPECT_EQ(4, params->nums[1]);
154   EXPECT_EQ(8, params->nums[2]);
155 }
156
157 TEST(JsonSchemaCompilerArrayTest, AnyArrayParamsCreate) {
158   scoped_ptr<base::ListValue> params_value(new base::ListValue());
159   scoped_ptr<base::ListValue> any_array(new base::ListValue());
160   any_array->Append(base::Value::CreateIntegerValue(1));
161   any_array->Append(base::Value::CreateStringValue("test"));
162   any_array->Append(CreateItemValue(2));
163   params_value->Append(any_array.release());
164   scoped_ptr<AnyArray::Params> params(
165       AnyArray::Params::Create(*params_value));
166   EXPECT_TRUE(params.get());
167   ASSERT_EQ(3u, params->anys.size());
168   int int_temp = 0;
169   EXPECT_TRUE(params->anys[0]->GetAsInteger(&int_temp));
170   EXPECT_EQ(1, int_temp);
171 }
172
173 TEST(JsonSchemaCompilerArrayTest, ObjectArrayParamsCreate) {
174   scoped_ptr<base::ListValue> params_value(new base::ListValue());
175   scoped_ptr<base::ListValue> item_array(new base::ListValue());
176   item_array->Append(CreateItemValue(1));
177   item_array->Append(CreateItemValue(2));
178   params_value->Append(item_array.release());
179   scoped_ptr<ObjectArray::Params> params(
180       ObjectArray::Params::Create(*params_value));
181   EXPECT_TRUE(params.get());
182   ASSERT_EQ(2u, params->objects.size());
183   EXPECT_EQ(1, params->objects[0]->additional_properties["val"]);
184   EXPECT_EQ(2, params->objects[1]->additional_properties["val"]);
185 }
186
187 TEST(JsonSchemaCompilerArrayTest, RefArrayParamsCreate) {
188   scoped_ptr<base::ListValue> params_value(new base::ListValue());
189   scoped_ptr<base::ListValue> item_array(new base::ListValue());
190   item_array->Append(CreateItemValue(1));
191   item_array->Append(CreateItemValue(2));
192   params_value->Append(item_array.release());
193   scoped_ptr<RefArray::Params> params(
194       RefArray::Params::Create(*params_value));
195   EXPECT_TRUE(params.get());
196   ASSERT_EQ(2u, params->refs.size());
197   EXPECT_EQ(1, params->refs[0]->val);
198   EXPECT_EQ(2, params->refs[1]->val);
199 }
200
201 TEST(JsonSchemaCompilerArrayTest, ReturnIntegerArrayResultCreate) {
202   std::vector<int> integers;
203   integers.push_back(1);
204   integers.push_back(2);
205   scoped_ptr<base::ListValue> results =
206       ReturnIntegerArray::Results::Create(integers);
207
208   base::ListValue expected;
209   base::ListValue* expected_argument = new base::ListValue();
210   expected_argument->Append(base::Value::CreateIntegerValue(1));
211   expected_argument->Append(base::Value::CreateIntegerValue(2));
212   expected.Append(expected_argument);
213   EXPECT_TRUE(results->Equals(&expected));
214 }
215
216 TEST(JsonSchemaCompilerArrayTest, ReturnRefArrayResultCreate) {
217   std::vector<linked_ptr<Item> > items;
218   items.push_back(linked_ptr<Item>(new Item()));
219   items.push_back(linked_ptr<Item>(new Item()));
220   items[0]->val = 1;
221   items[1]->val = 2;
222   scoped_ptr<base::ListValue> results =
223       ReturnRefArray::Results::Create(items);
224
225   base::ListValue expected;
226   base::ListValue* expected_argument = new base::ListValue();
227   base::DictionaryValue* first = new base::DictionaryValue();
228   first->SetInteger("val", 1);
229   expected_argument->Append(first);
230   base::DictionaryValue* second = new base::DictionaryValue();
231   second->SetInteger("val", 2);
232   expected_argument->Append(second);
233   expected.Append(expected_argument);
234   EXPECT_TRUE(results->Equals(&expected));
235 }