223 lines
8.3 KiB
C++
223 lines
8.3 KiB
C++
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include "tools/json_schema_compiler/test/arrays.h"
|
||
|
|
||
|
#include "testing/gtest/include/gtest/gtest.h"
|
||
|
|
||
|
using namespace test::api::arrays;
|
||
|
|
||
|
namespace {
|
||
|
|
||
|
// TODO(calamity): Change to AppendString etc once kalman's patch goes through
|
||
|
static scoped_ptr<DictionaryValue> CreateBasicArrayTypeDictionary() {
|
||
|
DictionaryValue* value = new DictionaryValue();
|
||
|
ListValue* strings_value = new ListValue();
|
||
|
strings_value->Append(Value::CreateStringValue("a"));
|
||
|
strings_value->Append(Value::CreateStringValue("b"));
|
||
|
strings_value->Append(Value::CreateStringValue("c"));
|
||
|
strings_value->Append(Value::CreateStringValue("it's easy as"));
|
||
|
ListValue* integers_value = new ListValue();
|
||
|
integers_value->Append(Value::CreateIntegerValue(1));
|
||
|
integers_value->Append(Value::CreateIntegerValue(2));
|
||
|
integers_value->Append(Value::CreateIntegerValue(3));
|
||
|
ListValue* booleans_value = new ListValue();
|
||
|
booleans_value->Append(Value::CreateBooleanValue(false));
|
||
|
booleans_value->Append(Value::CreateBooleanValue(true));
|
||
|
ListValue* numbers_value = new ListValue();
|
||
|
numbers_value->Append(Value::CreateDoubleValue(6.1));
|
||
|
value->Set("numbers", numbers_value);
|
||
|
value->Set("booleans", booleans_value);
|
||
|
value->Set("strings", strings_value);
|
||
|
value->Set("integers", integers_value);
|
||
|
return scoped_ptr<DictionaryValue>(value);
|
||
|
}
|
||
|
|
||
|
static Value* CreateItemValue(int val) {
|
||
|
DictionaryValue* value(new DictionaryValue());
|
||
|
value->Set("val", Value::CreateIntegerValue(val));
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
} // namespace
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, BasicArrayType) {
|
||
|
{
|
||
|
scoped_ptr<DictionaryValue> value = CreateBasicArrayTypeDictionary();
|
||
|
scoped_ptr<BasicArrayType> basic_array_type(new BasicArrayType());
|
||
|
ASSERT_TRUE(BasicArrayType::Populate(*value, basic_array_type.get()));
|
||
|
EXPECT_TRUE(value->Equals(basic_array_type->ToValue().get()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, EnumArrayType) {
|
||
|
std::vector<EnumArrayType::TypesType> enums;
|
||
|
enums.push_back(EnumArrayType::TYPES_TYPE_ONE);
|
||
|
enums.push_back(EnumArrayType::TYPES_TYPE_TWO);
|
||
|
enums.push_back(EnumArrayType::TYPES_TYPE_THREE);
|
||
|
|
||
|
scoped_ptr<ListValue> types(new ListValue());
|
||
|
for (size_t i = 0; i < enums.size(); ++i)
|
||
|
types->Append(new base::StringValue(EnumArrayType::ToString(enums[i])));
|
||
|
|
||
|
DictionaryValue value;
|
||
|
value.Set("types", types.release());
|
||
|
|
||
|
EnumArrayType enum_array_type;
|
||
|
ASSERT_TRUE(EnumArrayType::Populate(value, &enum_array_type));
|
||
|
EXPECT_EQ(enums, enum_array_type.types);
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, OptionalEnumArrayType) {
|
||
|
{
|
||
|
std::vector<OptionalEnumArrayType::TypesType> enums;
|
||
|
enums.push_back(OptionalEnumArrayType::TYPES_TYPE_ONE);
|
||
|
enums.push_back(OptionalEnumArrayType::TYPES_TYPE_TWO);
|
||
|
enums.push_back(OptionalEnumArrayType::TYPES_TYPE_THREE);
|
||
|
|
||
|
scoped_ptr<ListValue> types(new ListValue());
|
||
|
for (size_t i = 0; i < enums.size(); ++i) {
|
||
|
types->Append(new base::StringValue(
|
||
|
OptionalEnumArrayType::ToString(enums[i])));
|
||
|
}
|
||
|
|
||
|
DictionaryValue value;
|
||
|
value.Set("types", types.release());
|
||
|
|
||
|
OptionalEnumArrayType enum_array_type;
|
||
|
ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type));
|
||
|
EXPECT_EQ(enums, *enum_array_type.types);
|
||
|
}
|
||
|
{
|
||
|
DictionaryValue value;
|
||
|
scoped_ptr<ListValue> enum_array(new ListValue());
|
||
|
enum_array->Append(Value::CreateStringValue("invalid"));
|
||
|
|
||
|
value.Set("types", enum_array.release());
|
||
|
OptionalEnumArrayType enum_array_type;
|
||
|
ASSERT_FALSE(OptionalEnumArrayType::Populate(value, &enum_array_type));
|
||
|
EXPECT_TRUE(enum_array_type.types->empty());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, RefArrayType) {
|
||
|
{
|
||
|
scoped_ptr<DictionaryValue> value(new DictionaryValue());
|
||
|
scoped_ptr<ListValue> ref_array(new ListValue());
|
||
|
ref_array->Append(CreateItemValue(1));
|
||
|
ref_array->Append(CreateItemValue(2));
|
||
|
ref_array->Append(CreateItemValue(3));
|
||
|
value->Set("refs", ref_array.release());
|
||
|
scoped_ptr<RefArrayType> ref_array_type(new RefArrayType());
|
||
|
EXPECT_TRUE(RefArrayType::Populate(*value, ref_array_type.get()));
|
||
|
ASSERT_EQ(3u, ref_array_type->refs.size());
|
||
|
EXPECT_EQ(1, ref_array_type->refs[0]->val);
|
||
|
EXPECT_EQ(2, ref_array_type->refs[1]->val);
|
||
|
EXPECT_EQ(3, ref_array_type->refs[2]->val);
|
||
|
}
|
||
|
{
|
||
|
scoped_ptr<DictionaryValue> value(new DictionaryValue());
|
||
|
scoped_ptr<ListValue> not_ref_array(new ListValue());
|
||
|
not_ref_array->Append(CreateItemValue(1));
|
||
|
not_ref_array->Append(Value::CreateIntegerValue(3));
|
||
|
value->Set("refs", not_ref_array.release());
|
||
|
scoped_ptr<RefArrayType> ref_array_type(new RefArrayType());
|
||
|
EXPECT_FALSE(RefArrayType::Populate(*value, ref_array_type.get()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, IntegerArrayParamsCreate) {
|
||
|
scoped_ptr<ListValue> params_value(new ListValue());
|
||
|
scoped_ptr<ListValue> integer_array(new ListValue());
|
||
|
integer_array->Append(Value::CreateIntegerValue(2));
|
||
|
integer_array->Append(Value::CreateIntegerValue(4));
|
||
|
integer_array->Append(Value::CreateIntegerValue(8));
|
||
|
params_value->Append(integer_array.release());
|
||
|
scoped_ptr<IntegerArray::Params> params(
|
||
|
IntegerArray::Params::Create(*params_value));
|
||
|
EXPECT_TRUE(params.get());
|
||
|
ASSERT_EQ(3u, params->nums.size());
|
||
|
EXPECT_EQ(2, params->nums[0]);
|
||
|
EXPECT_EQ(4, params->nums[1]);
|
||
|
EXPECT_EQ(8, params->nums[2]);
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, AnyArrayParamsCreate) {
|
||
|
scoped_ptr<ListValue> params_value(new ListValue());
|
||
|
scoped_ptr<ListValue> any_array(new ListValue());
|
||
|
any_array->Append(Value::CreateIntegerValue(1));
|
||
|
any_array->Append(Value::CreateStringValue("test"));
|
||
|
any_array->Append(CreateItemValue(2));
|
||
|
params_value->Append(any_array.release());
|
||
|
scoped_ptr<AnyArray::Params> params(
|
||
|
AnyArray::Params::Create(*params_value));
|
||
|
EXPECT_TRUE(params.get());
|
||
|
ASSERT_EQ(3u, params->anys.size());
|
||
|
int int_temp = 0;
|
||
|
EXPECT_TRUE(params->anys[0]->GetAsInteger(&int_temp));
|
||
|
EXPECT_EQ(1, int_temp);
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, ObjectArrayParamsCreate) {
|
||
|
scoped_ptr<ListValue> params_value(new ListValue());
|
||
|
scoped_ptr<ListValue> item_array(new ListValue());
|
||
|
item_array->Append(CreateItemValue(1));
|
||
|
item_array->Append(CreateItemValue(2));
|
||
|
params_value->Append(item_array.release());
|
||
|
scoped_ptr<ObjectArray::Params> params(
|
||
|
ObjectArray::Params::Create(*params_value));
|
||
|
EXPECT_TRUE(params.get());
|
||
|
ASSERT_EQ(2u, params->objects.size());
|
||
|
EXPECT_EQ(1, params->objects[0]->additional_properties["val"]);
|
||
|
EXPECT_EQ(2, params->objects[1]->additional_properties["val"]);
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, RefArrayParamsCreate) {
|
||
|
scoped_ptr<ListValue> params_value(new ListValue());
|
||
|
scoped_ptr<ListValue> item_array(new ListValue());
|
||
|
item_array->Append(CreateItemValue(1));
|
||
|
item_array->Append(CreateItemValue(2));
|
||
|
params_value->Append(item_array.release());
|
||
|
scoped_ptr<RefArray::Params> params(
|
||
|
RefArray::Params::Create(*params_value));
|
||
|
EXPECT_TRUE(params.get());
|
||
|
ASSERT_EQ(2u, params->refs.size());
|
||
|
EXPECT_EQ(1, params->refs[0]->val);
|
||
|
EXPECT_EQ(2, params->refs[1]->val);
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, ReturnIntegerArrayResultCreate) {
|
||
|
std::vector<int> integers;
|
||
|
integers.push_back(1);
|
||
|
integers.push_back(2);
|
||
|
scoped_ptr<ListValue> results = ReturnIntegerArray::Results::Create(integers);
|
||
|
|
||
|
ListValue expected;
|
||
|
ListValue* expected_argument = new ListValue();
|
||
|
expected_argument->Append(Value::CreateIntegerValue(1));
|
||
|
expected_argument->Append(Value::CreateIntegerValue(2));
|
||
|
expected.Append(expected_argument);
|
||
|
EXPECT_TRUE(results->Equals(&expected));
|
||
|
}
|
||
|
|
||
|
TEST(JsonSchemaCompilerArrayTest, ReturnRefArrayResultCreate) {
|
||
|
std::vector<linked_ptr<Item> > items;
|
||
|
items.push_back(linked_ptr<Item>(new Item()));
|
||
|
items.push_back(linked_ptr<Item>(new Item()));
|
||
|
items[0]->val = 1;
|
||
|
items[1]->val = 2;
|
||
|
scoped_ptr<ListValue> results = ReturnRefArray::Results::Create(items);
|
||
|
|
||
|
ListValue expected;
|
||
|
ListValue* expected_argument = new ListValue();
|
||
|
DictionaryValue* first = new DictionaryValue();
|
||
|
first->SetInteger("val", 1);
|
||
|
expected_argument->Append(first);
|
||
|
DictionaryValue* second = new DictionaryValue();
|
||
|
second->SetInteger("val", 2);
|
||
|
expected_argument->Append(second);
|
||
|
expected.Append(expected_argument);
|
||
|
EXPECT_TRUE(results->Equals(&expected));
|
||
|
}
|