OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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" | 5 #include "base/json/json_reader.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
11 #include "base/base_paths.h" | 11 #include "base/base_paths.h" |
12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/macros.h" | 14 #include "base/macros.h" |
15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
16 #include "base/strings/string_piece.h" | 16 #include "base/strings/string_piece.h" |
17 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
18 #include "base/values.h" | 18 #include "base/values.h" |
19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
21 | 21 |
22 namespace base { | 22 namespace base { |
23 | 23 |
24 TEST(JSONReaderTest, Reading) { | 24 TEST(JSONReaderTest, Reading) { |
25 { | 25 { |
26 // some whitespace checking | 26 // some whitespace checking |
27 std::unique_ptr<Value> root = JSONReader().ReadToValue(" null "); | 27 std::unique_ptr<Value> root = JSONReader().ReadToValue(" null "); |
28 ASSERT_TRUE(root); | 28 ASSERT_TRUE(root); |
29 EXPECT_TRUE(root->IsType(Value::TYPE_NULL)); | 29 EXPECT_TRUE(root->IsType(Value::Type::NONE)); |
30 } | 30 } |
31 | 31 |
32 { | 32 { |
33 // Invalid JSON string | 33 // Invalid JSON string |
34 EXPECT_FALSE(JSONReader().ReadToValue("nu")); | 34 EXPECT_FALSE(JSONReader().ReadToValue("nu")); |
35 } | 35 } |
36 | 36 |
37 { | 37 { |
38 // Simple bool | 38 // Simple bool |
39 std::unique_ptr<Value> root = JSONReader().ReadToValue("true "); | 39 std::unique_ptr<Value> root = JSONReader().ReadToValue("true "); |
40 ASSERT_TRUE(root); | 40 ASSERT_TRUE(root); |
41 EXPECT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); | 41 EXPECT_TRUE(root->IsType(Value::Type::BOOLEAN)); |
42 } | 42 } |
43 | 43 |
44 { | 44 { |
45 // Embedded comment | 45 // Embedded comment |
46 std::unique_ptr<Value> root = JSONReader().ReadToValue("/* comment */null"); | 46 std::unique_ptr<Value> root = JSONReader().ReadToValue("/* comment */null"); |
47 ASSERT_TRUE(root); | 47 ASSERT_TRUE(root); |
48 EXPECT_TRUE(root->IsType(Value::TYPE_NULL)); | 48 EXPECT_TRUE(root->IsType(Value::Type::NONE)); |
49 root = JSONReader().ReadToValue("40 /* comment */"); | 49 root = JSONReader().ReadToValue("40 /* comment */"); |
50 ASSERT_TRUE(root); | 50 ASSERT_TRUE(root); |
51 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 51 EXPECT_TRUE(root->IsType(Value::Type::INTEGER)); |
52 root = JSONReader().ReadToValue("true // comment"); | 52 root = JSONReader().ReadToValue("true // comment"); |
53 ASSERT_TRUE(root); | 53 ASSERT_TRUE(root); |
54 EXPECT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); | 54 EXPECT_TRUE(root->IsType(Value::Type::BOOLEAN)); |
55 root = JSONReader().ReadToValue("/* comment */\"sample string\""); | 55 root = JSONReader().ReadToValue("/* comment */\"sample string\""); |
56 ASSERT_TRUE(root); | 56 ASSERT_TRUE(root); |
57 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 57 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
58 std::string value; | 58 std::string value; |
59 EXPECT_TRUE(root->GetAsString(&value)); | 59 EXPECT_TRUE(root->GetAsString(&value)); |
60 EXPECT_EQ("sample string", value); | 60 EXPECT_EQ("sample string", value); |
61 std::unique_ptr<ListValue> list = ListValue::From( | 61 std::unique_ptr<ListValue> list = ListValue::From( |
62 JSONReader().ReadToValue("[1, /* comment, 2 ] */ \n 3]")); | 62 JSONReader().ReadToValue("[1, /* comment, 2 ] */ \n 3]")); |
63 ASSERT_TRUE(list); | 63 ASSERT_TRUE(list); |
64 EXPECT_EQ(2u, list->GetSize()); | 64 EXPECT_EQ(2u, list->GetSize()); |
65 int int_val = 0; | 65 int int_val = 0; |
66 EXPECT_TRUE(list->GetInteger(0, &int_val)); | 66 EXPECT_TRUE(list->GetInteger(0, &int_val)); |
67 EXPECT_EQ(1, int_val); | 67 EXPECT_EQ(1, int_val); |
68 EXPECT_TRUE(list->GetInteger(1, &int_val)); | 68 EXPECT_TRUE(list->GetInteger(1, &int_val)); |
69 EXPECT_EQ(3, int_val); | 69 EXPECT_EQ(3, int_val); |
70 list = ListValue::From(JSONReader().ReadToValue("[1, /*a*/2, 3]")); | 70 list = ListValue::From(JSONReader().ReadToValue("[1, /*a*/2, 3]")); |
71 ASSERT_TRUE(list); | 71 ASSERT_TRUE(list); |
72 EXPECT_EQ(3u, list->GetSize()); | 72 EXPECT_EQ(3u, list->GetSize()); |
73 root = JSONReader().ReadToValue("/* comment **/42"); | 73 root = JSONReader().ReadToValue("/* comment **/42"); |
74 ASSERT_TRUE(root); | 74 ASSERT_TRUE(root); |
75 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 75 EXPECT_TRUE(root->IsType(Value::Type::INTEGER)); |
76 EXPECT_TRUE(root->GetAsInteger(&int_val)); | 76 EXPECT_TRUE(root->GetAsInteger(&int_val)); |
77 EXPECT_EQ(42, int_val); | 77 EXPECT_EQ(42, int_val); |
78 root = JSONReader().ReadToValue( | 78 root = JSONReader().ReadToValue( |
79 "/* comment **/\n" | 79 "/* comment **/\n" |
80 "// */ 43\n" | 80 "// */ 43\n" |
81 "44"); | 81 "44"); |
82 ASSERT_TRUE(root); | 82 ASSERT_TRUE(root); |
83 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 83 EXPECT_TRUE(root->IsType(Value::Type::INTEGER)); |
84 EXPECT_TRUE(root->GetAsInteger(&int_val)); | 84 EXPECT_TRUE(root->GetAsInteger(&int_val)); |
85 EXPECT_EQ(44, int_val); | 85 EXPECT_EQ(44, int_val); |
86 } | 86 } |
87 | 87 |
88 { | 88 { |
89 // Test number formats | 89 // Test number formats |
90 std::unique_ptr<Value> root = JSONReader().ReadToValue("43"); | 90 std::unique_ptr<Value> root = JSONReader().ReadToValue("43"); |
91 ASSERT_TRUE(root); | 91 ASSERT_TRUE(root); |
92 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 92 EXPECT_TRUE(root->IsType(Value::Type::INTEGER)); |
93 int int_val = 0; | 93 int int_val = 0; |
94 EXPECT_TRUE(root->GetAsInteger(&int_val)); | 94 EXPECT_TRUE(root->GetAsInteger(&int_val)); |
95 EXPECT_EQ(43, int_val); | 95 EXPECT_EQ(43, int_val); |
96 } | 96 } |
97 | 97 |
98 { | 98 { |
99 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. | 99 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. |
100 EXPECT_FALSE(JSONReader().ReadToValue("043")); | 100 EXPECT_FALSE(JSONReader().ReadToValue("043")); |
101 EXPECT_FALSE(JSONReader().ReadToValue("0x43")); | 101 EXPECT_FALSE(JSONReader().ReadToValue("0x43")); |
102 EXPECT_FALSE(JSONReader().ReadToValue("00")); | 102 EXPECT_FALSE(JSONReader().ReadToValue("00")); |
103 } | 103 } |
104 | 104 |
105 { | 105 { |
106 // Test 0 (which needs to be special cased because of the leading zero | 106 // Test 0 (which needs to be special cased because of the leading zero |
107 // clause). | 107 // clause). |
108 std::unique_ptr<Value> root = JSONReader().ReadToValue("0"); | 108 std::unique_ptr<Value> root = JSONReader().ReadToValue("0"); |
109 ASSERT_TRUE(root); | 109 ASSERT_TRUE(root); |
110 EXPECT_TRUE(root->IsType(Value::TYPE_INTEGER)); | 110 EXPECT_TRUE(root->IsType(Value::Type::INTEGER)); |
111 int int_val = 1; | 111 int int_val = 1; |
112 EXPECT_TRUE(root->GetAsInteger(&int_val)); | 112 EXPECT_TRUE(root->GetAsInteger(&int_val)); |
113 EXPECT_EQ(0, int_val); | 113 EXPECT_EQ(0, int_val); |
114 } | 114 } |
115 | 115 |
116 { | 116 { |
117 // Numbers that overflow ints should succeed, being internally promoted to | 117 // Numbers that overflow ints should succeed, being internally promoted to |
118 // storage as doubles | 118 // storage as doubles |
119 std::unique_ptr<Value> root = JSONReader().ReadToValue("2147483648"); | 119 std::unique_ptr<Value> root = JSONReader().ReadToValue("2147483648"); |
120 ASSERT_TRUE(root); | 120 ASSERT_TRUE(root); |
121 double double_val; | 121 double double_val; |
122 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 122 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
123 double_val = 0.0; | 123 double_val = 0.0; |
124 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 124 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
125 EXPECT_DOUBLE_EQ(2147483648.0, double_val); | 125 EXPECT_DOUBLE_EQ(2147483648.0, double_val); |
126 root = JSONReader().ReadToValue("-2147483649"); | 126 root = JSONReader().ReadToValue("-2147483649"); |
127 ASSERT_TRUE(root); | 127 ASSERT_TRUE(root); |
128 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 128 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
129 double_val = 0.0; | 129 double_val = 0.0; |
130 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 130 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
131 EXPECT_DOUBLE_EQ(-2147483649.0, double_val); | 131 EXPECT_DOUBLE_EQ(-2147483649.0, double_val); |
132 } | 132 } |
133 | 133 |
134 { | 134 { |
135 // Parse a double | 135 // Parse a double |
136 std::unique_ptr<Value> root = JSONReader().ReadToValue("43.1"); | 136 std::unique_ptr<Value> root = JSONReader().ReadToValue("43.1"); |
137 ASSERT_TRUE(root); | 137 ASSERT_TRUE(root); |
138 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 138 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
139 double double_val = 0.0; | 139 double double_val = 0.0; |
140 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 140 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
141 EXPECT_DOUBLE_EQ(43.1, double_val); | 141 EXPECT_DOUBLE_EQ(43.1, double_val); |
142 | 142 |
143 root = JSONReader().ReadToValue("4.3e-1"); | 143 root = JSONReader().ReadToValue("4.3e-1"); |
144 ASSERT_TRUE(root); | 144 ASSERT_TRUE(root); |
145 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 145 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
146 double_val = 0.0; | 146 double_val = 0.0; |
147 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 147 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
148 EXPECT_DOUBLE_EQ(.43, double_val); | 148 EXPECT_DOUBLE_EQ(.43, double_val); |
149 | 149 |
150 root = JSONReader().ReadToValue("2.1e0"); | 150 root = JSONReader().ReadToValue("2.1e0"); |
151 ASSERT_TRUE(root); | 151 ASSERT_TRUE(root); |
152 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 152 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
153 double_val = 0.0; | 153 double_val = 0.0; |
154 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 154 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
155 EXPECT_DOUBLE_EQ(2.1, double_val); | 155 EXPECT_DOUBLE_EQ(2.1, double_val); |
156 | 156 |
157 root = JSONReader().ReadToValue("2.1e+0001"); | 157 root = JSONReader().ReadToValue("2.1e+0001"); |
158 ASSERT_TRUE(root); | 158 ASSERT_TRUE(root); |
159 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 159 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
160 double_val = 0.0; | 160 double_val = 0.0; |
161 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 161 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
162 EXPECT_DOUBLE_EQ(21.0, double_val); | 162 EXPECT_DOUBLE_EQ(21.0, double_val); |
163 | 163 |
164 root = JSONReader().ReadToValue("0.01"); | 164 root = JSONReader().ReadToValue("0.01"); |
165 ASSERT_TRUE(root); | 165 ASSERT_TRUE(root); |
166 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 166 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
167 double_val = 0.0; | 167 double_val = 0.0; |
168 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 168 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
169 EXPECT_DOUBLE_EQ(0.01, double_val); | 169 EXPECT_DOUBLE_EQ(0.01, double_val); |
170 | 170 |
171 root = JSONReader().ReadToValue("1.00"); | 171 root = JSONReader().ReadToValue("1.00"); |
172 ASSERT_TRUE(root); | 172 ASSERT_TRUE(root); |
173 EXPECT_TRUE(root->IsType(Value::TYPE_DOUBLE)); | 173 EXPECT_TRUE(root->IsType(Value::Type::DOUBLE)); |
174 double_val = 0.0; | 174 double_val = 0.0; |
175 EXPECT_TRUE(root->GetAsDouble(&double_val)); | 175 EXPECT_TRUE(root->GetAsDouble(&double_val)); |
176 EXPECT_DOUBLE_EQ(1.0, double_val); | 176 EXPECT_DOUBLE_EQ(1.0, double_val); |
177 } | 177 } |
178 | 178 |
179 { | 179 { |
180 // Fractional parts must have a digit before and after the decimal point. | 180 // Fractional parts must have a digit before and after the decimal point. |
181 EXPECT_FALSE(JSONReader().ReadToValue("1.")); | 181 EXPECT_FALSE(JSONReader().ReadToValue("1.")); |
182 EXPECT_FALSE(JSONReader().ReadToValue(".1")); | 182 EXPECT_FALSE(JSONReader().ReadToValue(".1")); |
183 EXPECT_FALSE(JSONReader().ReadToValue("1.e10")); | 183 EXPECT_FALSE(JSONReader().ReadToValue("1.e10")); |
(...skipping 19 matching lines...) Expand all Loading... |
203 { | 203 { |
204 // Invalid number formats | 204 // Invalid number formats |
205 EXPECT_FALSE(JSONReader().ReadToValue("4.3.1")); | 205 EXPECT_FALSE(JSONReader().ReadToValue("4.3.1")); |
206 EXPECT_FALSE(JSONReader().ReadToValue("4e3.1")); | 206 EXPECT_FALSE(JSONReader().ReadToValue("4e3.1")); |
207 } | 207 } |
208 | 208 |
209 { | 209 { |
210 // Test string parser | 210 // Test string parser |
211 std::unique_ptr<Value> root = JSONReader().ReadToValue("\"hello world\""); | 211 std::unique_ptr<Value> root = JSONReader().ReadToValue("\"hello world\""); |
212 ASSERT_TRUE(root); | 212 ASSERT_TRUE(root); |
213 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 213 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
214 std::string str_val; | 214 std::string str_val; |
215 EXPECT_TRUE(root->GetAsString(&str_val)); | 215 EXPECT_TRUE(root->GetAsString(&str_val)); |
216 EXPECT_EQ("hello world", str_val); | 216 EXPECT_EQ("hello world", str_val); |
217 } | 217 } |
218 | 218 |
219 { | 219 { |
220 // Empty string | 220 // Empty string |
221 std::unique_ptr<Value> root = JSONReader().ReadToValue("\"\""); | 221 std::unique_ptr<Value> root = JSONReader().ReadToValue("\"\""); |
222 ASSERT_TRUE(root); | 222 ASSERT_TRUE(root); |
223 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 223 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
224 std::string str_val; | 224 std::string str_val; |
225 EXPECT_TRUE(root->GetAsString(&str_val)); | 225 EXPECT_TRUE(root->GetAsString(&str_val)); |
226 EXPECT_EQ("", str_val); | 226 EXPECT_EQ("", str_val); |
227 } | 227 } |
228 | 228 |
229 { | 229 { |
230 // Test basic string escapes | 230 // Test basic string escapes |
231 std::unique_ptr<Value> root = | 231 std::unique_ptr<Value> root = |
232 JSONReader().ReadToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\""); | 232 JSONReader().ReadToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\""); |
233 ASSERT_TRUE(root); | 233 ASSERT_TRUE(root); |
234 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 234 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
235 std::string str_val; | 235 std::string str_val; |
236 EXPECT_TRUE(root->GetAsString(&str_val)); | 236 EXPECT_TRUE(root->GetAsString(&str_val)); |
237 EXPECT_EQ(" \"\\/\b\f\n\r\t\v", str_val); | 237 EXPECT_EQ(" \"\\/\b\f\n\r\t\v", str_val); |
238 } | 238 } |
239 | 239 |
240 { | 240 { |
241 // Test hex and unicode escapes including the null character. | 241 // Test hex and unicode escapes including the null character. |
242 std::unique_ptr<Value> root = | 242 std::unique_ptr<Value> root = |
243 JSONReader().ReadToValue("\"\\x41\\x00\\u1234\""); | 243 JSONReader().ReadToValue("\"\\x41\\x00\\u1234\""); |
244 ASSERT_TRUE(root); | 244 ASSERT_TRUE(root); |
245 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 245 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
246 std::string str_val; | 246 std::string str_val; |
247 EXPECT_TRUE(root->GetAsString(&str_val)); | 247 EXPECT_TRUE(root->GetAsString(&str_val)); |
248 EXPECT_EQ(std::wstring(L"A\0\x1234", 3), UTF8ToWide(str_val)); | 248 EXPECT_EQ(std::wstring(L"A\0\x1234", 3), UTF8ToWide(str_val)); |
249 } | 249 } |
250 | 250 |
251 { | 251 { |
252 // Test invalid strings | 252 // Test invalid strings |
253 EXPECT_FALSE(JSONReader().ReadToValue("\"no closing quote")); | 253 EXPECT_FALSE(JSONReader().ReadToValue("\"no closing quote")); |
254 EXPECT_FALSE(JSONReader().ReadToValue("\"\\z invalid escape char\"")); | 254 EXPECT_FALSE(JSONReader().ReadToValue("\"\\z invalid escape char\"")); |
255 EXPECT_FALSE(JSONReader().ReadToValue("\"\\xAQ invalid hex code\"")); | 255 EXPECT_FALSE(JSONReader().ReadToValue("\"\\xAQ invalid hex code\"")); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 } | 309 } |
310 | 310 |
311 { | 311 { |
312 // Valid if we set |allow_trailing_comma| to true. | 312 // Valid if we set |allow_trailing_comma| to true. |
313 std::unique_ptr<ListValue> list = ListValue::From( | 313 std::unique_ptr<ListValue> list = ListValue::From( |
314 JSONReader::Read("[true,]", JSON_ALLOW_TRAILING_COMMAS)); | 314 JSONReader::Read("[true,]", JSON_ALLOW_TRAILING_COMMAS)); |
315 ASSERT_TRUE(list); | 315 ASSERT_TRUE(list); |
316 EXPECT_EQ(1U, list->GetSize()); | 316 EXPECT_EQ(1U, list->GetSize()); |
317 Value* tmp_value = nullptr; | 317 Value* tmp_value = nullptr; |
318 ASSERT_TRUE(list->Get(0, &tmp_value)); | 318 ASSERT_TRUE(list->Get(0, &tmp_value)); |
319 EXPECT_TRUE(tmp_value->IsType(Value::TYPE_BOOLEAN)); | 319 EXPECT_TRUE(tmp_value->IsType(Value::Type::BOOLEAN)); |
320 bool bool_value = false; | 320 bool bool_value = false; |
321 EXPECT_TRUE(tmp_value->GetAsBoolean(&bool_value)); | 321 EXPECT_TRUE(tmp_value->GetAsBoolean(&bool_value)); |
322 EXPECT_TRUE(bool_value); | 322 EXPECT_TRUE(bool_value); |
323 } | 323 } |
324 | 324 |
325 { | 325 { |
326 // Don't allow empty elements, even if |allow_trailing_comma| is | 326 // Don't allow empty elements, even if |allow_trailing_comma| is |
327 // true. | 327 // true. |
328 EXPECT_FALSE(JSONReader::Read("[,]", JSON_ALLOW_TRAILING_COMMAS)); | 328 EXPECT_FALSE(JSONReader::Read("[,]", JSON_ALLOW_TRAILING_COMMAS)); |
329 EXPECT_FALSE(JSONReader::Read("[true,,]", JSON_ALLOW_TRAILING_COMMAS)); | 329 EXPECT_FALSE(JSONReader::Read("[true,,]", JSON_ALLOW_TRAILING_COMMAS)); |
330 EXPECT_FALSE(JSONReader::Read("[,true,]", JSON_ALLOW_TRAILING_COMMAS)); | 330 EXPECT_FALSE(JSONReader::Read("[,true,]", JSON_ALLOW_TRAILING_COMMAS)); |
331 EXPECT_FALSE(JSONReader::Read("[true,,false]", JSON_ALLOW_TRAILING_COMMAS)); | 331 EXPECT_FALSE(JSONReader::Read("[true,,false]", JSON_ALLOW_TRAILING_COMMAS)); |
332 } | 332 } |
333 | 333 |
334 { | 334 { |
335 // Test objects | 335 // Test objects |
336 std::unique_ptr<DictionaryValue> dict_val = | 336 std::unique_ptr<DictionaryValue> dict_val = |
337 DictionaryValue::From(JSONReader::Read("{}")); | 337 DictionaryValue::From(JSONReader::Read("{}")); |
338 ASSERT_TRUE(dict_val); | 338 ASSERT_TRUE(dict_val); |
339 | 339 |
340 dict_val = DictionaryValue::From(JSONReader::Read( | 340 dict_val = DictionaryValue::From(JSONReader::Read( |
341 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\" }")); | 341 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\" }")); |
342 ASSERT_TRUE(dict_val); | 342 ASSERT_TRUE(dict_val); |
343 double double_val = 0.0; | 343 double double_val = 0.0; |
344 EXPECT_TRUE(dict_val->GetDouble("number", &double_val)); | 344 EXPECT_TRUE(dict_val->GetDouble("number", &double_val)); |
345 EXPECT_DOUBLE_EQ(9.87654321, double_val); | 345 EXPECT_DOUBLE_EQ(9.87654321, double_val); |
346 Value* null_val = nullptr; | 346 Value* null_val = nullptr; |
347 ASSERT_TRUE(dict_val->Get("null", &null_val)); | 347 ASSERT_TRUE(dict_val->Get("null", &null_val)); |
348 EXPECT_TRUE(null_val->IsType(Value::TYPE_NULL)); | 348 EXPECT_TRUE(null_val->IsType(Value::Type::NONE)); |
349 std::string str_val; | 349 std::string str_val; |
350 EXPECT_TRUE(dict_val->GetString("S", &str_val)); | 350 EXPECT_TRUE(dict_val->GetString("S", &str_val)); |
351 EXPECT_EQ("str", str_val); | 351 EXPECT_EQ("str", str_val); |
352 | 352 |
353 std::unique_ptr<Value> root2 = JSONReader::Read( | 353 std::unique_ptr<Value> root2 = JSONReader::Read( |
354 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\", }", | 354 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\", }", |
355 JSON_ALLOW_TRAILING_COMMAS); | 355 JSON_ALLOW_TRAILING_COMMAS); |
356 ASSERT_TRUE(root2); | 356 ASSERT_TRUE(root2); |
357 EXPECT_TRUE(dict_val->Equals(root2.get())); | 357 EXPECT_TRUE(dict_val->Equals(root2.get())); |
358 | 358 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 ListValue::From(JSONReader::Read(not_evil)); | 476 ListValue::From(JSONReader::Read(not_evil)); |
477 ASSERT_TRUE(list); | 477 ASSERT_TRUE(list); |
478 EXPECT_EQ(5001U, list->GetSize()); | 478 EXPECT_EQ(5001U, list->GetSize()); |
479 } | 479 } |
480 | 480 |
481 { | 481 { |
482 // Test utf8 encoded input | 482 // Test utf8 encoded input |
483 std::unique_ptr<Value> root = | 483 std::unique_ptr<Value> root = |
484 JSONReader().ReadToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\""); | 484 JSONReader().ReadToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\""); |
485 ASSERT_TRUE(root); | 485 ASSERT_TRUE(root); |
486 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 486 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
487 std::string str_val; | 487 std::string str_val; |
488 EXPECT_TRUE(root->GetAsString(&str_val)); | 488 EXPECT_TRUE(root->GetAsString(&str_val)); |
489 EXPECT_EQ(L"\x7f51\x9875", UTF8ToWide(str_val)); | 489 EXPECT_EQ(L"\x7f51\x9875", UTF8ToWide(str_val)); |
490 | 490 |
491 std::unique_ptr<DictionaryValue> dict_val = | 491 std::unique_ptr<DictionaryValue> dict_val = |
492 DictionaryValue::From(JSONReader().ReadToValue( | 492 DictionaryValue::From(JSONReader().ReadToValue( |
493 "{\"path\": \"/tmp/\xc3\xa0\xc3\xa8\xc3\xb2.png\"}")); | 493 "{\"path\": \"/tmp/\xc3\xa0\xc3\xa8\xc3\xb2.png\"}")); |
494 ASSERT_TRUE(dict_val); | 494 ASSERT_TRUE(dict_val); |
495 EXPECT_TRUE(dict_val->GetString("path", &str_val)); | 495 EXPECT_TRUE(dict_val->GetString("path", &str_val)); |
496 EXPECT_EQ("/tmp/\xC3\xA0\xC3\xA8\xC3\xB2.png", str_val); | 496 EXPECT_EQ("/tmp/\xC3\xA0\xC3\xA8\xC3\xB2.png", str_val); |
497 } | 497 } |
498 | 498 |
499 { | 499 { |
500 // Test invalid utf8 encoded input | 500 // Test invalid utf8 encoded input |
501 EXPECT_FALSE(JSONReader().ReadToValue("\"345\xb0\xa1\xb0\xa2\"")); | 501 EXPECT_FALSE(JSONReader().ReadToValue("\"345\xb0\xa1\xb0\xa2\"")); |
502 EXPECT_FALSE(JSONReader().ReadToValue("\"123\xc0\x81\"")); | 502 EXPECT_FALSE(JSONReader().ReadToValue("\"123\xc0\x81\"")); |
503 EXPECT_FALSE(JSONReader().ReadToValue("\"abc\xc0\xae\"")); | 503 EXPECT_FALSE(JSONReader().ReadToValue("\"abc\xc0\xae\"")); |
504 } | 504 } |
505 | 505 |
506 { | 506 { |
507 // Test utf16 encoded strings. | 507 // Test utf16 encoded strings. |
508 std::unique_ptr<Value> root = JSONReader().ReadToValue("\"\\u20ac3,14\""); | 508 std::unique_ptr<Value> root = JSONReader().ReadToValue("\"\\u20ac3,14\""); |
509 ASSERT_TRUE(root); | 509 ASSERT_TRUE(root); |
510 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 510 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
511 std::string str_val; | 511 std::string str_val; |
512 EXPECT_TRUE(root->GetAsString(&str_val)); | 512 EXPECT_TRUE(root->GetAsString(&str_val)); |
513 EXPECT_EQ( | 513 EXPECT_EQ( |
514 "\xe2\x82\xac" | 514 "\xe2\x82\xac" |
515 "3,14", | 515 "3,14", |
516 str_val); | 516 str_val); |
517 | 517 |
518 root = JSONReader().ReadToValue("\"\\ud83d\\udca9\\ud83d\\udc6c\""); | 518 root = JSONReader().ReadToValue("\"\\ud83d\\udca9\\ud83d\\udc6c\""); |
519 ASSERT_TRUE(root); | 519 ASSERT_TRUE(root); |
520 EXPECT_TRUE(root->IsType(Value::TYPE_STRING)); | 520 EXPECT_TRUE(root->IsType(Value::Type::STRING)); |
521 str_val.clear(); | 521 str_val.clear(); |
522 EXPECT_TRUE(root->GetAsString(&str_val)); | 522 EXPECT_TRUE(root->GetAsString(&str_val)); |
523 EXPECT_EQ("\xf0\x9f\x92\xa9\xf0\x9f\x91\xac", str_val); | 523 EXPECT_EQ("\xf0\x9f\x92\xa9\xf0\x9f\x91\xac", str_val); |
524 } | 524 } |
525 | 525 |
526 { | 526 { |
527 // Test invalid utf16 strings. | 527 // Test invalid utf16 strings. |
528 const char* const cases[] = { | 528 const char* const cases[] = { |
529 "\"\\u123\"", // Invalid scalar. | 529 "\"\\u123\"", // Invalid scalar. |
530 "\"\\ud83d\"", // Invalid scalar. | 530 "\"\\ud83d\"", // Invalid scalar. |
531 "\"\\u$%@!\"", // Invalid scalar. | 531 "\"\\u$%@!\"", // Invalid scalar. |
532 "\"\\uzz89\"", // Invalid scalar. | 532 "\"\\uzz89\"", // Invalid scalar. |
533 "\"\\ud83d\\udca\"", // Invalid lower surrogate. | 533 "\"\\ud83d\\udca\"", // Invalid lower surrogate. |
534 "\"\\ud83d\\ud83d\"", // Invalid lower surrogate. | 534 "\"\\ud83d\\ud83d\"", // Invalid lower surrogate. |
535 "\"\\ud83foo\"", // No lower surrogate. | 535 "\"\\ud83foo\"", // No lower surrogate. |
536 "\"\\ud83\\foo\"" // No lower surrogate. | 536 "\"\\ud83\\foo\"" // No lower surrogate. |
537 }; | 537 }; |
538 std::unique_ptr<Value> root; | 538 std::unique_ptr<Value> root; |
539 for (size_t i = 0; i < arraysize(cases); ++i) { | 539 for (size_t i = 0; i < arraysize(cases); ++i) { |
540 root = JSONReader().ReadToValue(cases[i]); | 540 root = JSONReader().ReadToValue(cases[i]); |
541 EXPECT_FALSE(root) << cases[i]; | 541 EXPECT_FALSE(root) << cases[i]; |
542 } | 542 } |
543 } | 543 } |
544 | 544 |
545 { | 545 { |
546 // Test literal root objects. | 546 // Test literal root objects. |
547 std::unique_ptr<Value> root = JSONReader::Read("null"); | 547 std::unique_ptr<Value> root = JSONReader::Read("null"); |
548 EXPECT_TRUE(root->IsType(Value::TYPE_NULL)); | 548 EXPECT_TRUE(root->IsType(Value::Type::NONE)); |
549 | 549 |
550 root = JSONReader::Read("true"); | 550 root = JSONReader::Read("true"); |
551 ASSERT_TRUE(root); | 551 ASSERT_TRUE(root); |
552 bool bool_value; | 552 bool bool_value; |
553 EXPECT_TRUE(root->GetAsBoolean(&bool_value)); | 553 EXPECT_TRUE(root->GetAsBoolean(&bool_value)); |
554 EXPECT_TRUE(bool_value); | 554 EXPECT_TRUE(bool_value); |
555 | 555 |
556 root = JSONReader::Read("10"); | 556 root = JSONReader::Read("10"); |
557 ASSERT_TRUE(root); | 557 ASSERT_TRUE(root); |
558 int integer_value; | 558 int integer_value; |
(...skipping 13 matching lines...) Expand all Loading... |
572 ASSERT_TRUE(PathService::Get(base::DIR_TEST_DATA, &path)); | 572 ASSERT_TRUE(PathService::Get(base::DIR_TEST_DATA, &path)); |
573 path = path.AppendASCII("json"); | 573 path = path.AppendASCII("json"); |
574 ASSERT_TRUE(base::PathExists(path)); | 574 ASSERT_TRUE(base::PathExists(path)); |
575 | 575 |
576 std::string input; | 576 std::string input; |
577 ASSERT_TRUE(ReadFileToString(path.AppendASCII("bom_feff.json"), &input)); | 577 ASSERT_TRUE(ReadFileToString(path.AppendASCII("bom_feff.json"), &input)); |
578 | 578 |
579 JSONReader reader; | 579 JSONReader reader; |
580 std::unique_ptr<Value> root(reader.ReadToValue(input)); | 580 std::unique_ptr<Value> root(reader.ReadToValue(input)); |
581 ASSERT_TRUE(root) << reader.GetErrorMessage(); | 581 ASSERT_TRUE(root) << reader.GetErrorMessage(); |
582 EXPECT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 582 EXPECT_TRUE(root->IsType(Value::Type::DICTIONARY)); |
583 } | 583 } |
584 | 584 |
585 // Tests that the root of a JSON object can be deleted safely while its | 585 // Tests that the root of a JSON object can be deleted safely while its |
586 // children outlive it. | 586 // children outlive it. |
587 TEST(JSONReaderTest, StringOptimizations) { | 587 TEST(JSONReaderTest, StringOptimizations) { |
588 std::unique_ptr<Value> dict_literal_0; | 588 std::unique_ptr<Value> dict_literal_0; |
589 std::unique_ptr<Value> dict_literal_1; | 589 std::unique_ptr<Value> dict_literal_1; |
590 std::unique_ptr<Value> dict_string_0; | 590 std::unique_ptr<Value> dict_string_0; |
591 std::unique_ptr<Value> dict_string_1; | 591 std::unique_ptr<Value> dict_string_1; |
592 std::unique_ptr<Value> list_value_0; | 592 std::unique_ptr<Value> list_value_0; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 | 669 |
670 TEST(JSONReaderTest, IllegalTrailingNull) { | 670 TEST(JSONReaderTest, IllegalTrailingNull) { |
671 const char json[] = { '"', 'n', 'u', 'l', 'l', '"', '\0' }; | 671 const char json[] = { '"', 'n', 'u', 'l', 'l', '"', '\0' }; |
672 std::string json_string(json, sizeof(json)); | 672 std::string json_string(json, sizeof(json)); |
673 JSONReader reader; | 673 JSONReader reader; |
674 EXPECT_FALSE(reader.ReadToValue(json_string)); | 674 EXPECT_FALSE(reader.ReadToValue(json_string)); |
675 EXPECT_EQ(JSONReader::JSON_UNEXPECTED_DATA_AFTER_ROOT, reader.error_code()); | 675 EXPECT_EQ(JSONReader::JSON_UNEXPECTED_DATA_AFTER_ROOT, reader.error_code()); |
676 } | 676 } |
677 | 677 |
678 } // namespace base | 678 } // namespace base |
OLD | NEW |