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

Side by Side Diff: base/json_reader_unittest.cc

Issue 16270: Change the signature of JSONReader::Read() and related methods to be more (Closed)
Patch Set: fixens Created 11 years, 11 months 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
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 #include "base/json_reader.h" 6 #include "base/json_reader.h"
7 #include "base/scoped_ptr.h"
7 #include "base/values.h" 8 #include "base/values.h"
8 #include "build/build_config.h" 9 #include "build/build_config.h"
9 10
10 TEST(JSONReaderTest, Reading) { 11 TEST(JSONReaderTest, Reading) {
11 // some whitespace checking 12 // some whitespace checking
12 Value* root = NULL; 13 scoped_ptr<Value> root;
13 ASSERT_TRUE(JSONReader().JsonToValue(" null ", &root, false, false)); 14 root.reset(JSONReader().JsonToValue(" null ", false, false));
14 ASSERT_TRUE(root); 15 ASSERT_TRUE(root.get());
15 ASSERT_TRUE(root->IsType(Value::TYPE_NULL)); 16 ASSERT_TRUE(root->IsType(Value::TYPE_NULL));
16 delete root;
17 17
18 // Invalid JSON string 18 // Invalid JSON string
19 root = NULL; 19 root.reset(JSONReader().JsonToValue("nu", false, false));
20 ASSERT_FALSE(JSONReader().JsonToValue("nu", &root, false, false)); 20 ASSERT_FALSE(root.get());
21 ASSERT_FALSE(root);
22 21
23 // Simple bool 22 // Simple bool
24 root = NULL; 23 root.reset(JSONReader().JsonToValue("true ", false, false));
25 ASSERT_TRUE(JSONReader().JsonToValue("true ", &root, false, false)); 24 ASSERT_TRUE(root.get());
26 ASSERT_TRUE(root);
27 ASSERT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); 25 ASSERT_TRUE(root->IsType(Value::TYPE_BOOLEAN));
28 delete root;
29 26
30 // Test number formats 27 // Test number formats
31 root = NULL; 28 root.reset(JSONReader().JsonToValue("43", false, false));
32 ASSERT_TRUE(JSONReader().JsonToValue("43", &root, false, false)); 29 ASSERT_TRUE(root.get());
33 ASSERT_TRUE(root);
34 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 30 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
35 int int_val = 0; 31 int int_val = 0;
36 ASSERT_TRUE(root->GetAsInteger(&int_val)); 32 ASSERT_TRUE(root->GetAsInteger(&int_val));
37 ASSERT_EQ(43, int_val); 33 ASSERT_EQ(43, int_val);
38 delete root;
39 34
40 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. 35 // According to RFC4627, oct, hex, and leading zeros are invalid JSON.
41 root = NULL; 36 root.reset(JSONReader().JsonToValue("043", false, false));
42 ASSERT_FALSE(JSONReader().JsonToValue("043", &root, false, false)); 37 ASSERT_FALSE(root.get());
43 ASSERT_FALSE(root); 38 root.reset(JSONReader().JsonToValue("0x43", false, false));
44 root = NULL; 39 ASSERT_FALSE(root.get());
45 ASSERT_FALSE(JSONReader().JsonToValue("0x43", &root, false, false)); 40 root.reset(JSONReader().JsonToValue("00", false, false));
46 ASSERT_FALSE(root); 41 ASSERT_FALSE(root.get());
47 root = NULL;
48 ASSERT_FALSE(JSONReader().JsonToValue("00", &root, false, false));
49 ASSERT_FALSE(root);
50 42
51 // Test 0 (which needs to be special cased because of the leading zero 43 // Test 0 (which needs to be special cased because of the leading zero
52 // clause). 44 // clause).
53 root = NULL; 45 root.reset(JSONReader().JsonToValue("0", false, false));
54 ASSERT_TRUE(JSONReader().JsonToValue("0", &root, false, false)); 46 ASSERT_TRUE(root.get());
55 ASSERT_TRUE(root);
56 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 47 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
57 int_val = 1; 48 int_val = 1;
58 ASSERT_TRUE(root->GetAsInteger(&int_val)); 49 ASSERT_TRUE(root->GetAsInteger(&int_val));
59 ASSERT_EQ(0, int_val); 50 ASSERT_EQ(0, int_val);
60 delete root;
61 51
62 // Numbers that overflow ints should succeed, being internally promoted to 52 // Numbers that overflow ints should succeed, being internally promoted to
63 // storage as doubles 53 // storage as doubles
64 root = NULL; 54 root.reset(JSONReader().JsonToValue("2147483648", false, false));
65 ASSERT_TRUE(JSONReader().JsonToValue("2147483648", &root, false, false)); 55 ASSERT_TRUE(root.get());
66 ASSERT_TRUE(root);
67 double real_val; 56 double real_val;
68 #ifdef ARCH_CPU_32_BITS 57 #ifdef ARCH_CPU_32_BITS
69 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 58 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
70 real_val = 0.0; 59 real_val = 0.0;
71 ASSERT_TRUE(root->GetAsReal(&real_val)); 60 ASSERT_TRUE(root->GetAsReal(&real_val));
72 ASSERT_DOUBLE_EQ(2147483648.0, real_val); 61 ASSERT_DOUBLE_EQ(2147483648.0, real_val);
73 #else 62 #else
74 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 63 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
75 int_val = 0; 64 int_val = 0;
76 ASSERT_TRUE(root->GetAsInteger(&int_val)); 65 ASSERT_TRUE(root->GetAsInteger(&int_val));
77 ASSERT_EQ(2147483648, int_val); 66 ASSERT_EQ(2147483648, int_val);
78 #endif 67 #endif
79 delete root; 68 root.reset(JSONReader().JsonToValue("-2147483649", false, false));
80 root = NULL; 69 ASSERT_TRUE(root.get());
81 ASSERT_TRUE(JSONReader().JsonToValue("-2147483649", &root, false, false));
82 ASSERT_TRUE(root);
83 #ifdef ARCH_CPU_32_BITS 70 #ifdef ARCH_CPU_32_BITS
84 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 71 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
85 real_val = 0.0; 72 real_val = 0.0;
86 ASSERT_TRUE(root->GetAsReal(&real_val)); 73 ASSERT_TRUE(root->GetAsReal(&real_val));
87 ASSERT_DOUBLE_EQ(-2147483649.0, real_val); 74 ASSERT_DOUBLE_EQ(-2147483649.0, real_val);
88 #else 75 #else
89 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 76 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
90 int_val = 0; 77 int_val = 0;
91 ASSERT_TRUE(root->GetAsInteger(&int_val)); 78 ASSERT_TRUE(root->GetAsInteger(&int_val));
92 ASSERT_EQ(-2147483649, int_val); 79 ASSERT_EQ(-2147483649, int_val);
93 #endif 80 #endif
94 delete root;
95 81
96 // Parse a double 82 // Parse a double
97 root = NULL; 83 root.reset(JSONReader().JsonToValue("43.1", false, false));
98 ASSERT_TRUE(JSONReader().JsonToValue("43.1", &root, false, false)); 84 ASSERT_TRUE(root.get());
99 ASSERT_TRUE(root);
100 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 85 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
101 real_val = 0.0; 86 real_val = 0.0;
102 ASSERT_TRUE(root->GetAsReal(&real_val)); 87 ASSERT_TRUE(root->GetAsReal(&real_val));
103 ASSERT_DOUBLE_EQ(43.1, real_val); 88 ASSERT_DOUBLE_EQ(43.1, real_val);
104 delete root;
105 89
106 root = NULL; 90 root.reset(JSONReader().JsonToValue("4.3e-1", false, false));
107 ASSERT_TRUE(JSONReader().JsonToValue("4.3e-1", &root, false, false)); 91 ASSERT_TRUE(root.get());
108 ASSERT_TRUE(root);
109 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 92 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
110 real_val = 0.0; 93 real_val = 0.0;
111 ASSERT_TRUE(root->GetAsReal(&real_val)); 94 ASSERT_TRUE(root->GetAsReal(&real_val));
112 ASSERT_DOUBLE_EQ(.43, real_val); 95 ASSERT_DOUBLE_EQ(.43, real_val);
113 delete root;
114 96
115 root = NULL; 97 root.reset(JSONReader().JsonToValue("2.1e0", false, false));
116 ASSERT_TRUE(JSONReader().JsonToValue("2.1e0", &root, false, false)); 98 ASSERT_TRUE(root.get());
117 ASSERT_TRUE(root);
118 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 99 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
119 real_val = 0.0; 100 real_val = 0.0;
120 ASSERT_TRUE(root->GetAsReal(&real_val)); 101 ASSERT_TRUE(root->GetAsReal(&real_val));
121 ASSERT_DOUBLE_EQ(2.1, real_val); 102 ASSERT_DOUBLE_EQ(2.1, real_val);
122 delete root;
123 103
124 root = NULL; 104 root.reset(JSONReader().JsonToValue("2.1e+0001", false, false));
125 ASSERT_TRUE(JSONReader().JsonToValue("2.1e+0001", &root, false, false)); 105 ASSERT_TRUE(root.get());
126 ASSERT_TRUE(root);
127 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 106 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
128 real_val = 0.0; 107 real_val = 0.0;
129 ASSERT_TRUE(root->GetAsReal(&real_val)); 108 ASSERT_TRUE(root->GetAsReal(&real_val));
130 ASSERT_DOUBLE_EQ(21.0, real_val); 109 ASSERT_DOUBLE_EQ(21.0, real_val);
131 delete root;
132 110
133 root = NULL; 111 root.reset(JSONReader().JsonToValue("0.01", false, false));
134 ASSERT_TRUE(JSONReader().JsonToValue("0.01", &root, false, false)); 112 ASSERT_TRUE(root.get());
135 ASSERT_TRUE(root);
136 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 113 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
137 real_val = 0.0; 114 real_val = 0.0;
138 ASSERT_TRUE(root->GetAsReal(&real_val)); 115 ASSERT_TRUE(root->GetAsReal(&real_val));
139 ASSERT_DOUBLE_EQ(0.01, real_val); 116 ASSERT_DOUBLE_EQ(0.01, real_val);
140 delete root;
141 117
142 root = NULL; 118 root.reset(JSONReader().JsonToValue("1.00", false, false));
143 ASSERT_TRUE(JSONReader().JsonToValue("1.00", &root, false, false)); 119 ASSERT_TRUE(root.get());
144 ASSERT_TRUE(root);
145 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 120 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
146 real_val = 0.0; 121 real_val = 0.0;
147 ASSERT_TRUE(root->GetAsReal(&real_val)); 122 ASSERT_TRUE(root->GetAsReal(&real_val));
148 ASSERT_DOUBLE_EQ(1.0, real_val); 123 ASSERT_DOUBLE_EQ(1.0, real_val);
149 delete root;
150 124
151 // Fractional parts must have a digit before and after the decimal point. 125 // Fractional parts must have a digit before and after the decimal point.
152 root = NULL; 126 root.reset(JSONReader().JsonToValue("1.", false, false));
153 ASSERT_FALSE(JSONReader().JsonToValue("1.", &root, false, false)); 127 ASSERT_FALSE(root.get());
154 ASSERT_FALSE(root); 128 root.reset(JSONReader().JsonToValue(".1", false, false));
155 root = NULL; 129 ASSERT_FALSE(root.get());
156 ASSERT_FALSE(JSONReader().JsonToValue(".1", &root, false, false)); 130 root.reset(JSONReader().JsonToValue("1.e10", false, false));
157 ASSERT_FALSE(root); 131 ASSERT_FALSE(root.get());
158 root = NULL;
159 ASSERT_FALSE(JSONReader().JsonToValue("1.e10", &root, false, false));
160 ASSERT_FALSE(root);
161 132
162 // Exponent must have a digit following the 'e'. 133 // Exponent must have a digit following the 'e'.
163 root = NULL; 134 root.reset(JSONReader().JsonToValue("1e", false, false));
164 ASSERT_FALSE(JSONReader().JsonToValue("1e", &root, false, false)); 135 ASSERT_FALSE(root.get());
165 ASSERT_FALSE(root); 136 root.reset(JSONReader().JsonToValue("1E", false, false));
166 root = NULL; 137 ASSERT_FALSE(root.get());
167 ASSERT_FALSE(JSONReader().JsonToValue("1E", &root, false, false)); 138 root.reset(JSONReader().JsonToValue("1e1.", false, false));
168 ASSERT_FALSE(root); 139 ASSERT_FALSE(root.get());
169 root = NULL; 140 root.reset(JSONReader().JsonToValue("1e1.0", false, false));
170 ASSERT_FALSE(JSONReader().JsonToValue("1e1.", &root, false, false)); 141 ASSERT_FALSE(root.get());
171 ASSERT_FALSE(root);
172 root = NULL;
173 ASSERT_FALSE(JSONReader().JsonToValue("1e1.0", &root, false, false));
174 ASSERT_FALSE(root);
175 142
176 // INF/-INF/NaN are not valid 143 // INF/-INF/NaN are not valid
177 root = NULL; 144 root.reset(JSONReader().JsonToValue("1e1000", false, false));
178 ASSERT_FALSE(JSONReader().JsonToValue("1e1000", &root, false, false)); 145 ASSERT_FALSE(root.get());
179 ASSERT_FALSE(root); 146 root.reset(JSONReader().JsonToValue("-1e1000", false, false));
180 root = NULL; 147 ASSERT_FALSE(root.get());
181 ASSERT_FALSE(JSONReader().JsonToValue("-1e1000", &root, false, false)); 148 root.reset(JSONReader().JsonToValue("NaN", false, false));
182 ASSERT_FALSE(root); 149 ASSERT_FALSE(root.get());
183 root = NULL; 150 root.reset(JSONReader().JsonToValue("nan", false, false));
184 ASSERT_FALSE(JSONReader().JsonToValue("NaN", &root, false, false)); 151 ASSERT_FALSE(root.get());
185 ASSERT_FALSE(root); 152 root.reset(JSONReader().JsonToValue("inf", false, false));
186 root = NULL; 153 ASSERT_FALSE(root.get());
187 ASSERT_FALSE(JSONReader().JsonToValue("nan", &root, false, false));
188 ASSERT_FALSE(root);
189 root = NULL;
190 ASSERT_FALSE(JSONReader().JsonToValue("inf", &root, false, false));
191 ASSERT_FALSE(root);
192 154
193 // Invalid number formats 155 // Invalid number formats
194 root = NULL; 156 root.reset(JSONReader().JsonToValue("4.3.1", false, false));
195 ASSERT_FALSE(JSONReader().JsonToValue("4.3.1", &root, false, false)); 157 ASSERT_FALSE(root.get());
196 ASSERT_FALSE(root); 158 root.reset(JSONReader().JsonToValue("4e3.1", false, false));
197 root = NULL; 159 ASSERT_FALSE(root.get());
198 ASSERT_FALSE(JSONReader().JsonToValue("4e3.1", &root, false, false));
199 ASSERT_FALSE(root);
200 160
201 // Test string parser 161 // Test string parser
202 root = NULL; 162 root.reset(JSONReader().JsonToValue("\"hello world\"", false, false));
203 ASSERT_TRUE(JSONReader().JsonToValue("\"hello world\"", &root, false, false)); 163 ASSERT_TRUE(root.get());
204 ASSERT_TRUE(root);
205 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 164 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
206 std::wstring str_val; 165 std::wstring str_val;
207 ASSERT_TRUE(root->GetAsString(&str_val)); 166 ASSERT_TRUE(root->GetAsString(&str_val));
208 ASSERT_EQ(L"hello world", str_val); 167 ASSERT_EQ(L"hello world", str_val);
209 delete root;
210 168
211 // Empty string 169 // Empty string
212 root = NULL; 170 root.reset(JSONReader().JsonToValue("\"\"", false, false));
213 ASSERT_TRUE(JSONReader().JsonToValue("\"\"", &root, false, false)); 171 ASSERT_TRUE(root.get());
214 ASSERT_TRUE(root);
215 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 172 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
216 str_val.clear(); 173 str_val.clear();
217 ASSERT_TRUE(root->GetAsString(&str_val)); 174 ASSERT_TRUE(root->GetAsString(&str_val));
218 ASSERT_EQ(L"", str_val); 175 ASSERT_EQ(L"", str_val);
219 delete root;
220 176
221 // Test basic string escapes 177 // Test basic string escapes
222 root = NULL; 178 root.reset(JSONReader().JsonToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\"",
223 ASSERT_TRUE(JSONReader().JsonToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\"", 179 false, false));
224 &root, false, false)); 180 ASSERT_TRUE(root.get());
225 ASSERT_TRUE(root);
226 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 181 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
227 str_val.clear(); 182 str_val.clear();
228 ASSERT_TRUE(root->GetAsString(&str_val)); 183 ASSERT_TRUE(root->GetAsString(&str_val));
229 ASSERT_EQ(L" \"\\/\b\f\n\r\t\v", str_val); 184 ASSERT_EQ(L" \"\\/\b\f\n\r\t\v", str_val);
230 delete root;
231 185
232 // Test hex and unicode escapes including the null character. 186 // Test hex and unicode escapes including the null character.
233 root = NULL; 187 root.reset(JSONReader().JsonToValue("\"\\x41\\x00\\u1234\"", false,
234 ASSERT_TRUE(JSONReader().JsonToValue("\"\\x41\\x00\\u1234\"", &root, false,
235 false)); 188 false));
236 ASSERT_TRUE(root); 189 ASSERT_TRUE(root.get());
237 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 190 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
238 str_val.clear(); 191 str_val.clear();
239 ASSERT_TRUE(root->GetAsString(&str_val)); 192 ASSERT_TRUE(root->GetAsString(&str_val));
240 ASSERT_EQ(std::wstring(L"A\0\x1234", 3), str_val); 193 ASSERT_EQ(std::wstring(L"A\0\x1234", 3), str_val);
241 delete root;
242 194
243 // Test invalid strings 195 // Test invalid strings
244 root = NULL; 196 root.reset(JSONReader().JsonToValue("\"no closing quote", false, false));
245 ASSERT_FALSE(JSONReader().JsonToValue("\"no closing quote", &root, false, 197 ASSERT_FALSE(root.get());
246 false)); 198 root.reset(JSONReader().JsonToValue("\"\\z invalid escape char\"", false,
247 ASSERT_FALSE(root); 199 false));
248 root = NULL; 200 ASSERT_FALSE(root.get());
249 ASSERT_FALSE(JSONReader().JsonToValue("\"\\z invalid escape char\"", &root, 201 root.reset(JSONReader().JsonToValue("\"\\xAQ invalid hex code\"", false,
250 false, false)); 202 false));
251 ASSERT_FALSE(root); 203 ASSERT_FALSE(root.get());
252 root = NULL; 204 root.reset(JSONReader().JsonToValue("not enough hex chars\\x1\"", false,
253 ASSERT_FALSE(JSONReader().JsonToValue("\"\\xAQ invalid hex code\"", &root, 205 false));
254 false, false)); 206 ASSERT_FALSE(root.get());
255 ASSERT_FALSE(root); 207 root.reset(JSONReader().JsonToValue("\"not enough escape chars\\u123\"",
256 root = NULL; 208 false, false));
257 ASSERT_FALSE(JSONReader().JsonToValue("not enough hex chars\\x1\"", &root, 209 ASSERT_FALSE(root.get());
258 false, false)); 210 root.reset(JSONReader().JsonToValue("\"extra backslash at end of input\\\"",
259 ASSERT_FALSE(root); 211 false, false));
260 root = NULL; 212 ASSERT_FALSE(root.get());
261 ASSERT_FALSE(JSONReader().JsonToValue("\"not enough escape chars\\u123\"",
262 &root, false, false));
263 ASSERT_FALSE(root);
264 root = NULL;
265 ASSERT_FALSE(JSONReader().JsonToValue("\"extra backslash at end of input\\\"",
266 &root, false, false));
267 ASSERT_FALSE(root);
268 213
269 // Basic array 214 // Basic array
270 root = NULL; 215 root.reset(JSONReader::Read("[true, false, null]", false));
271 ASSERT_TRUE(JSONReader::Read("[true, false, null]", &root, false)); 216 ASSERT_TRUE(root.get());
272 ASSERT_TRUE(root);
273 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 217 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
274 ListValue* list = static_cast<ListValue*>(root); 218 ListValue* list = static_cast<ListValue*>(root.get());
275 ASSERT_EQ(3U, list->GetSize()); 219 ASSERT_EQ(3U, list->GetSize());
276 220
277 // Test with trailing comma. Should be parsed the same as above. 221 // Test with trailing comma. Should be parsed the same as above.
278 Value* root2 = NULL; 222 scoped_ptr<Value> root2;
279 ASSERT_TRUE(JSONReader::Read("[true, false, null, ]", &root2, true)); 223 root2.reset(JSONReader::Read("[true, false, null, ]", true));
280 EXPECT_TRUE(root->Equals(root2)); 224 EXPECT_TRUE(root->Equals(root2.get()));
281 delete root;
282 delete root2;
283 225
284 // Empty array 226 // Empty array
285 root = NULL; 227 root.reset(JSONReader::Read("[]", false));
286 ASSERT_TRUE(JSONReader::Read("[]", &root, false)); 228 ASSERT_TRUE(root.get());
287 ASSERT_TRUE(root);
288 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 229 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
289 list = static_cast<ListValue*>(root); 230 list = static_cast<ListValue*>(root.get());
290 ASSERT_EQ(0U, list->GetSize()); 231 ASSERT_EQ(0U, list->GetSize());
291 delete root;
292 232
293 // Nested arrays 233 // Nested arrays
294 root = NULL; 234 root.reset(JSONReader::Read("[[true], [], [false, [], [null]], null]",
295 ASSERT_TRUE(JSONReader::Read("[[true], [], [false, [], [null]], null]", &root, 235 false));
296 false)); 236 ASSERT_TRUE(root.get());
297 ASSERT_TRUE(root);
298 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 237 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
299 list = static_cast<ListValue*>(root); 238 list = static_cast<ListValue*>(root.get());
300 ASSERT_EQ(4U, list->GetSize()); 239 ASSERT_EQ(4U, list->GetSize());
301 240
302 // Lots of trailing commas. 241 // Lots of trailing commas.
303 root2 = NULL; 242 root2.reset(JSONReader::Read("[[true], [], [false, [], [null, ] , ], null,]",
304 ASSERT_TRUE(JSONReader::Read("[[true], [], [false, [], [null, ] , ], null,]", 243 true));
305 &root2, true)); 244 EXPECT_TRUE(root->Equals(root2.get()));
306 EXPECT_TRUE(root->Equals(root2));
307 delete root;
308 delete root2;
309 245
310 // Invalid, missing close brace. 246 // Invalid, missing close brace.
311 root = NULL; 247 root.reset(JSONReader::Read("[[true], [], [false, [], [null]], null", false));
312 ASSERT_FALSE(JSONReader::Read("[[true], [], [false, [], [null]], null", &root, 248 ASSERT_FALSE(root.get());
313 false));
314 ASSERT_FALSE(root);
315 249
316 // Invalid, too many commas 250 // Invalid, too many commas
317 root = NULL; 251 root.reset(JSONReader::Read("[true,, null]", false));
318 ASSERT_FALSE(JSONReader::Read("[true,, null]", &root, false)); 252 ASSERT_FALSE(root.get());
319 ASSERT_FALSE(root); 253 root.reset(JSONReader::Read("[true,, null]", true));
320 ASSERT_FALSE(JSONReader::Read("[true,, null]", &root, true)); 254 ASSERT_FALSE(root.get());
321 ASSERT_FALSE(root);
322 255
323 // Invalid, no commas 256 // Invalid, no commas
324 root = NULL; 257 root.reset(JSONReader::Read("[true null]", false));
325 ASSERT_FALSE(JSONReader::Read("[true null]", &root, false)); 258 ASSERT_FALSE(root.get());
326 ASSERT_FALSE(root);
327 259
328 // Invalid, trailing comma 260 // Invalid, trailing comma
329 root = NULL; 261 root.reset(JSONReader::Read("[true,]", false));
330 ASSERT_FALSE(JSONReader::Read("[true,]", &root, false)); 262 ASSERT_FALSE(root.get());
331 ASSERT_FALSE(root);
332 263
333 // Valid if we set |allow_trailing_comma| to true. 264 // Valid if we set |allow_trailing_comma| to true.
334 EXPECT_TRUE(JSONReader::Read("[true,]", &root, true)); 265 root.reset(JSONReader::Read("[true,]", true));
335 ASSERT_TRUE(root); 266 ASSERT_TRUE(root.get());
336 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 267 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
337 list = static_cast<ListValue*>(root); 268 list = static_cast<ListValue*>(root.get());
338 EXPECT_EQ(1U, list->GetSize()); 269 EXPECT_EQ(1U, list->GetSize());
339 Value* tmp_value = NULL; 270 Value* tmp_value = NULL;
340 ASSERT_TRUE(list->Get(0, &tmp_value)); 271 ASSERT_TRUE(list->Get(0, &tmp_value));
341 EXPECT_TRUE(tmp_value->IsType(Value::TYPE_BOOLEAN)); 272 EXPECT_TRUE(tmp_value->IsType(Value::TYPE_BOOLEAN));
342 bool bool_value = false; 273 bool bool_value = false;
343 ASSERT_TRUE(tmp_value->GetAsBoolean(&bool_value)); 274 ASSERT_TRUE(tmp_value->GetAsBoolean(&bool_value));
344 EXPECT_TRUE(bool_value); 275 EXPECT_TRUE(bool_value);
345 delete root;
346 276
347 // Don't allow empty elements, even if |allow_trailing_comma| is 277 // Don't allow empty elements, even if |allow_trailing_comma| is
348 // true. 278 // true.
349 root = NULL; 279 root.reset(JSONReader::Read("[,]", true));
350 EXPECT_FALSE(JSONReader::Read("[,]", &root, true)); 280 EXPECT_FALSE(root.get());
351 EXPECT_FALSE(root); 281 root.reset(JSONReader::Read("[true,,]", true));
352 EXPECT_FALSE(JSONReader::Read("[true,,]", &root, true)); 282 EXPECT_FALSE(root.get());
353 EXPECT_FALSE(root); 283 root.reset(JSONReader::Read("[,true,]", true));
354 EXPECT_FALSE(JSONReader::Read("[,true,]", &root, true)); 284 EXPECT_FALSE(root.get());
355 EXPECT_FALSE(root); 285 root.reset(JSONReader::Read("[true,,false]", true));
356 EXPECT_FALSE(JSONReader::Read("[true,,false]", &root, true)); 286 EXPECT_FALSE(root.get());
357 EXPECT_FALSE(root);
358 287
359 // Test objects 288 // Test objects
360 root = NULL; 289 root.reset(JSONReader::Read("{}", false));
361 ASSERT_TRUE(JSONReader::Read("{}", &root, false)); 290 ASSERT_TRUE(root.get());
362 ASSERT_TRUE(root);
363 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 291 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY));
364 delete root;
365 292
366 root = NULL; 293 root.reset(JSONReader::Read(
367 ASSERT_TRUE(JSONReader::Read( 294 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\" }",
368 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\" }", &root,
369 false)); 295 false));
370 ASSERT_TRUE(root); 296 ASSERT_TRUE(root.get());
371 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 297 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY));
372 DictionaryValue* dict_val = static_cast<DictionaryValue*>(root); 298 DictionaryValue* dict_val = static_cast<DictionaryValue*>(root.get());
373 real_val = 0.0; 299 real_val = 0.0;
374 ASSERT_TRUE(dict_val->GetReal(L"number", &real_val)); 300 ASSERT_TRUE(dict_val->GetReal(L"number", &real_val));
375 ASSERT_DOUBLE_EQ(9.87654321, real_val); 301 ASSERT_DOUBLE_EQ(9.87654321, real_val);
376 Value* null_val = NULL; 302 Value* null_val = NULL;
377 ASSERT_TRUE(dict_val->Get(L"null", &null_val)); 303 ASSERT_TRUE(dict_val->Get(L"null", &null_val));
378 ASSERT_TRUE(null_val->IsType(Value::TYPE_NULL)); 304 ASSERT_TRUE(null_val->IsType(Value::TYPE_NULL));
379 str_val.clear(); 305 str_val.clear();
380 ASSERT_TRUE(dict_val->GetString(L"S", &str_val)); 306 ASSERT_TRUE(dict_val->GetString(L"S", &str_val));
381 ASSERT_EQ(L"str", str_val); 307 ASSERT_EQ(L"str", str_val);
382 308
383 root2 = NULL; 309 root2.reset(JSONReader::Read(
384 ASSERT_TRUE(JSONReader::Read( 310 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\", }", true));
385 "{\"number\":9.87654321, \"null\":null , \"\\x53\" : \"str\", }", &root2, 311 EXPECT_TRUE(root->Equals(root2.get()));
386 true));
387 EXPECT_TRUE(root->Equals(root2));
388 delete root;
389 delete root2;
390 312
391 // Test nesting 313 // Test nesting
392 root = NULL; 314 root.reset(JSONReader::Read(
393 ASSERT_TRUE(JSONReader::Read( 315 "{\"inner\":{\"array\":[true]},\"false\":false,\"d\":{}}", false));
394 "{\"inner\":{\"array\":[true]},\"false\":false,\"d\":{}}", &root, false)); 316 ASSERT_TRUE(root.get());
395 ASSERT_TRUE(root);
396 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 317 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY));
397 dict_val = static_cast<DictionaryValue*>(root); 318 dict_val = static_cast<DictionaryValue*>(root.get());
398 DictionaryValue* inner_dict = NULL; 319 DictionaryValue* inner_dict = NULL;
399 ASSERT_TRUE(dict_val->GetDictionary(L"inner", &inner_dict)); 320 ASSERT_TRUE(dict_val->GetDictionary(L"inner", &inner_dict));
400 ListValue* inner_array = NULL; 321 ListValue* inner_array = NULL;
401 ASSERT_TRUE(inner_dict->GetList(L"array", &inner_array)); 322 ASSERT_TRUE(inner_dict->GetList(L"array", &inner_array));
402 ASSERT_EQ(1U, inner_array->GetSize()); 323 ASSERT_EQ(1U, inner_array->GetSize());
403 bool_value = true; 324 bool_value = true;
404 ASSERT_TRUE(dict_val->GetBoolean(L"false", &bool_value)); 325 ASSERT_TRUE(dict_val->GetBoolean(L"false", &bool_value));
405 ASSERT_FALSE(bool_value); 326 ASSERT_FALSE(bool_value);
406 inner_dict = NULL; 327 inner_dict = NULL;
407 ASSERT_TRUE(dict_val->GetDictionary(L"d", &inner_dict)); 328 ASSERT_TRUE(dict_val->GetDictionary(L"d", &inner_dict));
408 329
409 root2 = NULL; 330 root2.reset(JSONReader::Read(
410 ASSERT_TRUE(JSONReader::Read( 331 "{\"inner\": {\"array\":[true] , },\"false\":false,\"d\":{},}", true));
411 "{\"inner\": {\"array\":[true] , },\"false\":false,\"d\":{},}", &root2, 332 EXPECT_TRUE(root->Equals(root2.get()));
412 true));
413 EXPECT_TRUE(root->Equals(root2));
414 delete root;
415 delete root2;
416 333
417 // Invalid, no closing brace 334 // Invalid, no closing brace
418 root = NULL; 335 root.reset(JSONReader::Read("{\"a\": true", false));
419 ASSERT_FALSE(JSONReader::Read("{\"a\": true", &root, false)); 336 ASSERT_FALSE(root.get());
420 ASSERT_FALSE(root);
421 337
422 // Invalid, keys must be quoted 338 // Invalid, keys must be quoted
423 root = NULL; 339 root.reset(JSONReader::Read("{foo:true}", false));
424 ASSERT_FALSE(JSONReader::Read("{foo:true}", &root, false)); 340 ASSERT_FALSE(root.get());
425 ASSERT_FALSE(root);
426 341
427 // Invalid, trailing comma 342 // Invalid, trailing comma
428 root = NULL; 343 root.reset(JSONReader::Read("{\"a\":true,}", false));
429 ASSERT_FALSE(JSONReader::Read("{\"a\":true,}", &root, false)); 344 ASSERT_FALSE(root.get());
430 ASSERT_FALSE(root);
431 345
432 // Invalid, too many commas 346 // Invalid, too many commas
433 root = NULL; 347 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", false));
434 ASSERT_FALSE(JSONReader::Read("{\"a\":true,,\"b\":false}", &root, false)); 348 ASSERT_FALSE(root.get());
435 ASSERT_FALSE(root); 349 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", true));
436 root = NULL; 350 ASSERT_FALSE(root.get());
437 ASSERT_FALSE(JSONReader::Read("{\"a\":true,,\"b\":false}", &root, true));
438 ASSERT_FALSE(root);
439 351
440 // Invalid, no separator 352 // Invalid, no separator
441 root = NULL; 353 root.reset(JSONReader::Read("{\"a\" \"b\"}", false));
442 ASSERT_FALSE(JSONReader::Read("{\"a\" \"b\"}", &root, false)); 354 ASSERT_FALSE(root.get());
443 ASSERT_FALSE(root);
444 355
445 // Invalid, lone comma. 356 // Invalid, lone comma.
446 root = NULL; 357 root.reset(JSONReader::Read("{,}", false));
447 ASSERT_FALSE(JSONReader::Read("{,}", &root, false)); 358 ASSERT_FALSE(root.get());
448 ASSERT_FALSE(root); 359 root.reset(JSONReader::Read("{,}", true));
449 ASSERT_FALSE(JSONReader::Read("{,}", &root, true)); 360 ASSERT_FALSE(root.get());
450 ASSERT_FALSE(root); 361 root.reset(JSONReader::Read("{\"a\":true,,}", true));
451 ASSERT_FALSE(JSONReader::Read("{\"a\":true,,}", &root, true)); 362 ASSERT_FALSE(root.get());
452 ASSERT_FALSE(root); 363 root.reset(JSONReader::Read("{,\"a\":true}", true));
453 ASSERT_FALSE(JSONReader::Read("{,\"a\":true}", &root, true)); 364 ASSERT_FALSE(root.get());
454 ASSERT_FALSE(root); 365 root.reset(JSONReader::Read("{\"a\":true,,\"b\":false}", true));
455 ASSERT_FALSE(JSONReader::Read("{\"a\":true,,\"b\":false}", &root, true)); 366 ASSERT_FALSE(root.get());
456 ASSERT_FALSE(root);
457 367
458 // Test stack overflow 368 // Test stack overflow
459 root = NULL;
460 std::string evil(1000000, '['); 369 std::string evil(1000000, '[');
461 evil.append(std::string(1000000, ']')); 370 evil.append(std::string(1000000, ']'));
462 ASSERT_FALSE(JSONReader::Read(evil, &root, false)); 371 root.reset(JSONReader::Read(evil, false));
463 ASSERT_FALSE(root); 372 ASSERT_FALSE(root.get());
464 373
465 // A few thousand adjacent lists is fine. 374 // A few thousand adjacent lists is fine.
466 std::string not_evil("["); 375 std::string not_evil("[");
467 not_evil.reserve(15010); 376 not_evil.reserve(15010);
468 for (int i = 0; i < 5000; ++i) { 377 for (int i = 0; i < 5000; ++i) {
469 not_evil.append("[],"); 378 not_evil.append("[],");
470 } 379 }
471 not_evil.append("[]]"); 380 not_evil.append("[]]");
472 ASSERT_TRUE(JSONReader::Read(not_evil, &root, false)); 381 root.reset(JSONReader::Read(not_evil, false));
473 ASSERT_TRUE(root); 382 ASSERT_TRUE(root.get());
474 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 383 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
475 list = static_cast<ListValue*>(root); 384 list = static_cast<ListValue*>(root.get());
476 ASSERT_EQ(5001U, list->GetSize()); 385 ASSERT_EQ(5001U, list->GetSize());
477 delete root;
478 386
479 // Test utf8 encoded input 387 // Test utf8 encoded input
480 root = NULL; 388 root.reset(JSONReader().JsonToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\"",
481 ASSERT_TRUE(JSONReader().JsonToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\"", &root,
482 false, false)); 389 false, false));
483 ASSERT_TRUE(root); 390 ASSERT_TRUE(root.get());
484 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 391 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
485 str_val.clear(); 392 str_val.clear();
486 ASSERT_TRUE(root->GetAsString(&str_val)); 393 ASSERT_TRUE(root->GetAsString(&str_val));
487 ASSERT_EQ(L"\x7f51\x9875", str_val); 394 ASSERT_EQ(L"\x7f51\x9875", str_val);
488 delete root;
489 395
490 // Test invalid utf8 encoded input 396 // Test invalid utf8 encoded input
491 root = NULL; 397 root.reset(JSONReader().JsonToValue("\"345\xb0\xa1\xb0\xa2\"",
492 ASSERT_FALSE(JSONReader().JsonToValue("\"345\xb0\xa1\xb0\xa2\"", &root, 398 false, false));
493 false, false)); 399 ASSERT_FALSE(root.get());
494 ASSERT_FALSE(JSONReader().JsonToValue("\"123\xc0\x81\"", &root, 400 root.reset(JSONReader().JsonToValue("\"123\xc0\x81\"",
495 false, false)); 401 false, false));
402 ASSERT_FALSE(root.get());
496 403
497 // Test invalid root objects. 404 // Test invalid root objects.
498 root = NULL; 405 root.reset(JSONReader::Read("null", false));
499 ASSERT_FALSE(JSONReader::Read("null", &root, false)); 406 ASSERT_FALSE(root.get());
500 ASSERT_FALSE(JSONReader::Read("true", &root, false)); 407 root.reset(JSONReader::Read("true", false));
501 ASSERT_FALSE(JSONReader::Read("10", &root, false)); 408 ASSERT_FALSE(root.get());
502 ASSERT_FALSE(JSONReader::Read("\"root\"", &root, false)); 409 root.reset(JSONReader::Read("10", false));
410 ASSERT_FALSE(root.get());
411 root.reset(JSONReader::Read("\"root\"", false));
412 ASSERT_FALSE(root.get());
503 } 413 }
504 414
505 TEST(JSONReaderTest, ErrorMessages) { 415 TEST(JSONReaderTest, ErrorMessages) {
506 // Error strings should not be modified in case of success. 416 // Error strings should not be modified in case of success.
507 std::string error_message; 417 std::string error_message;
508 Value* root = NULL; 418 scoped_ptr<Value> root;
509 EXPECT_TRUE(JSONReader::ReadAndReturnError("[42]", &root, false, 419 root.reset(JSONReader::ReadAndReturnError("[42]", false, &error_message));
510 &error_message));
511 EXPECT_TRUE(error_message.empty()); 420 EXPECT_TRUE(error_message.empty());
512 421
513 // Test line and column counting 422 // Test line and column counting
514 const char* big_json = "[\n0,\n1,\n2,\n3,4,5,6 7,\n8,\n9\n]"; 423 const char* big_json = "[\n0,\n1,\n2,\n3,4,5,6 7,\n8,\n9\n]";
515 // error here --------------------------------^ 424 // error here --------------------------------^
516 EXPECT_FALSE(JSONReader::ReadAndReturnError(big_json, &root, false, 425 root.reset(JSONReader::ReadAndReturnError(big_json, false, &error_message));
517 &error_message)); 426 EXPECT_FALSE(root.get());
518 EXPECT_EQ(JSONReader::FormatErrorMessage(5, 9, JSONReader::kSyntaxError), 427 EXPECT_EQ(JSONReader::FormatErrorMessage(5, 9, JSONReader::kSyntaxError),
519 error_message); 428 error_message);
520 429
521 // Test each of the error conditions 430 // Test each of the error conditions
522 EXPECT_FALSE(JSONReader::ReadAndReturnError("{},{}", &root, false, 431 root.reset(JSONReader::ReadAndReturnError("{},{}", false, &error_message));
523 &error_message)); 432 EXPECT_FALSE(root.get());
524 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 3, 433 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 3,
525 JSONReader::kUnexpectedDataAfterRoot), error_message); 434 JSONReader::kUnexpectedDataAfterRoot), error_message);
526 435
527 std::string nested_json; 436 std::string nested_json;
528 for (int i = 0; i < 101; ++i) { 437 for (int i = 0; i < 101; ++i) {
529 nested_json.insert(nested_json.begin(), '['); 438 nested_json.insert(nested_json.begin(), '[');
530 nested_json.append(1, ']'); 439 nested_json.append(1, ']');
531 } 440 }
532 EXPECT_FALSE(JSONReader::ReadAndReturnError(nested_json, &root, false, 441 root.reset(JSONReader::ReadAndReturnError(nested_json, false,
533 &error_message)); 442 &error_message));
443 EXPECT_FALSE(root.get());
534 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 101, JSONReader::kTooMuchNesting), 444 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 101, JSONReader::kTooMuchNesting),
535 error_message); 445 error_message);
536 446
537 EXPECT_FALSE(JSONReader::ReadAndReturnError("42", &root, false, 447 root.reset(JSONReader::ReadAndReturnError("42", false, &error_message));
538 &error_message)); 448 EXPECT_FALSE(root.get());
539 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 1, 449 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 1,
540 JSONReader::kBadRootElementType), error_message); 450 JSONReader::kBadRootElementType), error_message);
541 451
542 EXPECT_FALSE(JSONReader::ReadAndReturnError("[1,]", &root, false, 452 root.reset(JSONReader::ReadAndReturnError("[1,]", false, &error_message));
543 &error_message)); 453 EXPECT_FALSE(root.get());
544 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 4, JSONReader::kTrailingComma), 454 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 4, JSONReader::kTrailingComma),
545 error_message); 455 error_message);
546 456
547 EXPECT_FALSE(JSONReader::ReadAndReturnError("{foo:\"bar\"}", &root, false, 457 root.reset(JSONReader::ReadAndReturnError("{foo:\"bar\"}", false,
548 &error_message)); 458 &error_message));
459 EXPECT_FALSE(root.get());
549 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 2, 460 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 2,
550 JSONReader::kUnquotedDictionaryKey), error_message); 461 JSONReader::kUnquotedDictionaryKey), error_message);
551 462
552 EXPECT_FALSE(JSONReader::ReadAndReturnError("{\"foo\":\"bar\",}", &root, 463 root.reset(JSONReader::ReadAndReturnError("{\"foo\":\"bar\",}", false,
553 false, &error_message)); 464 &error_message));
465 EXPECT_FALSE(root.get());
554 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 14, JSONReader::kTrailingComma), 466 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 14, JSONReader::kTrailingComma),
555 error_message); 467 error_message);
556 468
557 EXPECT_FALSE(JSONReader::ReadAndReturnError("[nu]", &root, false, 469 root.reset(JSONReader::ReadAndReturnError("[nu]", false, &error_message));
558 &error_message)); 470 EXPECT_FALSE(root.get());
559 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 2, JSONReader::kSyntaxError), 471 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 2, JSONReader::kSyntaxError),
560 error_message); 472 error_message);
561 473
562 EXPECT_FALSE(JSONReader::ReadAndReturnError("[\"xxx\\xq\"]", &root, false, 474 root.reset(JSONReader::ReadAndReturnError("[\"xxx\\xq\"]", false,
563 &error_message)); 475 &error_message));
476 EXPECT_FALSE(root.get());
564 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape), 477 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape),
565 error_message); 478 error_message);
566 479
567 EXPECT_FALSE(JSONReader::ReadAndReturnError("[\"xxx\\uq\"]", &root, false, 480 root.reset(JSONReader::ReadAndReturnError("[\"xxx\\uq\"]", false,
568 &error_message)); 481 &error_message));
482 EXPECT_FALSE(root.get());
569 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape), 483 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape),
570 error_message); 484 error_message);
571 485
572 EXPECT_FALSE(JSONReader::ReadAndReturnError("[\"xxx\\q\"]", &root, false, 486 root.reset(JSONReader::ReadAndReturnError("[\"xxx\\q\"]", false,
573 &error_message)); 487 &error_message));
488 EXPECT_FALSE(root.get());
574 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape), 489 EXPECT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape),
575 error_message); 490 error_message);
576 491
577 delete root;
578 } 492 }
OLDNEW
« no previous file with comments | « base/json_reader.cc ('k') | base/values.h » ('j') | chrome/common/json_value_serializer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698