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.
5 #include "tools/json_schema_compiler/test/arrays.h"
7 #include "testing/gtest/include/gtest/gtest.h"
9 using namespace test::api::arrays;
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);
37 static base::Value* CreateItemValue(int val) {
38 base::DictionaryValue* value(new base::DictionaryValue());
39 value->Set("val", base::Value::CreateIntegerValue(val));
45 TEST(JsonSchemaCompilerArrayTest, BasicArrayType) {
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()));
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);
63 EnumArrayType enum_array_type;
66 ASSERT_TRUE(EnumArrayType::Populate(value, &enum_array_type));
68 EnumArrayType::TypesType enums[] = {
69 EnumArrayType::TYPES_TYPE_ONE,
70 EnumArrayType::TYPES_TYPE_TWO,
71 EnumArrayType::TYPES_TYPE_THREE,
73 std::vector<EnumArrayType::TypesType> enums_vector(
74 enums, enums + arraysize(enums));
75 EXPECT_EQ(enums_vector, enum_array_type.types);
79 scoped_ptr<base::Value> as_value(enum_array_type.ToValue());
80 EXPECT_TRUE(value.Equals(as_value.get())) << value << " != " << *as_value;
83 TEST(JsonSchemaCompilerArrayTest, OptionalEnumArrayType) {
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);
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])));
96 base::DictionaryValue value;
97 value.Set("types", types.release());
99 OptionalEnumArrayType enum_array_type;
100 ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type));
101 EXPECT_EQ(enums, *enum_array_type.types);
104 base::DictionaryValue value;
105 scoped_ptr<base::ListValue> enum_array(new base::ListValue());
106 enum_array->Append(base::Value::CreateStringValue("invalid"));
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());
115 TEST(JsonSchemaCompilerArrayTest, RefArrayType) {
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);
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()));
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]);
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());
169 EXPECT_TRUE(params->anys[0]->GetAsInteger(&int_temp));
170 EXPECT_EQ(1, int_temp);
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"]);
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);
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);
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));
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()));
222 scoped_ptr<base::ListValue> results =
223 ReturnRefArray::Results::Create(items);
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));