Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2013 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. | |
| 4 | |
| 5 #include "tools/json_schema_compiler/test/error_generation.h" | |
| 6 | |
| 7 #include "base/json/json_writer.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 #include "tools/json_schema_compiler/test/test_util.h" | |
| 10 | |
| 11 using namespace test::api::error_generation; | |
| 12 using base::FundamentalValue; | |
| 13 using json_schema_compiler::test_util::Dictionary; | |
| 14 using json_schema_compiler::test_util::List; | |
| 15 | |
| 16 // GenerateTypePopulate errors | |
| 17 | |
| 18 TEST(JsonSchemaCompilerErrorTest, RequiredPropertyPopulate) { | |
| 19 { | |
| 20 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 21 "string", new StringValue("bling")); | |
| 22 EXPECT_TRUE(TestType::Populate(*value, new TestType())); | |
| 23 } | |
| 24 { | |
| 25 scoped_ptr<base::BinaryValue> value(new base::BinaryValue()); | |
| 26 std::string error; | |
| 27 EXPECT_FALSE(TestType::Populate(*value, new TestType(), &error)); | |
|
not at google - send to devlin
2013/08/09 18:20:58
(new TestType()) looks leaky... other tests like t
dhnishi (use Chromium)
2013/08/09 20:50:48
Valgrind suggests an 4-16 byte leak for all of tho
| |
| 28 EXPECT_EQ(error, "expected dictionary, got binary"); | |
| 29 } | |
| 30 } | |
| 31 | |
| 32 TEST(JsonSchemaCompilerErrorTest, UnexpectedTypePopulation) { | |
| 33 { | |
| 34 scoped_ptr<base::ListValue> good_value(new base::ListValue()); | |
| 35 EXPECT_TRUE(ChoiceType::Integers::Populate(*good_value, | |
| 36 new ChoiceType::Integers())); | |
| 37 } | |
| 38 { | |
| 39 scoped_ptr<base::BinaryValue> bad_value(new base::BinaryValue()); | |
| 40 std::string error; | |
| 41 EXPECT_FALSE(ChoiceType::Integers::Populate(*bad_value, | |
| 42 new ChoiceType::Integers(), | |
| 43 &error)); | |
| 44 EXPECT_EQ(error, "expected integers or integer, got binary"); | |
| 45 } | |
| 46 } | |
| 47 | |
| 48 // GenerateTypePopulateProperty errors | |
| 49 | |
| 50 TEST(JsonSchemaCompilerErrorTest, TypeIsRequired) { | |
| 51 { | |
| 52 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 53 "integers", new FundamentalValue(5)); | |
| 54 EXPECT_TRUE(ChoiceType::Populate(*value, new ChoiceType())); | |
| 55 } | |
| 56 { | |
| 57 scoped_ptr<base::DictionaryValue> bad_value(new base::DictionaryValue()); | |
| 58 std::string error; | |
| 59 EXPECT_FALSE(ChoiceType::Populate(*bad_value, new ChoiceType(), &error)); | |
| 60 EXPECT_EQ(error, "'integers' is required"); | |
| 61 } | |
| 62 } | |
| 63 | |
| 64 // GenerateParamsCheck errors | |
| 65 | |
| 66 TEST(JsonSchemaCompilerErrorTest, TooManyParameters) { | |
| 67 { | |
| 68 scoped_ptr<base::ListValue> params_value = List( | |
| 69 new FundamentalValue(5)); | |
| 70 EXPECT_TRUE(TestFunction::Params::Create(*params_value)); | |
| 71 } | |
| 72 { | |
| 73 scoped_ptr<base::ListValue> params_value = List( | |
| 74 new FundamentalValue(5), | |
| 75 new FundamentalValue(5)); | |
| 76 std::string error; | |
| 77 EXPECT_FALSE(TestFunction::Params::Create(*params_value, &error)); | |
| 78 EXPECT_EQ(error, "expected 1 arguments, got 2"); | |
| 79 } | |
| 80 } | |
| 81 | |
| 82 // GenerateFunctionParamsCreate errors | |
| 83 | |
| 84 TEST(JsonSchemaCompilerErrorTest, ParamIsRequired) { | |
| 85 { | |
| 86 scoped_ptr<base::ListValue> params_value = List( | |
| 87 new FundamentalValue(5)); | |
| 88 EXPECT_TRUE(TestFunction::Params::Create(*params_value)); | |
| 89 } | |
| 90 { | |
| 91 scoped_ptr<base::ListValue> params_value = List( | |
| 92 Value::CreateNullValue()); | |
| 93 std::string error; | |
| 94 EXPECT_FALSE(TestFunction::Params::Create(*params_value, &error)); | |
| 95 EXPECT_EQ(error, "'num' is required"); | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 // GeneratePopulateVariableFromValue errors | |
| 100 | |
| 101 TEST(JsonSchemaCompilerErrorTest, WrongPropertyValueType) { | |
| 102 { | |
| 103 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 104 "string", new StringValue("yes"); | |
| 105 EXPECT_TRUE(TestType::Populate(*value, new TestType())); | |
| 106 } | |
| 107 { | |
| 108 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 109 "string", new FundamentalValue(1.1)); | |
| 110 std::string error; | |
| 111 EXPECT_FALSE(TestType::Populate(*value, new TestType(), &error)); | |
| 112 EXPECT_EQ(error, "'string': expected std::string, got number"); | |
|
not at google - send to devlin
2013/08/09 18:20:58
s/std::string/string/
dhnishi (use Chromium)
2013/08/09 20:50:48
Done. Using the underlying_type now, rather than t
not at google - send to devlin
2013/08/09 21:13:01
Yeah these errors are for displaying to extension
| |
| 113 } | |
| 114 } | |
| 115 | |
| 116 TEST(JsonSchemaCompilerErrorTest, WrongParameterCreationType) { | |
| 117 { | |
| 118 scoped_ptr<base::ListValue> params_value = List( | |
| 119 new StringValue("Yeah!")); | |
| 120 EXPECT_TRUE(TestString::Params::Create(*params_value)); | |
| 121 } | |
| 122 { | |
| 123 scoped_ptr<base::ListValue> params_value = List( | |
| 124 new FundamentalValue(5)); | |
| 125 std::string error; | |
| 126 EXPECT_FALSE(TestTypeInObject::Params::Create(*params_value, &error)); | |
| 127 EXPECT_EQ(error, | |
| 128 "'paramObject': expected dictionary, got integer"); | |
| 129 } | |
| 130 } | |
| 131 | |
| 132 TEST(JsonSchemaCompilerErrorTest, WrongTypeValueType) { | |
| 133 { | |
| 134 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
| 135 EXPECT_TRUE(ObjectType::Populate(*value, new ObjectType())); | |
| 136 } | |
| 137 { | |
| 138 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 139 "otherType", new FundamentalValue(1.1)); | |
| 140 std::string error; | |
| 141 EXPECT_FALSE(ObjectType::Populate(*value, new ObjectType(), &error)); | |
| 142 EXPECT_EQ(error, | |
| 143 "'otherType': expected dictionary, got number"); | |
| 144 } | |
| 145 } | |
| 146 | |
| 147 TEST(JsonSchemaCompilerErrorTest, UnableToPopulateArray) { | |
| 148 { | |
| 149 scoped_ptr<base::ListValue> params_value = List( | |
| 150 new FundamentalValue(5)); | |
| 151 EXPECT_TRUE(ChoiceType::Integers::Populate(*params_value, | |
| 152 new ChoiceType::Integers())); | |
| 153 } | |
| 154 { | |
| 155 scoped_ptr<base::ListValue> params_value = List( | |
| 156 new FundamentalValue(5), | |
| 157 new FundamentalValue(false)); | |
| 158 std::string error; | |
| 159 EXPECT_FALSE(ChoiceType::Integers::Populate(*params_value, | |
| 160 new ChoiceType::Integers(), | |
| 161 &error)); | |
| 162 EXPECT_EQ(error, "unable to populate array 'integers'"); | |
| 163 } | |
| 164 } | |
| 165 | |
| 166 TEST(JsonSchemaCompilerErrorTest, BinaryTypeExpected) { | |
| 167 { | |
| 168 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 169 "data", new base::BinaryValue()); | |
| 170 EXPECT_TRUE(BinaryData::Populate(*value, | |
| 171 new BinaryData())); | |
| 172 } | |
| 173 { | |
| 174 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 175 "data", new FundamentalValue(1.1)); | |
| 176 std::string error; | |
| 177 EXPECT_FALSE(BinaryData::Populate(*value, new BinaryData(), &error)); | |
| 178 EXPECT_EQ(error, "'data': expected binary, got number"); | |
| 179 } | |
| 180 } | |
| 181 | |
| 182 // GenerateStringToEnumConversion errors | |
| 183 | |
| 184 TEST(JsonSchemaCompilerErrorTest, BadEnumValue) { | |
| 185 { | |
| 186 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 187 "enumeration", new StringValue("one")); | |
| 188 EXPECT_TRUE(HasEnumeration::Populate(*value, | |
| 189 new HasEnumeration())); | |
| 190 } | |
| 191 { | |
| 192 scoped_ptr<DictionaryValue> value = Dictionary( | |
| 193 "enumeration", new StringValue("bad sauce")); | |
| 194 std::string error; | |
| 195 EXPECT_FALSE(HasEnumeration::Populate(*value, | |
| 196 new HasEnumeration(), | |
| 197 &error)); | |
| 198 EXPECT_EQ(error, | |
| 199 "'enumeration': expected \"one\" or \"two\" or \"three\", " | |
| 200 "got \"bad sauce\""); | |
| 201 } | |
| 202 } | |
| OLD | NEW |