blob: 4680ee7ec2c9b46e54ff5f3e16f1b8ab080eb093 [file] [log] [blame]
// 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/crossref.h"
#include <memory>
#include <utility>
#include <vector>
#include "base/values.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "tools/json_schema_compiler/test/simple_api.h"
namespace crossref = test::api::crossref;
namespace simple_api = test::api::simple_api;
namespace {
std::unique_ptr<base::DictionaryValue> CreateTestTypeValue() {
auto value = std::make_unique<base::DictionaryValue>();
value->SetDouble("number", 1.1);
value->SetInteger("integer", 4);
value->SetString("string", "bling");
value->SetBoolean("boolean", true);
return value;
}
} // namespace
TEST(JsonSchemaCompilerCrossrefTest, CrossrefTypePopulateAndToValue) {
base::DictionaryValue crossref_orig;
crossref_orig.SetKey("testType",
base::Value::FromUniquePtrValue(CreateTestTypeValue()));
crossref_orig.SetString("testEnumRequired", "one");
crossref_orig.SetString("testEnumOptional", "two");
// Test Populate of the value --> compiled type.
crossref::CrossrefType crossref_type;
ASSERT_TRUE(crossref::CrossrefType::Populate(crossref_orig, &crossref_type));
EXPECT_EQ(1.1, crossref_type.test_type.number);
EXPECT_EQ(4, crossref_type.test_type.integer);
EXPECT_EQ("bling", crossref_type.test_type.string);
EXPECT_EQ(true, crossref_type.test_type.boolean);
EXPECT_EQ(simple_api::TEST_ENUM_ONE, crossref_type.test_enum_required);
EXPECT_EQ(simple_api::TEST_ENUM_TWO, crossref_type.test_enum_optional);
EXPECT_EQ(simple_api::TEST_ENUM_NONE, crossref_type.test_enum_optional_extra);
// Test ToValue of the compiled type --> value.
std::unique_ptr<base::DictionaryValue> crossref_value =
crossref_type.ToValue();
ASSERT_TRUE(crossref_value);
EXPECT_EQ(crossref_orig, *crossref_value);
}
TEST(JsonSchemaCompilerCrossrefTest, TestTypeOptionalParamCreate) {
auto params_value = std::make_unique<base::ListValue>();
params_value->Append(CreateTestTypeValue());
std::unique_ptr<crossref::TestTypeOptionalParam::Params> params(
crossref::TestTypeOptionalParam::Params::Create(
params_value->GetListDeprecated()));
EXPECT_TRUE(params.get());
EXPECT_TRUE(params->test_type.get());
EXPECT_EQ(*CreateTestTypeValue(), *params->test_type->ToValue());
}
TEST(JsonSchemaCompilerCrossrefTest, TestTypeOptionalParamFail) {
auto params_value = std::make_unique<base::ListValue>();
std::unique_ptr<base::DictionaryValue> test_type_value =
CreateTestTypeValue();
test_type_value->RemoveKey("number");
params_value->Append(std::move(test_type_value));
std::unique_ptr<crossref::TestTypeOptionalParam::Params> params(
crossref::TestTypeOptionalParam::Params::Create(
params_value->GetListDeprecated()));
EXPECT_FALSE(params.get());
}
TEST(JsonSchemaCompilerCrossrefTest, GetTestType) {
std::unique_ptr<base::DictionaryValue> value = CreateTestTypeValue();
auto test_type = std::make_unique<simple_api::TestType>();
EXPECT_TRUE(simple_api::TestType::Populate(*value, test_type.get()));
std::vector<base::Value> results =
crossref::GetTestType::Results::Create(*test_type);
ASSERT_EQ(1u, results.size());
EXPECT_EQ(*value, results[0]);
}
TEST(JsonSchemaCompilerCrossrefTest, TestTypeInObjectParamsCreate) {
{
auto params_value = std::make_unique<base::ListValue>();
auto param_object_value = std::make_unique<base::DictionaryValue>();
param_object_value->SetKey(
"testType", base::Value::FromUniquePtrValue(CreateTestTypeValue()));
param_object_value->SetBoolean("boolean", true);
params_value->Append(std::move(param_object_value));
std::unique_ptr<crossref::TestTypeInObject::Params> params(
crossref::TestTypeInObject::Params::Create(
params_value->GetListDeprecated()));
EXPECT_TRUE(params.get());
EXPECT_TRUE(params->param_object.test_type.get());
EXPECT_TRUE(params->param_object.boolean);
EXPECT_EQ(*CreateTestTypeValue(),
*params->param_object.test_type->ToValue());
}
{
auto params_value = std::make_unique<base::ListValue>();
auto param_object_value = std::make_unique<base::DictionaryValue>();
param_object_value->SetBoolean("boolean", true);
params_value->Append(std::move(param_object_value));
std::unique_ptr<crossref::TestTypeInObject::Params> params(
crossref::TestTypeInObject::Params::Create(
params_value->GetListDeprecated()));
EXPECT_TRUE(params.get());
EXPECT_FALSE(params->param_object.test_type.get());
EXPECT_TRUE(params->param_object.boolean);
}
{
auto params_value = std::make_unique<base::ListValue>();
auto param_object_value = std::make_unique<base::DictionaryValue>();
param_object_value->SetString("testType", "invalid");
param_object_value->SetBoolean("boolean", true);
params_value->Append(std::move(param_object_value));
std::unique_ptr<crossref::TestTypeInObject::Params> params(
crossref::TestTypeInObject::Params::Create(
params_value->GetListDeprecated()));
EXPECT_FALSE(params.get());
}
{
auto params_value = std::make_unique<base::ListValue>();
auto param_object_value = std::make_unique<base::DictionaryValue>();
param_object_value->SetKey(
"testType", base::Value::FromUniquePtrValue(CreateTestTypeValue()));
params_value->Append(std::move(param_object_value));
std::unique_ptr<crossref::TestTypeInObject::Params> params(
crossref::TestTypeInObject::Params::Create(
params_value->GetListDeprecated()));
EXPECT_FALSE(params.get());
}
}