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