| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/json/json_reader.h" |
| 6 |
| 5 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 6 #include "base/json/json_reader.h" | |
| 7 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/string_piece.h" | 9 #include "base/string_piece.h" |
| 9 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 10 #include "base/values.h" | 11 #include "base/values.h" |
| 11 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 12 | 13 |
| 13 namespace base { | 14 namespace base { |
| 14 | 15 |
| 15 TEST(JSONReaderTest, Reading) { | 16 TEST(JSONReaderTest, Reading) { |
| 16 // some whitespace checking | 17 // some whitespace checking |
| 17 scoped_ptr<Value> root; | 18 scoped_ptr<Value> root; |
| 18 root.reset(JSONReader().JsonToValue(" null ", false, false)); | 19 root.reset(JSONReader().JsonToValue(" null ", false, false)); |
| 19 ASSERT_TRUE(root.get()); | 20 ASSERT_TRUE(root.get()); |
| 20 ASSERT_TRUE(root->IsType(Value::TYPE_NULL)); | 21 EXPECT_TRUE(root->IsType(Value::TYPE_NULL)); |
| 21 | 22 |
| 22 // Invalid JSON string | 23 // Invalid JSON string |
| 23 root.reset(JSONReader().JsonToValue("nu", false, false)); | 24 root.reset(JSONReader().JsonToValue("nu", false, false)); |
| 24 ASSERT_FALSE(root.get()); | 25 EXPECT_FALSE(root.get()); |
| 25 | 26 |
| 26 // Simple bool | 27 // Simple bool |
| 27 root.reset(JSONReader().JsonToValue("true ", false, false)); | 28 root.reset(JSONReader().JsonToValue("true ", false, false)); |
| 28 ASSERT_TRUE(root.get()); | 29 ASSERT_TRUE(root.get()); |
| 29 ASSERT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); | 30 EXPECT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); |
| 30 | 31 |
| 31 // Embedded comment | 32 // Embedded comment |
| 32 root.reset(JSONReader().JsonToValue("/* comment */null", false, false)); | 33 root.reset(JSONReader().JsonToValue("/* comment */null", false, false)); |
| 33 ASSERT_TRUE(root.get()); | 34 ASSERT_TRUE(root.get()); |
| 34 ASSERT_TRUE(root->IsType(Value::TYPE_NULL)); | 35 EXPECT_TRUE(root->IsType(Value::TYPE_NULL)); |
| 35 root.reset(JSONReader().JsonToValue("40 /* comment */", false, false)); | 36 root.reset(JSONReader().JsonToValue("40 /* comment */", false, false)); |
| 36 ASSERT_TRUE(root.get()); | 37 ASSERT_TRUE(root.get()); |
| 37 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 38 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); |
| 38 root.reset(JSONReader().JsonToValue("true // comment", false, false)); | 39 root.reset(JSONReader().JsonToValue("true // comment", false, false)); |
| 39 ASSERT_TRUE(root.get()); | 40 ASSERT_TRUE(root.get()); |
| 40 ASSERT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); | 41 EXPECT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); |
| 41 root.reset(JSONReader().JsonToValue("/* comment */\"sample string\"", | 42 root.reset(JSONReader().JsonToValue("/* comment */\"sample string\"", |
| 42 false, false)); | 43 false, false)); |
| 43 ASSERT_TRUE(root.get()); | 44 ASSERT_TRUE(root.get()); |
| 44 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); | 45 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
| 45 std::string value; | 46 std::string value; |
| 46 ASSERT_TRUE(root->GetAsString(&value)); | 47 EXPECT_TRUE(root->GetAsString(&value)); |
| 47 ASSERT_EQ("sample string", value); | 48 EXPECT_EQ("sample string", value); |
| 48 | 49 |
| 49 // Test number formats | 50 // Test number formats |
| 50 root.reset(JSONReader().JsonToValue("43", false, false)); | 51 root.reset(JSONReader().JsonToValue("43", false, false)); |
| 51 ASSERT_TRUE(root.get()); | 52 ASSERT_TRUE(root.get()); |
| 52 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 53 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); |
| 53 int int_val = 0; | 54 int int_val = 0; |
| 54 ASSERT_TRUE(root->GetAsInteger(&int_val)); | 55 EXPECT_TRUE(root->GetAsInteger(&int_val)); |
| 55 ASSERT_EQ(43, int_val); | 56 EXPECT_EQ(43, int_val); |
| 56 | 57 |
| 57 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. | 58 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. |
| 58 root.reset(JSONReader().JsonToValue("043", false, false)); | 59 root.reset(JSONReader().JsonToValue("043", false, false)); |
| 59 ASSERT_FALSE(root.get()); | 60 EXPECT_FALSE(root.get()); |
| 60 root.reset(JSONReader().JsonToValue("0x43", false, false)); | 61 root.reset(JSONReader().JsonToValue("0x43", false, false)); |
| 61 ASSERT_FALSE(root.get()); | 62 EXPECT_FALSE(root.get()); |
| 62 root.reset(JSONReader().JsonToValue("00", false, false)); | 63 root.reset(JSONReader().JsonToValue("00", false, false)); |
| 63 ASSERT_FALSE(root.get()); | 64 EXPECT_FALSE(root.get()); |
| 64 | 65 |
| 65 // Test 0 (which needs to be special cased because of the leading zero | 66 // Test 0 (which needs to be special cased because of the leading zero |
| 66 // clause). | 67 // clause). |
| 67 root.reset(JSONReader().JsonToValue("0", false, false)); | 68 root.reset(JSONReader().JsonToValue("0", false, false)); |
| 68 ASSERT_TRUE(root.get()); | 69 ASSERT_TRUE(root.get()); |
| 69 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 70 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); |
| 70 int_val = 1; | 71 int_val = 1; |
| 71 ASSERT_TRUE(root->GetAsInteger(&int_val)); | 72 EXPECT_TRUE(root->GetAsInteger(&int_val)); |
| 72 ASSERT_EQ(0, int_val); | 73 EXPECT_EQ(0, int_val); |
| 73 | 74 |
| 74 // Numbers that overflow ints should succeed, being internally promoted to | 75 // Numbers that overflow ints should succeed, being internally promoted to |
| 75 // storage as doubles | 76 // storage as doubles |
| 76 root.reset(JSONReader().JsonToValue("2147483648", false, false)); | 77 root.reset(JSONReader().JsonToValue("2147483648", false, false)); |
| 77 ASSERT_TRUE(root.get()); | 78 ASSERT_TRUE(root.get()); |
| 78 double double_val; | 79 double double_val; |
| 79 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 80 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 80 double_val = 0.0; | 81 double_val = 0.0; |
| 81 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 82 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 82 ASSERT_DOUBLE_EQ(2147483648.0, double_val); | 83 EXPECT_DOUBLE_EQ(2147483648.0, double_val); |
| 83 root.reset(JSONReader().JsonToValue("-2147483649", false, false)); | 84 root.reset(JSONReader().JsonToValue("-2147483649", false, false)); |
| 84 ASSERT_TRUE(root.get()); | 85 ASSERT_TRUE(root.get()); |
| 85 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 86 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 86 double_val = 0.0; | 87 double_val = 0.0; |
| 87 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 88 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 88 ASSERT_DOUBLE_EQ(-2147483649.0, double_val); | 89 EXPECT_DOUBLE_EQ(-2147483649.0, double_val); |
| 89 | 90 |
| 90 // Parse a double | 91 // Parse a double |
| 91 root.reset(JSONReader().JsonToValue("43.1", false, false)); | 92 root.reset(JSONReader().JsonToValue("43.1", false, false)); |
| 92 ASSERT_TRUE(root.get()); | 93 ASSERT_TRUE(root.get()); |
| 93 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 94 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 94 double_val = 0.0; | 95 double_val = 0.0; |
| 95 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 96 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 96 ASSERT_DOUBLE_EQ(43.1, double_val); | 97 EXPECT_DOUBLE_EQ(43.1, double_val); |
| 97 | 98 |
| 98 root.reset(JSONReader().JsonToValue("4.3e-1", false, false)); | 99 root.reset(JSONReader().JsonToValue("4.3e-1", false, false)); |
| 99 ASSERT_TRUE(root.get()); | 100 ASSERT_TRUE(root.get()); |
| 100 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 101 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 101 double_val = 0.0; | 102 double_val = 0.0; |
| 102 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 103 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 103 ASSERT_DOUBLE_EQ(.43, double_val); | 104 EXPECT_DOUBLE_EQ(.43, double_val); |
| 104 | 105 |
| 105 root.reset(JSONReader().JsonToValue("2.1e0", false, false)); | 106 root.reset(JSONReader().JsonToValue("2.1e0", false, false)); |
| 106 ASSERT_TRUE(root.get()); | 107 ASSERT_TRUE(root.get()); |
| 107 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 108 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 108 double_val = 0.0; | 109 double_val = 0.0; |
| 109 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 110 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 110 ASSERT_DOUBLE_EQ(2.1, double_val); | 111 EXPECT_DOUBLE_EQ(2.1, double_val); |
| 111 | 112 |
| 112 root.reset(JSONReader().JsonToValue("2.1e+0001", false, false)); | 113 root.reset(JSONReader().JsonToValue("2.1e+0001", false, false)); |
| 113 ASSERT_TRUE(root.get()); | 114 ASSERT_TRUE(root.get()); |
| 114 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 115 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 115 double_val = 0.0; | 116 double_val = 0.0; |
| 116 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 117 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 117 ASSERT_DOUBLE_EQ(21.0, double_val); | 118 EXPECT_DOUBLE_EQ(21.0, double_val); |
| 118 | 119 |
| 119 root.reset(JSONReader().JsonToValue("0.01", false, false)); | 120 root.reset(JSONReader().JsonToValue("0.01", false, false)); |
| 120 ASSERT_TRUE(root.get()); | 121 ASSERT_TRUE(root.get()); |
| 121 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 122 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 122 double_val = 0.0; | 123 double_val = 0.0; |
| 123 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 124 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 124 ASSERT_DOUBLE_EQ(0.01, double_val); | 125 EXPECT_DOUBLE_EQ(0.01, double_val); |
| 125 | 126 |
| 126 root.reset(JSONReader().JsonToValue("1.00", false, false)); | 127 root.reset(JSONReader().JsonToValue("1.00", false, false)); |
| 127 ASSERT_TRUE(root.get()); | 128 ASSERT_TRUE(root.get()); |
| 128 ASSERT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 129 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); |
| 129 double_val = 0.0; | 130 double_val = 0.0; |
| 130 ASSERT_TRUE(root->GetAsDouble(&double_val)); | 131 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
| 131 ASSERT_DOUBLE_EQ(1.0, double_val); | 132 EXPECT_DOUBLE_EQ(1.0, double_val); |
| 132 | 133 |
| 133 // Fractional parts must have a digit before and after the decimal point. | 134 // Fractional parts must have a digit before and after the decimal point. |
| 134 root.reset(JSONReader().JsonToValue("1.", false, false)); | 135 root.reset(JSONReader().JsonToValue("1.", false, false)); |
| 135 ASSERT_FALSE(root.get()); | 136 EXPECT_FALSE(root.get()); |
| 136 root.reset(JSONReader().JsonToValue(".1", false, false)); | 137 root.reset(JSONReader().JsonToValue(".1", false, false)); |
| 137 ASSERT_FALSE(root.get()); | 138 EXPECT_FALSE(root.get()); |
| 138 root.reset(JSONReader().JsonToValue("1.e10", false, false)); | 139 root.reset(JSONReader().JsonToValue("1.e10", false, false)); |
| 139 ASSERT_FALSE(root.get()); | 140 EXPECT_FALSE(root.get()); |
| 140 | 141 |
| 141 // Exponent must have a digit following the 'e'. | 142 // Exponent must have a digit following the 'e'. |
| 142 root.reset(JSONReader().JsonToValue("1e", false, false)); | 143 root.reset(JSONReader().JsonToValue("1e", false, false)); |
| 143 ASSERT_FALSE(root.get()); | 144 EXPECT_FALSE(root.get()); |
| 144 root.reset(JSONReader().JsonToValue("1E", false, false)); | 145 root.reset(JSONReader().JsonToValue("1E", false, false)); |
| 145 ASSERT_FALSE(root.get()); | 146 EXPECT_FALSE(root.get()); |
| 146 root.reset(JSONReader().JsonToValue("1e1.", false, false)); | 147 root.reset(JSONReader().JsonToValue("1e1.", false, false)); |
| 147 ASSERT_FALSE(root.get()); | 148 EXPECT_FALSE(root.get()); |
| 148 root.reset(JSONReader().JsonToValue("1e1.0", false, false)); | 149 root.reset(JSONReader().JsonToValue("1e1.0", false, false)); |
| 149 ASSERT_FALSE(root.get()); | 150 EXPECT_FALSE(root.get()); |
| 150 | 151 |
| 151 // INF/-INF/NaN are not valid | 152 // INF/-INF/NaN are not valid |
| 152 root.reset(JSONReader().JsonToValue("1e1000", false, false)); | 153 root.reset(JSONReader().JsonToValue("1e1000", false, false)); |
| 153 ASSERT_FALSE(root.get()); | 154 EXPECT_FALSE(root.get()); |
| 154 root.reset(JSONReader().JsonToValue("-1e1000", false, false)); | 155 root.reset(JSONReader().JsonToValue("-1e1000", false, false)); |
| 155 ASSERT_FALSE(root.get()); | 156 EXPECT_FALSE(root.get()); |
| 156 root.reset(JSONReader().JsonToValue("NaN", false, false)); | 157 root.reset(JSONReader().JsonToValue("NaN", false, false)); |
| 157 ASSERT_FALSE(root.get()); | 158 EXPECT_FALSE(root.get()); |
| 158 root.reset(JSONReader().JsonToValue("nan", false, false)); | 159 root.reset(JSONReader().JsonToValue("nan", false, false)); |
| 159 ASSERT_FALSE(root.get()); | 160 EXPECT_FALSE(root.get()); |
| 160 root.reset(JSONReader().JsonToValue("inf", false, false)); | 161 root.reset(JSONReader().JsonToValue("inf", false, false)); |
| 161 ASSERT_FALSE(root.get()); | 162 EXPECT_FALSE(root.get()); |
| 162 | 163 |
| 163 // Invalid number formats | 164 // Invalid number formats |
| 164 root.reset(JSONReader().JsonToValue("4.3.1", false, false)); | 165 root.reset(JSONReader().JsonToValue("4.3.1", false, false)); |
| 165 ASSERT_FALSE(root.get()); | 166 EXPECT_FALSE(root.get()); |
| 166 root.reset(JSONReader().JsonToValue("4e3.1", false, false)); | 167 root.reset(JSONReader().JsonToValue("4e3.1", false, false)); |
| 167 ASSERT_FALSE(root.get()); | 168 EXPECT_FALSE(root.get()); |
| 168 | 169 |
| 169 // Test string parser | 170 // Test string parser |
| 170 root.reset(JSONReader().JsonToValue("\"hello world\"", false, false)); | 171 root.reset(JSONReader().JsonToValue("\"hello world\"", false, false)); |
| 171 ASSERT_TRUE(root.get()); | 172 ASSERT_TRUE(root.get()); |
| 172 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); | 173 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
| 173 std::string str_val; | 174 std::string str_val; |
| 174 ASSERT_TRUE(root->GetAsString(&str_val)); | 175 EXPECT_TRUE(root->GetAsString(&str_val)); |
| 175 ASSERT_EQ("hello world", str_val); | 176 EXPECT_EQ("hello world", str_val); |
| 176 | 177 |
| 177 // Empty string | 178 // Empty string |
| 178 root.reset(JSONReader().JsonToValue("\"\"", false, false)); | 179 root.reset(JSONReader().JsonToValue("\"\"", false, false)); |
| 179 ASSERT_TRUE(root.get()); | 180 ASSERT_TRUE(root.get()); |
| 180 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); | 181 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
| 181 str_val.clear(); | 182 str_val.clear(); |
| 182 ASSERT_TRUE(root->GetAsString(&str_val)); | 183 EXPECT_TRUE(root->GetAsString(&str_val)); |
| 183 ASSERT_EQ("", str_val); | 184 EXPECT_EQ("", str_val); |
| 184 | 185 |
| 185 // Test basic string escapes | 186 // Test basic string escapes |
| 186 root.reset(JSONReader().JsonToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\"", | 187 root.reset(JSONReader().JsonToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\"", |
| 187 false, false)); | 188 false, false)); |
| 188 ASSERT_TRUE(root.get()); | 189 ASSERT_TRUE(root.get()); |
| 189 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); | 190 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
| 190 str_val.clear(); | 191 str_val.clear(); |
| 191 ASSERT_TRUE(root->GetAsString(&str_val)); | 192 EXPECT_TRUE(root->GetAsString(&str_val)); |
| 192 ASSERT_EQ(" \"\\/\b\f\n\r\t\v", str_val); | 193 EXPECT_EQ(" \"\\/\b\f\n\r\t\v", str_val); |
| 193 | 194 |
| 194 // Test hex and unicode escapes including the null character. | 195 // Test hex and unicode escapes including the null character. |
| 195 root.reset(JSONReader().JsonToValue("\"\\x41\\x00\\u1234\"", false, | 196 root.reset(JSONReader().JsonToValue("\"\\x41\\x00\\u1234\"", false, |
| 196 false)); | 197 false)); |
| 197 ASSERT_TRUE(root.get()); | 198 ASSERT_TRUE(root.get()); |
| 198 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); | 199 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
| 199 str_val.clear(); | 200 str_val.clear(); |
| 200 ASSERT_TRUE(root->GetAsString(&str_val)); | 201 EXPECT_TRUE(root->GetAsString(&str_val)); |
| 201 ASSERT_EQ(std::wstring(L"A\0\x1234", 3), UTF8ToWide(str_val)); | 202 EXPECT_EQ(std::wstring(L"A\0\x1234", 3), UTF8ToWide(str_val)); |
| 202 | 203 |
| 203 // Test invalid strings | 204 // Test invalid strings |
| 204 root.reset(JSONReader().JsonToValue("\"no closing quote", false, false)); | 205 root.reset(JSONReader().JsonToValue("\"no closing quote", false, false)); |
| 205 ASSERT_FALSE(root.get()); | 206 EXPECT_FALSE(root.get()); |
| 206 root.reset(JSONReader().JsonToValue("\"\\z invalid escape char\"", false, | 207 root.reset(JSONReader().JsonToValue("\"\\z invalid escape char\"", false, |
| 207 false)); | 208 false)); |
| 208 ASSERT_FALSE(root.get()); | 209 EXPECT_FALSE(root.get()); |
| 209 root.reset(JSONReader().JsonToValue("\"\\xAQ invalid hex code\"", false, | 210 root.reset(JSONReader().JsonToValue("\"\\xAQ invalid hex code\"", false, |
| 210 false)); | 211 false)); |
| 211 ASSERT_FALSE(root.get()); | 212 EXPECT_FALSE(root.get()); |
| 212 root.reset(JSONReader().JsonToValue("not enough hex chars\\x1\"", false, | 213 root.reset(JSONReader().JsonToValue("not enough hex chars\\x1\"", false, |
| 213 false)); | 214 false)); |
| 214 ASSERT_FALSE(root.get()); | 215 EXPECT_FALSE(root.get()); |
| 215 root.reset(JSONReader().JsonToValue("\"not enough escape chars\\u123\"", | 216 root.reset(JSONReader().JsonToValue("\"not enough escape chars\\u123\"", |
| 216 false, false)); | 217 false, false)); |
| 217 ASSERT_FALSE(root.get()); | 218 EXPECT_FALSE(root.get()); |
| 218 root.reset(JSONReader().JsonToValue("\"extra backslash at end of input\\\"", | 219 root.reset(JSONReader().JsonToValue("\"extra backslash at end of input\\\"", |
| 219 false, false)); | 220 false, false)); |
| 220 ASSERT_FALSE(root.get()); | 221 EXPECT_FALSE(root.get()); |
| 221 | 222 |
| 222 // Basic array | 223 // Basic array |
| 223 root.reset(JSONReader::Read("[true, false, null]", false)); | 224 root.reset(JSONReader::Read("[true, false, null]", false)); |
| 224 ASSERT_TRUE(root.get()); | 225 ASSERT_TRUE(root.get()); |
| 225 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); | 226 EXPECT_TRUE(root->IsType(Value::TYPE_LIST)); |
| 226 ListValue* list = static_cast<ListValue*>(root.get()); | 227 ListValue* list = static_cast<ListValue*>(root.get()); |
| 227 ASSERT_EQ(3U, list->GetSize()); | 228 EXPECT_EQ(3U, list->GetSize()); |
| 228 | 229 |
| 229 // Test with trailing comma. Should be parsed the same as above. | 230 // Test with trailing comma. Should be parsed the same as above. |
| 230 scoped_ptr<Value> root2; | 231 scoped_ptr<Value> root2; |
| 231 root2.reset(JSONReader::Read("[true, false, null, ]", true)); | 232 root2.reset(JSONReader::Read("[true, false, null, ]", true)); |
| 232 EXPECT_TRUE(root->Equals(root2.get())); | 233 EXPECT_TRUE(root->Equals(root2.get())); |
| 233 | 234 |
| 234 // Empty array | 235 // Empty array |
| 235 root.reset(JSONReader::Read("[]", false)); | 236 root.reset(JSONReader::Read("[]", false)); |
| 236 ASSERT_TRUE(root.get()); | 237 ASSERT_TRUE(root.get()); |
| 237 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); | 238 EXPECT_TRUE(root->IsType(Value::TYPE_LIST)); |
| 238 list = static_cast<ListValue*>(root.get()); | 239 list = static_cast<ListValue*>(root.get()); |
| 239 ASSERT_EQ(0U, list->GetSize()); | 240 EXPECT_EQ(0U, list->GetSize()); |
| 240 | 241 |
| 241 // Nested arrays | 242 // Nested arrays |
| 242 root.reset(JSONReader::Read("[[true], [], [false, [], [null]], null]", | 243 root.reset(JSONReader::Read("[[true], [], [false, [], [null]], null]", |
| 243 false)); | 244 false)); |
| 244 ASSERT_TRUE(root.get()); | 245 ASSERT_TRUE(root.get()); |
| 245 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); | 246 EXPECT_TRUE(root->IsType(Value::TYPE_LIST)); |
| 246 list = static_cast<ListValue*>(root.get()); | 247 list = static_cast<ListValue*>(root.get()); |
| 247 ASSERT_EQ(4U, list->GetSize()); | 248 EXPECT_EQ(4U, list->GetSize()); |
| 248 | 249 |
| 249 // Lots of trailing commas. | 250 // Lots of trailing commas. |
| 250 root2.reset(JSONReader::Read("[[true], [], [false, [], [null, ] , ], null,]", | 251 root2.reset(JSONReader::Read("[[true], [], [false, [], [null, ] , ], null,]", |
| 251 true)); | 252 true)); |
| 252 EXPECT_TRUE(root->Equals(root2.get())); | 253 EXPECT_TRUE(root->Equals(root2.get())); |
| 253 | 254 |
| 254 // Invalid, missing close brace. | 255 // Invalid, missing close brace. |
| 255 root.reset(JSONReader::Read("[[true], [], [false, [], [null]], null", false)); | 256 root.reset(JSONReader::Read("[[true], [], [false, [], [null]], null", false)); |
| 256 ASSERT_FALSE(root.get()); | 257 EXPECT_FALSE(root.get()); |
| 257 | 258 |
| 258 // Invalid, too many commas | 259 // Invalid, too many commas |
| 259 root.reset(JSONReader::Read("[true,, null]", false)); | 260 root.reset(JSONReader::Read("[true,, null]", false)); |
| 260 ASSERT_FALSE(root.get()); | 261 EXPECT_FALSE(root.get()); |
| 261 root.reset(JSONReader::Read("[true,, null]", true)); | 262 root.reset(JSONReader::Read("[true,, null]", true)); |
| 262 ASSERT_FALSE(root.get()); | 263 EXPECT_FALSE(root.get()); |
| 263 | 264 |
| 264 // Invalid, no commas | 265 // Invalid, no commas |
| 265 root.reset(JSONReader::Read("[true null]", false)); | 266 root.reset(JSONReader::Read("[true null]", false)); |
| 266 ASSERT_FALSE(root.get()); | 267 EXPECT_FALSE(root.get()); |
| 267 | 268 |
| 268 // Invalid, trailing comma | 269 // Invalid, trailing comma |
| 269 root.reset(JSONReader::Read("[true,]", false)); | 270 root.reset(JSONReader::Read("[true,]", false)); |
| 270 ASSERT_FALSE(root.get()); | 271 EXPECT_FALSE(root.get()); |
| 271 | 272 |
| 272 // Valid if we set |allow_trailing_comma| to true. | 273 // Valid if we set |allow_trailing_comma| to true. |
| 273 root.reset(JSONReader::Read("[true,]", true)); | 274 root.reset(JSONReader::Read("[true,]", true)); |
| 274 ASSERT_TRUE(root.get()); | 275 ASSERT_TRUE(root.get()); |
| 275 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); | 276 EXPECT_TRUE(root->IsType(Value::TYPE_LIST)); |
| 276 list = static_cast<ListValue*>(root.get()); | 277 list = static_cast<ListValue*>(root.get()); |
| 277 EXPECT_EQ(1U, list->GetSize()); | 278 EXPECT_EQ(1U, list->GetSize()); |
| 278 Value* tmp_value = NULL; | 279 Value* tmp_value = NULL; |
| 279 ASSERT_TRUE(list->Get(0, &tmp_value)); | 280 ASSERT_TRUE(list->Get(0, &tmp_value)); |
| 280 EXPECT_TRUE(tmp_value->IsType(Value::TYPE_BOOLEAN)); | 281 EXPECT_TRUE(tmp_value->IsType(Value::TYPE_BOOLEAN)); |
| 281 bool bool_value = false; | 282 bool bool_value = false; |
| 282 ASSERT_TRUE(tmp_value->GetAsBoolean(&bool_value)); | 283 EXPECT_TRUE(tmp_value->GetAsBoolean(&bool_value)); |
| 283 EXPECT_TRUE(bool_value); | 284 EXPECT_TRUE(bool_value); |
| 284 | 285 |
| 285 // Don't allow empty elements, even if |allow_trailing_comma| is | 286 // Don't allow empty elements, even if |allow_trailing_comma| is |
| 286 // true. | 287 // true. |
| 287 root.reset(JSONReader::Read("[,]", true)); | 288 root.reset(JSONReader::Read("[,]", true)); |
| 288 EXPECT_FALSE(root.get()); | 289 EXPECT_FALSE(root.get()); |
| 289 root.reset(JSONReader::Read("[true,,]", true)); | 290 root.reset(JSONReader::Read("[true,,]", true)); |
| 290 EXPECT_FALSE(root.get()); | 291 EXPECT_FALSE(root.get()); |
| 291 root.reset(JSONReader::Read("[,true,]", true)); | 292 root.reset(JSONReader::Read("[,true,]", true)); |
| 292 EXPECT_FALSE(root.get()); | 293 EXPECT_FALSE(root.get()); |
| 293 root.reset(JSONReader::Read("[true,,false]", true)); | 294 root.reset(JSONReader::Read("[true,,false]", true)); |
| 294 EXPECT_FALSE(root.get()); | 295 EXPECT_FALSE(root.get()); |
| 295 | 296 |
| 296 // Test objects | 297 // Test objects |
| 297 root.reset(JSONReader::Read("{}", false)); | 298 root.reset(JSONReader::Read("{}", false)); |
| 298 ASSERT_TRUE(root.get()); | 299 ASSERT_TRUE(root.get()); |
| 299 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 300 EXPECT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 300 | 301 |
| 301 root.reset(JSONReader::Read( | 302 root.reset(JSONReader::Read( |
| 302 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\" }", false)); | 303 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\" }", false)); |
| 303 ASSERT_TRUE(root.get()); | 304 ASSERT_TRUE(root.get()); |
| 304 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 305 EXPECT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 305 DictionaryValue* dict_val = static_cast<DictionaryValue*>(root.get()); | 306 DictionaryValue* dict_val = static_cast<DictionaryValue*>(root.get()); |
| 306 double_val = 0.0; | 307 double_val = 0.0; |
| 307 ASSERT_TRUE(dict_val->GetDouble("number", &double_val)); | 308 EXPECT_TRUE(dict_val->GetDouble("number", &double_val)); |
| 308 ASSERT_DOUBLE_EQ(9.87654321, double_val); | 309 EXPECT_DOUBLE_EQ(9.87654321, double_val); |
| 309 Value* null_val = NULL; | 310 Value* null_val = NULL; |
| 310 ASSERT_TRUE(dict_val->Get("null", &null_val)); | 311 ASSERT_TRUE(dict_val->Get("null", &null_val)); |
| 311 ASSERT_TRUE(null_val->IsType(Value::TYPE_NULL)); | 312 EXPECT_TRUE(null_val->IsType(Value::TYPE_NULL)); |
| 312 str_val.clear(); | 313 str_val.clear(); |
| 313 ASSERT_TRUE(dict_val->GetString("S", &str_val)); | 314 EXPECT_TRUE(dict_val->GetString("S", &str_val)); |
| 314 ASSERT_EQ("str", str_val); | 315 EXPECT_EQ("str", str_val); |
| 315 | 316 |
| 316 root2.reset(JSONReader::Read( | 317 root2.reset(JSONReader::Read( |
| 317 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\", }", true)); | 318 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\", }", true)); |
| 318 ASSERT_TRUE(root2.get()); | 319 ASSERT_TRUE(root2.get()); |
| 319 EXPECT_TRUE(root->Equals(root2.get())); | 320 EXPECT_TRUE(root->Equals(root2.get())); |
| 320 | 321 |
| 321 // Test newline equivalence. | 322 // Test newline equivalence. |
| 322 root2.reset(JSONReader::Read( | 323 root2.reset(JSONReader::Read( |
| 323 "{\n" | 324 "{\n" |
| 324 " \"number\":9.87654321,\n" | 325 " \"number\":9.87654321,\n" |
| 325 " \"null\":null,\n" | 326 " \"null\":null,\n" |
| 326 " \"\\x53\":\"str\",\n" | 327 " \"\\x53\":\"str\",\n" |
| 327 "}\n", true)); | 328 "}\n", true)); |
| 328 ASSERT_TRUE(root2.get()); | 329 ASSERT_TRUE(root2.get()); |
| 329 EXPECT_TRUE(root->Equals(root2.get())); | 330 EXPECT_TRUE(root->Equals(root2.get())); |
| 330 | 331 |
| 331 root2.reset(JSONReader::Read( | 332 root2.reset(JSONReader::Read( |
| 332 "{\r\n" | 333 "{\r\n" |
| 333 " \"number\":9.87654321,\r\n" | 334 " \"number\":9.87654321,\r\n" |
| 334 " \"null\":null,\r\n" | 335 " \"null\":null,\r\n" |
| 335 " \"\\x53\":\"str\",\r\n" | 336 " \"\\x53\":\"str\",\r\n" |
| 336 "}\r\n", true)); | 337 "}\r\n", true)); |
| 337 ASSERT_TRUE(root2.get()); | 338 ASSERT_TRUE(root2.get()); |
| 338 EXPECT_TRUE(root->Equals(root2.get())); | 339 EXPECT_TRUE(root->Equals(root2.get())); |
| 339 | 340 |
| 340 // Test nesting | 341 // Test nesting |
| 341 root.reset(JSONReader::Read( | 342 root.reset(JSONReader::Read( |
| 342 "{\"inner\":{\"array\":[true]},\"false\":false,\"d\":{}}", false)); | 343 "{\"inner\":{\"array\":[true]},\"false\":false,\"d\":{}}", false)); |
| 343 ASSERT_TRUE(root.get()); | 344 ASSERT_TRUE(root.get()); |
| 344 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 345 EXPECT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 345 dict_val = static_cast<DictionaryValue*>(root.get()); | 346 dict_val = static_cast<DictionaryValue*>(root.get()); |
| 346 DictionaryValue* inner_dict = NULL; | 347 DictionaryValue* inner_dict = NULL; |
| 347 ASSERT_TRUE(dict_val->GetDictionary("inner", &inner_dict)); | 348 ASSERT_TRUE(dict_val->GetDictionary("inner", &inner_dict)); |
| 348 ListValue* inner_array = NULL; | 349 ListValue* inner_array = NULL; |
| 349 ASSERT_TRUE(inner_dict->GetList("array", &inner_array)); | 350 ASSERT_TRUE(inner_dict->GetList("array", &inner_array)); |
| 350 ASSERT_EQ(1U, inner_array->GetSize()); | 351 EXPECT_EQ(1U, inner_array->GetSize()); |
| 351 bool_value = true; | 352 bool_value = true; |
| 352 ASSERT_TRUE(dict_val->GetBoolean("false", &bool_value)); | 353 EXPECT_TRUE(dict_val->GetBoolean("false", &bool_value)); |
| 353 ASSERT_FALSE(bool_value); | 354 EXPECT_FALSE(bool_value); |
| 354 inner_dict = NULL; | 355 inner_dict = NULL; |
| 355 ASSERT_TRUE(dict_val->GetDictionary("d", &inner_dict)); | 356 EXPECT_TRUE(dict_val->GetDictionary("d", &inner_dict)); |
| 356 | 357 |
| 357 root2.reset(JSONReader::Read( | 358 root2.reset(JSONReader::Read( |
| 358 "{\"inner\": {\"array\":[true] , },\"false\":false,\"d\":{},}", true)); | 359 "{\"inner\": {\"array\":[true] , },\"false\":false,\"d\":{},}", true)); |
| 359 EXPECT_TRUE(root->Equals(root2.get())); | 360 EXPECT_TRUE(root->Equals(root2.get())); |
| 360 | 361 |
| 361 // Test keys with periods | 362 // Test keys with periods |
| 362 root.reset(JSONReader::Read( | 363 root.reset(JSONReader::Read( |
| 363 "{\"a.b\":3,\"c\":2,\"d.e.f\":{\"g.h.i.j\":1}}", false)); | 364 "{\"a.b\":3,\"c\":2,\"d.e.f\":{\"g.h.i.j\":1}}", false)); |
| 364 ASSERT_TRUE(root.get()); | 365 ASSERT_TRUE(root.get()); |
| 365 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 366 EXPECT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 366 dict_val = static_cast<DictionaryValue*>(root.get()); | 367 dict_val = static_cast<DictionaryValue*>(root.get()); |
| 367 int integer_value = 0; | 368 int integer_value = 0; |
| 368 EXPECT_TRUE(dict_val->GetIntegerWithoutPathExpansion("a.b", &integer_value)); | 369 EXPECT_TRUE(dict_val->GetIntegerWithoutPathExpansion("a.b", &integer_value)); |
| 369 EXPECT_EQ(3, integer_value); | 370 EXPECT_EQ(3, integer_value); |
| 370 EXPECT_TRUE(dict_val->GetIntegerWithoutPathExpansion("c", &integer_value)); | 371 EXPECT_TRUE(dict_val->GetIntegerWithoutPathExpansion("c", &integer_value)); |
| 371 EXPECT_EQ(2, integer_value); | 372 EXPECT_EQ(2, integer_value); |
| 372 inner_dict = NULL; | 373 inner_dict = NULL; |
| 373 ASSERT_TRUE(dict_val->GetDictionaryWithoutPathExpansion("d.e.f", | 374 ASSERT_TRUE(dict_val->GetDictionaryWithoutPathExpansion("d.e.f", |
| 374 &inner_dict)); | 375 &inner_dict)); |
| 375 ASSERT_EQ(1U, inner_dict->size()); | 376 EXPECT_EQ(1U, inner_dict->size()); |
| 376 EXPECT_TRUE(inner_dict->GetIntegerWithoutPathExpansion("g.h.i.j", | 377 EXPECT_TRUE(inner_dict->GetIntegerWithoutPathExpansion("g.h.i.j", |
| 377 &integer_value)); | 378 &integer_value)); |
| 378 EXPECT_EQ(1, integer_value); | 379 EXPECT_EQ(1, integer_value); |
| 379 | 380 |
| 380 root.reset(JSONReader::Read("{\"a\":{\"b\":2},\"a.b\":1}", false)); | 381 root.reset(JSONReader::Read("{\"a\":{\"b\":2},\"a.b\":1}", false)); |
| 381 ASSERT_TRUE(root.get()); | 382 ASSERT_TRUE(root.get()); |
| 382 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 383 EXPECT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 383 dict_val = static_cast<DictionaryValue*>(root.get()); | 384 dict_val = static_cast<DictionaryValue*>(root.get()); |
| 384 EXPECT_TRUE(dict_val->GetInteger("a.b", &integer_value)); | 385 EXPECT_TRUE(dict_val->GetInteger("a.b", &integer_value)); |
| 385 EXPECT_EQ(2, integer_value); | 386 EXPECT_EQ(2, integer_value); |
| 386 EXPECT_TRUE(dict_val->GetIntegerWithoutPathExpansion("a.b", &integer_value)); | 387 EXPECT_TRUE(dict_val->GetIntegerWithoutPathExpansion("a.b", &integer_value)); |
| 387 EXPECT_EQ(1, integer_value); | 388 EXPECT_EQ(1, integer_value); |
| 388 | 389 |
| 389 // Invalid, no closing brace | 390 // Invalid, no closing brace |
| 390 root.reset(JSONReader::Read("{\"a\": true", false)); | 391 root.reset(JSONReader::Read("{\"a\": true", false)); |
| 391 ASSERT_FALSE(root.get()); | 392 EXPECT_FALSE(root.get()); |
| 392 | 393 |
| 393 // Invalid, keys must be quoted | 394 // Invalid, keys must be quoted |
| 394 root.reset(JSONReader::Read("{foo:true}", false)); | 395 root.reset(JSONReader::Read("{foo:true}", false)); |
| 395 ASSERT_FALSE(root.get()); | 396 EXPECT_FALSE(root.get()); |
| 396 | 397 |
| 397 // Invalid, trailing comma | 398 // Invalid, trailing comma |
| 398 root.reset(JSONReader::Read("{\"a\":true,}", false)); | 399 root.reset(JSONReader::Read("{\"a\":true,}", false)); |
| 399 ASSERT_FALSE(root.get()); | 400 EXPECT_FALSE(root.get()); |
| 400 | 401 |
| 401 // Invalid, too many commas | 402 // Invalid, too many commas |
| 402 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", false)); | 403 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", false)); |
| 403 ASSERT_FALSE(root.get()); | 404 EXPECT_FALSE(root.get()); |
| 404 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", true)); | 405 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", true)); |
| 405 ASSERT_FALSE(root.get()); | 406 EXPECT_FALSE(root.get()); |
| 406 | 407 |
| 407 // Invalid, no separator | 408 // Invalid, no separator |
| 408 root.reset(JSONReader::Read("{\"a\" \"b\"}", false)); | 409 root.reset(JSONReader::Read("{\"a\" \"b\"}", false)); |
| 409 ASSERT_FALSE(root.get()); | 410 EXPECT_FALSE(root.get()); |
| 410 | 411 |
| 411 // Invalid, lone comma. | 412 // Invalid, lone comma. |
| 412 root.reset(JSONReader::Read("{,}", false)); | 413 root.reset(JSONReader::Read("{,}", false)); |
| 413 ASSERT_FALSE(root.get()); | 414 EXPECT_FALSE(root.get()); |
| 414 root.reset(JSONReader::Read("{,}", true)); | 415 root.reset(JSONReader::Read("{,}", true)); |
| 415 ASSERT_FALSE(root.get()); | 416 EXPECT_FALSE(root.get()); |
| 416 root.reset(JSONReader::Read("{\"a\":true,,}", true)); | 417 root.reset(JSONReader::Read("{\"a\":true,,}", true)); |
| 417 ASSERT_FALSE(root.get()); | 418 EXPECT_FALSE(root.get()); |
| 418 root.reset(JSONReader::Read("{,\"a\":true}", true)); | 419 root.reset(JSONReader::Read("{,\"a\":true}", true)); |
| 419 ASSERT_FALSE(root.get()); | 420 EXPECT_FALSE(root.get()); |
| 420 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", true)); | 421 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", true)); |
| 421 ASSERT_FALSE(root.get()); | 422 EXPECT_FALSE(root.get()); |
| 422 | 423 |
| 423 // Test stack overflow | 424 // Test stack overflow |
| 424 std::string evil(1000000, '['); | 425 std::string evil(1000000, '['); |
| 425 evil.append(std::string(1000000, ']')); | 426 evil.append(std::string(1000000, ']')); |
| 426 root.reset(JSONReader::Read(evil, false)); | 427 root.reset(JSONReader::Read(evil, false)); |
| 427 ASSERT_FALSE(root.get()); | 428 EXPECT_FALSE(root.get()); |
| 428 | 429 |
| 429 // A few thousand adjacent lists is fine. | 430 // A few thousand adjacent lists is fine. |
| 430 std::string not_evil("["); | 431 std::string not_evil("["); |
| 431 not_evil.reserve(15010); | 432 not_evil.reserve(15010); |
| 432 for (int i = 0; i < 5000; ++i) { | 433 for (int i = 0; i < 5000; ++i) { |
| 433 not_evil.append("[],"); | 434 not_evil.append("[],"); |
| 434 } | 435 } |
| 435 not_evil.append("[]]"); | 436 not_evil.append("[]]"); |
| 436 root.reset(JSONReader::Read(not_evil, false)); | 437 root.reset(JSONReader::Read(not_evil, false)); |
| 437 ASSERT_TRUE(root.get()); | 438 ASSERT_TRUE(root.get()); |
| 438 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); | 439 EXPECT_TRUE(root->IsType(Value::TYPE_LIST)); |
| 439 list = static_cast<ListValue*>(root.get()); | 440 list = static_cast<ListValue*>(root.get()); |
| 440 ASSERT_EQ(5001U, list->GetSize()); | 441 EXPECT_EQ(5001U, list->GetSize()); |
| 441 | 442 |
| 442 // Test utf8 encoded input | 443 // Test utf8 encoded input |
| 443 root.reset(JSONReader().JsonToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\"", | 444 root.reset(JSONReader().JsonToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\"", |
| 444 false, false)); | 445 false, false)); |
| 445 ASSERT_TRUE(root.get()); | 446 ASSERT_TRUE(root.get()); |
| 446 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); | 447 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); |
| 447 str_val.clear(); | 448 str_val.clear(); |
| 448 ASSERT_TRUE(root->GetAsString(&str_val)); | 449 EXPECT_TRUE(root->GetAsString(&str_val)); |
| 449 ASSERT_EQ(L"\x7f51\x9875", UTF8ToWide(str_val)); | 450 EXPECT_EQ(L"\x7f51\x9875", UTF8ToWide(str_val)); |
| 450 | 451 |
| 451 // Test invalid utf8 encoded input | 452 // Test invalid utf8 encoded input |
| 452 root.reset(JSONReader().JsonToValue("\"345\xb0\xa1\xb0\xa2\"", | 453 root.reset(JSONReader().JsonToValue("\"345\xb0\xa1\xb0\xa2\"", |
| 453 false, false)); | 454 false, false)); |
| 454 ASSERT_FALSE(root.get()); | 455 EXPECT_FALSE(root.get()); |
| 455 root.reset(JSONReader().JsonToValue("\"123\xc0\x81\"", | 456 root.reset(JSONReader().JsonToValue("\"123\xc0\x81\"", |
| 456 false, false)); | 457 false, false)); |
| 457 ASSERT_FALSE(root.get()); | 458 EXPECT_FALSE(root.get()); |
| 458 | 459 |
| 459 // Test invalid root objects. | 460 // Test invalid root objects. |
| 460 root.reset(JSONReader::Read("null", false)); | 461 root.reset(JSONReader::Read("null", false)); |
| 461 ASSERT_FALSE(root.get()); | 462 EXPECT_FALSE(root.get()); |
| 462 root.reset(JSONReader::Read("true", false)); | 463 root.reset(JSONReader::Read("true", false)); |
| 463 ASSERT_FALSE(root.get()); | 464 EXPECT_FALSE(root.get()); |
| 464 root.reset(JSONReader::Read("10", false)); | 465 root.reset(JSONReader::Read("10", false)); |
| 465 ASSERT_FALSE(root.get()); | 466 EXPECT_FALSE(root.get()); |
| 466 root.reset(JSONReader::Read("\"root\"", false)); | 467 root.reset(JSONReader::Read("\"root\"", false)); |
| 467 ASSERT_FALSE(root.get()); | 468 EXPECT_FALSE(root.get()); |
| 468 } | 469 } |
| 469 | 470 |
| 470 TEST(JSONReaderTest, ErrorMessages) { | 471 TEST(JSONReaderTest, ErrorMessages) { |
| 471 // Error strings should not be modified in case of success. | 472 // Error strings should not be modified in case of success. |
| 472 std::string error_message; | 473 std::string error_message; |
| 473 int error_code = 0; | 474 int error_code = 0; |
| 474 scoped_ptr<Value> root; | 475 scoped_ptr<Value> root; |
| 475 root.reset(JSONReader::ReadAndReturnError("[42]", false, | 476 root.reset(JSONReader::ReadAndReturnError("[42]", false, |
| 476 &error_code, &error_message)); | 477 &error_code, &error_message)); |
| 477 EXPECT_TRUE(error_message.empty()); | 478 EXPECT_TRUE(error_message.empty()); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 | 558 |
| 558 root.reset(JSONReader::ReadAndReturnError("[\"xxx\\q\"]", false, | 559 root.reset(JSONReader::ReadAndReturnError("[\"xxx\\q\"]", false, |
| 559 &error_code, &error_message)); | 560 &error_code, &error_message)); |
| 560 EXPECT_FALSE(root.get()); | 561 EXPECT_FALSE(root.get()); |
| 561 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape), | 562 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape), |
| 562 error_message); | 563 error_message); |
| 563 EXPECT_EQ(JSONReader::JSON_INVALID_ESCAPE, error_code); | 564 EXPECT_EQ(JSONReader::JSON_INVALID_ESCAPE, error_code); |
| 564 } | 565 } |
| 565 | 566 |
| 566 } // namespace base | 567 } // namespace base |
| OLD | NEW |