Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: base/json/json_reader_unittest.cc

Issue 2539363004: Make base::Value::TYPE a scoped enum. (Closed)
Patch Set: Rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/json/json_parser_unittest.cc ('k') | base/json/json_value_serializer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « base/json/json_parser_unittest.cc ('k') | base/json/json_value_serializer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698