15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "tools/json_schema_compiler/test/simple_api.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "tools/json_schema_compiler/test/crossref.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace test::api::crossref; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static scoped_ptr<base::DictionaryValue> CreateTestTypeDictionary() { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* value(new base::DictionaryValue()); 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->SetWithoutPathExpansion("number", new base::FundamentalValue(1.1)); 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch value->SetWithoutPathExpansion("integer", new base::FundamentalValue(4)); 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->SetWithoutPathExpansion("string", new base::StringValue("bling")); 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch value->SetWithoutPathExpansion("boolean", new base::FundamentalValue(true)); 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<base::DictionaryValue>(value); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(JsonSchemaCompilerCrossrefTest, CrossrefTypePopulate) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CrossrefType> crossref_type(new CrossrefType()); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->Set("testType", CreateTestTypeDictionary().release()); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(CrossrefType::Populate(*value, crossref_type.get())); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(crossref_type->test_type.get()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(CreateTestTypeDictionary()->Equals( 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) crossref_type->test_type->ToValue().get())); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(value->Equals(crossref_type->ToValue().get())); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(JsonSchemaCompilerCrossrefTest, TestTypeOptionalParamCreate) { 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> params_value(new base::ListValue()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_value->Append(CreateTestTypeDictionary().release()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestTypeOptionalParam::Params> params( 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTypeOptionalParam::Params::Create(*params_value)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params.get()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params->test_type.get()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestTypeDictionary()->Equals(params->test_type->ToValue().get())); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(JsonSchemaCompilerCrossrefTest, TestTypeOptionalParamFail) { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> params_value(new base::ListValue()); 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> test_type_value = 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateTestTypeDictionary(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_type_value->RemoveWithoutPathExpansion("number", NULL); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_value->Append(test_type_value.release()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestTypeOptionalParam::Params> params( 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTypeOptionalParam::Params::Create(*params_value)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(params.get()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(JsonSchemaCompilerCrossrefTest, GetTestType) { 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> value = CreateTestTypeDictionary(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<test::api::simple_api::TestType> test_type( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new test::api::simple_api::TestType()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test::api::simple_api::TestType::Populate(*value, test_type.get())); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> results = 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetTestType::Results::Create(*test_type); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* result_dict = NULL; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results->GetDictionary(0, &result_dict); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(value->Equals(result_dict)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(JsonSchemaCompilerCrossrefTest, TestTypeInObjectParamsCreate) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> params_value(new base::ListValue()); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> param_object_value( 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::DictionaryValue()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_object_value->Set("testType", CreateTestTypeDictionary().release()); 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch param_object_value->Set("boolean", new base::FundamentalValue(true)); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_value->Append(param_object_value.release()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestTypeInObject::Params> params( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTypeInObject::Params::Create(*params_value)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params.get()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params->param_object.test_type.get()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params->param_object.boolean); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(CreateTestTypeDictionary()->Equals( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params->param_object.test_type->ToValue().get())); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> params_value(new base::ListValue()); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> param_object_value( 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::DictionaryValue()); 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch param_object_value->Set("boolean", new base::FundamentalValue(true)); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_value->Append(param_object_value.release()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestTypeInObject::Params> params( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTypeInObject::Params::Create(*params_value)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params.get()); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(params->param_object.test_type.get()); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(params->param_object.boolean); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> params_value(new base::ListValue()); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> param_object_value( 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::DictionaryValue()); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) param_object_value->Set("testType", new base::StringValue("invalid")); 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch param_object_value->Set("boolean", new base::FundamentalValue(true)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_value->Append(param_object_value.release()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestTypeInObject::Params> params( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTypeInObject::Params::Create(*params_value)); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(params.get()); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> params_value(new base::ListValue()); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> param_object_value( 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new base::DictionaryValue()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_object_value->Set("testType", CreateTestTypeDictionary().release()); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params_value->Append(param_object_value.release()); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestTypeInObject::Params> params( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTypeInObject::Params::Create(*params_value)); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(params.get()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 122