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