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<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);
37 static Value* CreateItemValue(int val) {
38 DictionaryValue* value(new DictionaryValue());
39 value->Set("val", Value::CreateIntegerValue(val));
45 TEST(JsonSchemaCompilerArrayTest, BasicArrayType) {
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()));
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);
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])));
64 DictionaryValue value;
65 value.Set("types", types.release());
67 EnumArrayType enum_array_type;
68 ASSERT_TRUE(EnumArrayType::Populate(value, &enum_array_type));
69 EXPECT_EQ(enums, enum_array_type.types);
72 TEST(JsonSchemaCompilerArrayTest, OptionalEnumArrayType) {
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);
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])));
85 DictionaryValue value;
86 value.Set("types", types.release());
88 OptionalEnumArrayType enum_array_type;
89 ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type));
90 EXPECT_EQ(enums, *enum_array_type.types);
93 DictionaryValue value;
94 scoped_ptr<ListValue> enum_array(new ListValue());
95 enum_array->Append(Value::CreateStringValue("invalid"));
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());
104 TEST(JsonSchemaCompilerArrayTest, RefArrayType) {
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);
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()));
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]);
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());
158 EXPECT_TRUE(params->anys[0]->GetAsInteger(&int_temp));
159 EXPECT_EQ(1, int_temp);
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"]);
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);
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);
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));
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()));
210 scoped_ptr<ListValue> results = ReturnRefArray::Results::Create(items);
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));