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

Side by Side Diff: base/json_reader_unittest.cc

Issue 13169: Add error messages to JSONReader and friends. This required a bit of refactor... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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 | Annotate | Revision Log
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/values.h" 7 #include "base/values.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 9
10 TEST(JSONReaderTest, Reading) { 10 TEST(JSONReaderTest, Reading) {
11 // some whitespace checking 11 // some whitespace checking
12 Value* root = NULL; 12 Value* root = NULL;
13 ASSERT_TRUE(JSONReader::JsonToValue(" null ", &root, false, false)); 13 ASSERT_TRUE(JSONReader().JsonToValue(" null ", &root, false, false));
14 ASSERT_TRUE(root); 14 ASSERT_TRUE(root);
15 ASSERT_TRUE(root->IsType(Value::TYPE_NULL)); 15 ASSERT_TRUE(root->IsType(Value::TYPE_NULL));
16 delete root; 16 delete root;
17 17
18 // Invalid JSON string 18 // Invalid JSON string
19 root = NULL; 19 root = NULL;
20 ASSERT_FALSE(JSONReader::JsonToValue("nu", &root, false, false)); 20 ASSERT_FALSE(JSONReader().JsonToValue("nu", &root, false, false));
21 ASSERT_FALSE(root); 21 ASSERT_FALSE(root);
22 22
23 // Simple bool 23 // Simple bool
24 root = NULL; 24 root = NULL;
25 ASSERT_TRUE(JSONReader::JsonToValue("true ", &root, false, false)); 25 ASSERT_TRUE(JSONReader().JsonToValue("true ", &root, false, false));
26 ASSERT_TRUE(root); 26 ASSERT_TRUE(root);
27 ASSERT_TRUE(root->IsType(Value::TYPE_BOOLEAN)); 27 ASSERT_TRUE(root->IsType(Value::TYPE_BOOLEAN));
28 delete root; 28 delete root;
29 29
30 // Test number formats 30 // Test number formats
31 root = NULL; 31 root = NULL;
32 ASSERT_TRUE(JSONReader::JsonToValue("43", &root, false, false)); 32 ASSERT_TRUE(JSONReader().JsonToValue("43", &root, false, false));
33 ASSERT_TRUE(root); 33 ASSERT_TRUE(root);
34 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 34 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
35 int int_val = 0; 35 int int_val = 0;
36 ASSERT_TRUE(root->GetAsInteger(&int_val)); 36 ASSERT_TRUE(root->GetAsInteger(&int_val));
37 ASSERT_EQ(43, int_val); 37 ASSERT_EQ(43, int_val);
38 delete root; 38 delete root;
39 39
40 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. 40 // According to RFC4627, oct, hex, and leading zeros are invalid JSON.
41 root = NULL; 41 root = NULL;
42 ASSERT_FALSE(JSONReader::JsonToValue("043", &root, false, false)); 42 ASSERT_FALSE(JSONReader().JsonToValue("043", &root, false, false));
43 ASSERT_FALSE(root); 43 ASSERT_FALSE(root);
44 root = NULL; 44 root = NULL;
45 ASSERT_FALSE(JSONReader::JsonToValue("0x43", &root, false, false)); 45 ASSERT_FALSE(JSONReader().JsonToValue("0x43", &root, false, false));
46 ASSERT_FALSE(root); 46 ASSERT_FALSE(root);
47 root = NULL; 47 root = NULL;
48 ASSERT_FALSE(JSONReader::JsonToValue("00", &root, false, false)); 48 ASSERT_FALSE(JSONReader().JsonToValue("00", &root, false, false));
49 ASSERT_FALSE(root); 49 ASSERT_FALSE(root);
50 50
51 // Test 0 (which needs to be special cased because of the leading zero 51 // Test 0 (which needs to be special cased because of the leading zero
52 // clause). 52 // clause).
53 root = NULL; 53 root = NULL;
54 ASSERT_TRUE(JSONReader::JsonToValue("0", &root, false, false)); 54 ASSERT_TRUE(JSONReader().JsonToValue("0", &root, false, false));
55 ASSERT_TRUE(root); 55 ASSERT_TRUE(root);
56 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 56 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
57 int_val = 1; 57 int_val = 1;
58 ASSERT_TRUE(root->GetAsInteger(&int_val)); 58 ASSERT_TRUE(root->GetAsInteger(&int_val));
59 ASSERT_EQ(0, int_val); 59 ASSERT_EQ(0, int_val);
60 delete root; 60 delete root;
61 61
62 // Numbers that overflow ints should succeed, being internally promoted to 62 // Numbers that overflow ints should succeed, being internally promoted to
63 // storage as doubles 63 // storage as doubles
64 root = NULL; 64 root = NULL;
65 ASSERT_TRUE(JSONReader::JsonToValue("2147483648", &root, false, false)); 65 ASSERT_TRUE(JSONReader().JsonToValue("2147483648", &root, false, false));
66 ASSERT_TRUE(root); 66 ASSERT_TRUE(root);
67 double real_val; 67 double real_val;
68 #ifdef ARCH_CPU_32_BITS 68 #ifdef ARCH_CPU_32_BITS
69 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 69 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
70 real_val = 0.0; 70 real_val = 0.0;
71 ASSERT_TRUE(root->GetAsReal(&real_val)); 71 ASSERT_TRUE(root->GetAsReal(&real_val));
72 ASSERT_DOUBLE_EQ(2147483648.0, real_val); 72 ASSERT_DOUBLE_EQ(2147483648.0, real_val);
73 #else 73 #else
74 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 74 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
75 int_val = 0; 75 int_val = 0;
76 ASSERT_TRUE(root->GetAsInteger(&int_val)); 76 ASSERT_TRUE(root->GetAsInteger(&int_val));
77 ASSERT_EQ(2147483648, int_val); 77 ASSERT_EQ(2147483648, int_val);
78 #endif 78 #endif
79 delete root; 79 delete root;
80 root = NULL; 80 root = NULL;
81 ASSERT_TRUE(JSONReader::JsonToValue("-2147483649", &root, false, false)); 81 ASSERT_TRUE(JSONReader().JsonToValue("-2147483649", &root, false, false));
82 ASSERT_TRUE(root); 82 ASSERT_TRUE(root);
83 #ifdef ARCH_CPU_32_BITS 83 #ifdef ARCH_CPU_32_BITS
84 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 84 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
85 real_val = 0.0; 85 real_val = 0.0;
86 ASSERT_TRUE(root->GetAsReal(&real_val)); 86 ASSERT_TRUE(root->GetAsReal(&real_val));
87 ASSERT_DOUBLE_EQ(-2147483649.0, real_val); 87 ASSERT_DOUBLE_EQ(-2147483649.0, real_val);
88 #else 88 #else
89 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER)); 89 ASSERT_TRUE(root->IsType(Value::TYPE_INTEGER));
90 int_val = 0; 90 int_val = 0;
91 ASSERT_TRUE(root->GetAsInteger(&int_val)); 91 ASSERT_TRUE(root->GetAsInteger(&int_val));
92 ASSERT_EQ(-2147483649, int_val); 92 ASSERT_EQ(-2147483649, int_val);
93 #endif 93 #endif
94 delete root; 94 delete root;
95 95
96 // Parse a double 96 // Parse a double
97 root = NULL; 97 root = NULL;
98 ASSERT_TRUE(JSONReader::JsonToValue("43.1", &root, false, false)); 98 ASSERT_TRUE(JSONReader().JsonToValue("43.1", &root, false, false));
99 ASSERT_TRUE(root); 99 ASSERT_TRUE(root);
100 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 100 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
101 real_val = 0.0; 101 real_val = 0.0;
102 ASSERT_TRUE(root->GetAsReal(&real_val)); 102 ASSERT_TRUE(root->GetAsReal(&real_val));
103 ASSERT_DOUBLE_EQ(43.1, real_val); 103 ASSERT_DOUBLE_EQ(43.1, real_val);
104 delete root; 104 delete root;
105 105
106 root = NULL; 106 root = NULL;
107 ASSERT_TRUE(JSONReader::JsonToValue("4.3e-1", &root, false, false)); 107 ASSERT_TRUE(JSONReader().JsonToValue("4.3e-1", &root, false, false));
108 ASSERT_TRUE(root); 108 ASSERT_TRUE(root);
109 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 109 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
110 real_val = 0.0; 110 real_val = 0.0;
111 ASSERT_TRUE(root->GetAsReal(&real_val)); 111 ASSERT_TRUE(root->GetAsReal(&real_val));
112 ASSERT_DOUBLE_EQ(.43, real_val); 112 ASSERT_DOUBLE_EQ(.43, real_val);
113 delete root; 113 delete root;
114 114
115 root = NULL; 115 root = NULL;
116 ASSERT_TRUE(JSONReader::JsonToValue("2.1e0", &root, false, false)); 116 ASSERT_TRUE(JSONReader().JsonToValue("2.1e0", &root, false, false));
117 ASSERT_TRUE(root); 117 ASSERT_TRUE(root);
118 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 118 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
119 real_val = 0.0; 119 real_val = 0.0;
120 ASSERT_TRUE(root->GetAsReal(&real_val)); 120 ASSERT_TRUE(root->GetAsReal(&real_val));
121 ASSERT_DOUBLE_EQ(2.1, real_val); 121 ASSERT_DOUBLE_EQ(2.1, real_val);
122 delete root; 122 delete root;
123 123
124 root = NULL; 124 root = NULL;
125 ASSERT_TRUE(JSONReader::JsonToValue("2.1e+0001", &root, false, false)); 125 ASSERT_TRUE(JSONReader().JsonToValue("2.1e+0001", &root, false, false));
126 ASSERT_TRUE(root); 126 ASSERT_TRUE(root);
127 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 127 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
128 real_val = 0.0; 128 real_val = 0.0;
129 ASSERT_TRUE(root->GetAsReal(&real_val)); 129 ASSERT_TRUE(root->GetAsReal(&real_val));
130 ASSERT_DOUBLE_EQ(21.0, real_val); 130 ASSERT_DOUBLE_EQ(21.0, real_val);
131 delete root; 131 delete root;
132 132
133 root = NULL; 133 root = NULL;
134 ASSERT_TRUE(JSONReader::JsonToValue("0.01", &root, false, false)); 134 ASSERT_TRUE(JSONReader().JsonToValue("0.01", &root, false, false));
135 ASSERT_TRUE(root); 135 ASSERT_TRUE(root);
136 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 136 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
137 real_val = 0.0; 137 real_val = 0.0;
138 ASSERT_TRUE(root->GetAsReal(&real_val)); 138 ASSERT_TRUE(root->GetAsReal(&real_val));
139 ASSERT_DOUBLE_EQ(0.01, real_val); 139 ASSERT_DOUBLE_EQ(0.01, real_val);
140 delete root; 140 delete root;
141 141
142 root = NULL; 142 root = NULL;
143 ASSERT_TRUE(JSONReader::JsonToValue("1.00", &root, false, false)); 143 ASSERT_TRUE(JSONReader().JsonToValue("1.00", &root, false, false));
144 ASSERT_TRUE(root); 144 ASSERT_TRUE(root);
145 ASSERT_TRUE(root->IsType(Value::TYPE_REAL)); 145 ASSERT_TRUE(root->IsType(Value::TYPE_REAL));
146 real_val = 0.0; 146 real_val = 0.0;
147 ASSERT_TRUE(root->GetAsReal(&real_val)); 147 ASSERT_TRUE(root->GetAsReal(&real_val));
148 ASSERT_DOUBLE_EQ(1.0, real_val); 148 ASSERT_DOUBLE_EQ(1.0, real_val);
149 delete root; 149 delete root;
150 150
151 // Fractional parts must have a digit before and after the decimal point. 151 // Fractional parts must have a digit before and after the decimal point.
152 root = NULL; 152 root = NULL;
153 ASSERT_FALSE(JSONReader::JsonToValue("1.", &root, false, false)); 153 ASSERT_FALSE(JSONReader().JsonToValue("1.", &root, false, false));
154 ASSERT_FALSE(root); 154 ASSERT_FALSE(root);
155 root = NULL; 155 root = NULL;
156 ASSERT_FALSE(JSONReader::JsonToValue(".1", &root, false, false)); 156 ASSERT_FALSE(JSONReader().JsonToValue(".1", &root, false, false));
157 ASSERT_FALSE(root); 157 ASSERT_FALSE(root);
158 root = NULL; 158 root = NULL;
159 ASSERT_FALSE(JSONReader::JsonToValue("1.e10", &root, false, false)); 159 ASSERT_FALSE(JSONReader().JsonToValue("1.e10", &root, false, false));
160 ASSERT_FALSE(root); 160 ASSERT_FALSE(root);
161 161
162 // Exponent must have a digit following the 'e'. 162 // Exponent must have a digit following the 'e'.
163 root = NULL; 163 root = NULL;
164 ASSERT_FALSE(JSONReader::JsonToValue("1e", &root, false, false)); 164 ASSERT_FALSE(JSONReader().JsonToValue("1e", &root, false, false));
165 ASSERT_FALSE(root); 165 ASSERT_FALSE(root);
166 root = NULL; 166 root = NULL;
167 ASSERT_FALSE(JSONReader::JsonToValue("1E", &root, false, false)); 167 ASSERT_FALSE(JSONReader().JsonToValue("1E", &root, false, false));
168 ASSERT_FALSE(root); 168 ASSERT_FALSE(root);
169 root = NULL; 169 root = NULL;
170 ASSERT_FALSE(JSONReader::JsonToValue("1e1.", &root, false, false)); 170 ASSERT_FALSE(JSONReader().JsonToValue("1e1.", &root, false, false));
171 ASSERT_FALSE(root); 171 ASSERT_FALSE(root);
172 root = NULL; 172 root = NULL;
173 ASSERT_FALSE(JSONReader::JsonToValue("1e1.0", &root, false, false)); 173 ASSERT_FALSE(JSONReader().JsonToValue("1e1.0", &root, false, false));
174 ASSERT_FALSE(root); 174 ASSERT_FALSE(root);
175 175
176 // INF/-INF/NaN are not valid 176 // INF/-INF/NaN are not valid
177 root = NULL; 177 root = NULL;
178 ASSERT_FALSE(JSONReader::JsonToValue("1e1000", &root, false, false)); 178 ASSERT_FALSE(JSONReader().JsonToValue("1e1000", &root, false, false));
179 ASSERT_FALSE(root); 179 ASSERT_FALSE(root);
180 root = NULL; 180 root = NULL;
181 ASSERT_FALSE(JSONReader::JsonToValue("-1e1000", &root, false, false)); 181 ASSERT_FALSE(JSONReader().JsonToValue("-1e1000", &root, false, false));
182 ASSERT_FALSE(root); 182 ASSERT_FALSE(root);
183 root = NULL; 183 root = NULL;
184 ASSERT_FALSE(JSONReader::JsonToValue("NaN", &root, false, false)); 184 ASSERT_FALSE(JSONReader().JsonToValue("NaN", &root, false, false));
185 ASSERT_FALSE(root); 185 ASSERT_FALSE(root);
186 root = NULL; 186 root = NULL;
187 ASSERT_FALSE(JSONReader::JsonToValue("nan", &root, false, false)); 187 ASSERT_FALSE(JSONReader().JsonToValue("nan", &root, false, false));
188 ASSERT_FALSE(root); 188 ASSERT_FALSE(root);
189 root = NULL; 189 root = NULL;
190 ASSERT_FALSE(JSONReader::JsonToValue("inf", &root, false, false)); 190 ASSERT_FALSE(JSONReader().JsonToValue("inf", &root, false, false));
191 ASSERT_FALSE(root); 191 ASSERT_FALSE(root);
192 192
193 // Invalid number formats 193 // Invalid number formats
194 root = NULL; 194 root = NULL;
195 ASSERT_FALSE(JSONReader::JsonToValue("4.3.1", &root, false, false)); 195 ASSERT_FALSE(JSONReader().JsonToValue("4.3.1", &root, false, false));
196 ASSERT_FALSE(root); 196 ASSERT_FALSE(root);
197 root = NULL; 197 root = NULL;
198 ASSERT_FALSE(JSONReader::JsonToValue("4e3.1", &root, false, false)); 198 ASSERT_FALSE(JSONReader().JsonToValue("4e3.1", &root, false, false));
199 ASSERT_FALSE(root); 199 ASSERT_FALSE(root);
200 200
201 // Test string parser 201 // Test string parser
202 root = NULL; 202 root = NULL;
203 ASSERT_TRUE(JSONReader::JsonToValue("\"hello world\"", &root, false, false)); 203 ASSERT_TRUE(JSONReader().JsonToValue("\"hello world\"", &root, false, false));
204 ASSERT_TRUE(root); 204 ASSERT_TRUE(root);
205 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 205 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
206 std::wstring str_val; 206 std::wstring str_val;
207 ASSERT_TRUE(root->GetAsString(&str_val)); 207 ASSERT_TRUE(root->GetAsString(&str_val));
208 ASSERT_EQ(L"hello world", str_val); 208 ASSERT_EQ(L"hello world", str_val);
209 delete root; 209 delete root;
210 210
211 // Empty string 211 // Empty string
212 root = NULL; 212 root = NULL;
213 ASSERT_TRUE(JSONReader::JsonToValue("\"\"", &root, false, false)); 213 ASSERT_TRUE(JSONReader().JsonToValue("\"\"", &root, false, false));
214 ASSERT_TRUE(root); 214 ASSERT_TRUE(root);
215 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 215 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
216 str_val.clear(); 216 str_val.clear();
217 ASSERT_TRUE(root->GetAsString(&str_val)); 217 ASSERT_TRUE(root->GetAsString(&str_val));
218 ASSERT_EQ(L"", str_val); 218 ASSERT_EQ(L"", str_val);
219 delete root; 219 delete root;
220 220
221 // Test basic string escapes 221 // Test basic string escapes
222 root = NULL; 222 root = NULL;
223 ASSERT_TRUE(JSONReader::JsonToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\"", &roo t, 223 ASSERT_TRUE(JSONReader().JsonToValue("\" \\\"\\\\\\/\\b\\f\\n\\r\\t\\v\"",
224 false, false)); 224 &root, false, false));
225 ASSERT_TRUE(root); 225 ASSERT_TRUE(root);
226 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 226 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
227 str_val.clear(); 227 str_val.clear();
228 ASSERT_TRUE(root->GetAsString(&str_val)); 228 ASSERT_TRUE(root->GetAsString(&str_val));
229 ASSERT_EQ(L" \"\\/\b\f\n\r\t\v", str_val); 229 ASSERT_EQ(L" \"\\/\b\f\n\r\t\v", str_val);
230 delete root; 230 delete root;
231 231
232 // Test hex and unicode escapes including the null character. 232 // Test hex and unicode escapes including the null character.
233 root = NULL; 233 root = NULL;
234 ASSERT_TRUE(JSONReader::JsonToValue("\"\\x41\\x00\\u1234\"", &root, false, 234 ASSERT_TRUE(JSONReader().JsonToValue("\"\\x41\\x00\\u1234\"", &root, false,
235 false)); 235 false));
236 ASSERT_TRUE(root); 236 ASSERT_TRUE(root);
237 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 237 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
238 str_val.clear(); 238 str_val.clear();
239 ASSERT_TRUE(root->GetAsString(&str_val)); 239 ASSERT_TRUE(root->GetAsString(&str_val));
240 ASSERT_EQ(std::wstring(L"A\0\x1234", 3), str_val); 240 ASSERT_EQ(std::wstring(L"A\0\x1234", 3), str_val);
241 delete root; 241 delete root;
242 242
243 // Test invalid strings 243 // Test invalid strings
244 root = NULL; 244 root = NULL;
245 ASSERT_FALSE(JSONReader::JsonToValue("\"no closing quote", &root, false, 245 ASSERT_FALSE(JSONReader().JsonToValue("\"no closing quote", &root, false,
246 false)); 246 false));
247 ASSERT_FALSE(root); 247 ASSERT_FALSE(root);
248 root = NULL; 248 root = NULL;
249 ASSERT_FALSE(JSONReader::JsonToValue("\"\\z invalid escape char\"", &root, 249 ASSERT_FALSE(JSONReader().JsonToValue("\"\\z invalid escape char\"", &root,
250 false, false)); 250 false, false));
251 ASSERT_FALSE(root); 251 ASSERT_FALSE(root);
252 root = NULL; 252 root = NULL;
253 ASSERT_FALSE(JSONReader::JsonToValue("\"\\xAQ invalid hex code\"", &root, 253 ASSERT_FALSE(JSONReader().JsonToValue("\"\\xAQ invalid hex code\"", &root,
254 false, false)); 254 false, false));
255 ASSERT_FALSE(root); 255 ASSERT_FALSE(root);
256 root = NULL; 256 root = NULL;
257 ASSERT_FALSE(JSONReader::JsonToValue("not enough hex chars\\x1\"", &root, 257 ASSERT_FALSE(JSONReader().JsonToValue("not enough hex chars\\x1\"", &root,
258 false, false)); 258 false, false));
259 ASSERT_FALSE(root); 259 ASSERT_FALSE(root);
260 root = NULL; 260 root = NULL;
261 ASSERT_FALSE(JSONReader::JsonToValue("\"not enough escape chars\\u123\"", 261 ASSERT_FALSE(JSONReader().JsonToValue("\"not enough escape chars\\u123\"",
262 &root, false, false)); 262 &root, false, false));
263 ASSERT_FALSE(root); 263 ASSERT_FALSE(root);
264 root = NULL; 264 root = NULL;
265 ASSERT_FALSE(JSONReader::JsonToValue("\"extra backslash at end of input\\\"", 265 ASSERT_FALSE(JSONReader().JsonToValue("\"extra backslash at end of input\\\"",
266 &root, false, false)); 266 &root, false, false));
267 ASSERT_FALSE(root); 267 ASSERT_FALSE(root);
268 268
269 // Basic array 269 // Basic array
270 root = NULL; 270 root = NULL;
271 ASSERT_TRUE(JSONReader::Read("[true, false, null]", &root, false)); 271 ASSERT_TRUE(JSONReader::Read("[true, false, null]", &root, false));
272 ASSERT_TRUE(root); 272 ASSERT_TRUE(root);
273 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 273 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
274 ListValue* list = static_cast<ListValue*>(root); 274 ListValue* list = static_cast<ListValue*>(root);
275 ASSERT_EQ(3U, list->GetSize()); 275 ASSERT_EQ(3U, list->GetSize());
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 not_evil.append("[]]"); 471 not_evil.append("[]]");
472 ASSERT_TRUE(JSONReader::Read(not_evil, &root, false)); 472 ASSERT_TRUE(JSONReader::Read(not_evil, &root, false));
473 ASSERT_TRUE(root); 473 ASSERT_TRUE(root);
474 ASSERT_TRUE(root->IsType(Value::TYPE_LIST)); 474 ASSERT_TRUE(root->IsType(Value::TYPE_LIST));
475 list = static_cast<ListValue*>(root); 475 list = static_cast<ListValue*>(root);
476 ASSERT_EQ(5001U, list->GetSize()); 476 ASSERT_EQ(5001U, list->GetSize());
477 delete root; 477 delete root;
478 478
479 // Test utf8 encoded input 479 // Test utf8 encoded input
480 root = NULL; 480 root = NULL;
481 ASSERT_TRUE(JSONReader::JsonToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\"", &root, 481 ASSERT_TRUE(JSONReader().JsonToValue("\"\xe7\xbd\x91\xe9\xa1\xb5\"", &root,
482 false, false)); 482 false, false));
483 ASSERT_TRUE(root); 483 ASSERT_TRUE(root);
484 ASSERT_TRUE(root->IsType(Value::TYPE_STRING)); 484 ASSERT_TRUE(root->IsType(Value::TYPE_STRING));
485 str_val.clear(); 485 str_val.clear();
486 ASSERT_TRUE(root->GetAsString(&str_val)); 486 ASSERT_TRUE(root->GetAsString(&str_val));
487 ASSERT_EQ(L"\x7f51\x9875", str_val); 487 ASSERT_EQ(L"\x7f51\x9875", str_val);
488 delete root; 488 delete root;
489 489
490 // Test invalid utf8 encoded input 490 // Test invalid utf8 encoded input
491 root = NULL; 491 root = NULL;
492 ASSERT_FALSE(JSONReader::JsonToValue("\"345\xb0\xa1\xb0\xa2\"", &root, 492 ASSERT_FALSE(JSONReader().JsonToValue("\"345\xb0\xa1\xb0\xa2\"", &root,
493 false, false)); 493 false, false));
494 ASSERT_FALSE(JSONReader::JsonToValue("\"123\xc0\x81\"", &root, 494 ASSERT_FALSE(JSONReader().JsonToValue("\"123\xc0\x81\"", &root,
495 false, false)); 495 false, false));
496 496
497 // Test invalid root objects. 497 // Test invalid root objects.
498 root = NULL; 498 root = NULL;
499 ASSERT_FALSE(JSONReader::Read("null", &root, false)); 499 ASSERT_FALSE(JSONReader::Read("null", &root, false));
500 ASSERT_FALSE(JSONReader::Read("true", &root, false)); 500 ASSERT_FALSE(JSONReader::Read("true", &root, false));
501 ASSERT_FALSE(JSONReader::Read("10", &root, false)); 501 ASSERT_FALSE(JSONReader::Read("10", &root, false));
502 ASSERT_FALSE(JSONReader::Read("\"root\"", &root, false)); 502 ASSERT_FALSE(JSONReader::Read("\"root\"", &root, false));
503 } 503 }
504
505 TEST(JSONReaderTest, ErrorMessages) {
506 // Error strings should not be modified in case of success.
507 std::string error_message;
508 Value* root = NULL;
509 ASSERT_TRUE(JSONReader::ReadAndReturnError("[42]", &root, false,
510 &error_message));
511 ASSERT_TRUE(error_message.empty());
512
513 // Test line and column counting
514 const char* big_json = "[\n0,\n1,\n2,\n3,4,5,6 7,\n8,\n9\n]";
515 // error here --------------------------------^
516 ASSERT_FALSE(JSONReader::ReadAndReturnError(big_json, &root, false,
517 &error_message));
518 ASSERT_EQ(JSONReader::FormatErrorMessage(5, 9, JSONReader::kSyntaxError),
519 error_message);
520
521 // Test each of the error conditions
522 ASSERT_FALSE(JSONReader::ReadAndReturnError("{},{}", &root, false,
523 &error_message));
524 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 3,
525 JSONReader::kUnexpectedDataAfterRoot), error_message);
526
527 std::string nested_json;
528 for (int i = 0; i < 101; ++i) {
529 nested_json.insert(nested_json.begin(), '[');
530 nested_json.append(1, ']');
531 }
532 ASSERT_FALSE(JSONReader::ReadAndReturnError(nested_json, &root, false,
533 &error_message));
534 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 101, JSONReader::kTooMuchNesting),
535 error_message);
536
537 ASSERT_FALSE(JSONReader::ReadAndReturnError("42", &root, false,
538 &error_message));
539 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 1,
540 JSONReader::kBadRootElementType), error_message);
541
542 ASSERT_FALSE(JSONReader::ReadAndReturnError("[1,]", &root, false,
543 &error_message));
544 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 4, JSONReader::kTrailingComma),
545 error_message);
546
547 ASSERT_FALSE(JSONReader::ReadAndReturnError("{foo:\"bar\"}", &root, false,
548 &error_message));
549 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 2,
550 JSONReader::kUnquotedDictionaryKey), error_message);
551
552 ASSERT_FALSE(JSONReader::ReadAndReturnError("{\"foo\":\"bar\",}", &root,
553 false, &error_message));
554 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 14, JSONReader::kTrailingComma),
555 error_message);
556
557 ASSERT_FALSE(JSONReader::ReadAndReturnError("[nu]", &root, false,
558 &error_message));
559 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 2, JSONReader::kSyntaxError),
560 error_message);
561
562 ASSERT_FALSE(JSONReader::ReadAndReturnError("[\"xxx\\xq\"]", &root, false,
563 &error_message));
564 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape),
565 error_message);
566
567 ASSERT_FALSE(JSONReader::ReadAndReturnError("[\"xxx\\uq\"]", &root, false,
568 &error_message));
569 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape),
570 error_message);
571
572 ASSERT_FALSE(JSONReader::ReadAndReturnError("[\"xxx\\q\"]", &root, false,
573 &error_message));
574 ASSERT_EQ(JSONReader::FormatErrorMessage(1, 7, JSONReader::kInvalidEscape),
575 error_message);
576 }
OLDNEW
« base/json_reader.h ('K') | « base/json_reader.cc ('k') | base/values.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698