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

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

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

Powered by Google App Engine
This is Rietveld 408576698