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

Side by Side Diff: chrome/common/json_value_serializer_unittest.cc

Issue 1120006: detect preferences errors (Closed)
Patch Set: changes from review Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "chrome/common/chrome_paths.h" 12 #include "chrome/common/chrome_paths.h"
13 #include "chrome/common/json_value_serializer.h" 13 #include "chrome/common/json_value_serializer.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 TEST(JSONValueSerializerTest, Roundtrip) { 16 TEST(JSONValueSerializerTest, Roundtrip) {
17 const std::string original_serialization = 17 const std::string original_serialization =
18 "{\"bool\":true,\"int\":42,\"list\":[1,2],\"null\":null,\"real\":3.14}"; 18 "{\"bool\":true,\"int\":42,\"list\":[1,2],\"null\":null,\"real\":3.14}";
19 JSONStringValueSerializer serializer(original_serialization); 19 JSONStringValueSerializer serializer(original_serialization);
20 scoped_ptr<Value> root(serializer.Deserialize(NULL)); 20 scoped_ptr<Value> root(serializer.Deserialize(NULL, NULL));
21 ASSERT_TRUE(root.get()); 21 ASSERT_TRUE(root.get());
22 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 22 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY));
23 23
24 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); 24 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get());
25 25
26 Value* null_value = NULL; 26 Value* null_value = NULL;
27 ASSERT_TRUE(root_dict->Get(L"null", &null_value)); 27 ASSERT_TRUE(root_dict->Get(L"null", &null_value));
28 ASSERT_TRUE(null_value); 28 ASSERT_TRUE(null_value);
29 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL)); 29 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL));
30 30
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 123
124 std::string expected = "{\"web\":\"\\u7F51\\u9875\"}"; 124 std::string expected = "{\"web\":\"\\u7F51\\u9875\"}";
125 125
126 std::string actual; 126 std::string actual;
127 JSONStringValueSerializer serializer(&actual); 127 JSONStringValueSerializer serializer(&actual);
128 ASSERT_TRUE(serializer.Serialize(root)); 128 ASSERT_TRUE(serializer.Serialize(root));
129 ASSERT_EQ(expected, actual); 129 ASSERT_EQ(expected, actual);
130 130
131 // escaped ascii text -> json 131 // escaped ascii text -> json
132 JSONStringValueSerializer deserializer(expected); 132 JSONStringValueSerializer deserializer(expected);
133 scoped_ptr<Value> deserial_root(deserializer.Deserialize(NULL)); 133 scoped_ptr<Value> deserial_root(deserializer.Deserialize(NULL, NULL));
134 ASSERT_TRUE(deserial_root.get()); 134 ASSERT_TRUE(deserial_root.get());
135 DictionaryValue* dict_root = 135 DictionaryValue* dict_root =
136 static_cast<DictionaryValue*>(deserial_root.get()); 136 static_cast<DictionaryValue*>(deserial_root.get());
137 std::wstring web_value; 137 std::wstring web_value;
138 ASSERT_TRUE(dict_root->GetString(L"web", &web_value)); 138 ASSERT_TRUE(dict_root->GetString(L"web", &web_value));
139 ASSERT_EQ(test, web_value); 139 ASSERT_EQ(test, web_value);
140 } 140 }
141 141
142 TEST(JSONValueSerializerTest, HexStrings) { 142 TEST(JSONValueSerializerTest, HexStrings) {
143 // hex string json -> escaped ascii text 143 // hex string json -> escaped ascii text
144 DictionaryValue root; 144 DictionaryValue root;
145 std::wstring test(L"\x01\x02"); 145 std::wstring test(L"\x01\x02");
146 root.SetString(L"test", test); 146 root.SetString(L"test", test);
147 147
148 std::string expected = "{\"test\":\"\\u0001\\u0002\"}"; 148 std::string expected = "{\"test\":\"\\u0001\\u0002\"}";
149 149
150 std::string actual; 150 std::string actual;
151 JSONStringValueSerializer serializer(&actual); 151 JSONStringValueSerializer serializer(&actual);
152 ASSERT_TRUE(serializer.Serialize(root)); 152 ASSERT_TRUE(serializer.Serialize(root));
153 ASSERT_EQ(expected, actual); 153 ASSERT_EQ(expected, actual);
154 154
155 // escaped ascii text -> json 155 // escaped ascii text -> json
156 JSONStringValueSerializer deserializer(expected); 156 JSONStringValueSerializer deserializer(expected);
157 scoped_ptr<Value> deserial_root(deserializer.Deserialize(NULL)); 157 scoped_ptr<Value> deserial_root(deserializer.Deserialize(NULL, NULL));
158 ASSERT_TRUE(deserial_root.get()); 158 ASSERT_TRUE(deserial_root.get());
159 DictionaryValue* dict_root = 159 DictionaryValue* dict_root =
160 static_cast<DictionaryValue*>(deserial_root.get()); 160 static_cast<DictionaryValue*>(deserial_root.get());
161 std::wstring test_value; 161 std::wstring test_value;
162 ASSERT_TRUE(dict_root->GetString(L"test", &test_value)); 162 ASSERT_TRUE(dict_root->GetString(L"test", &test_value));
163 ASSERT_EQ(test, test_value); 163 ASSERT_EQ(test, test_value);
164 164
165 // Test converting escaped regular chars 165 // Test converting escaped regular chars
166 std::string escaped_chars = "{\"test\":\"\\u0067\\u006f\"}"; 166 std::string escaped_chars = "{\"test\":\"\\u0067\\u006f\"}";
167 JSONStringValueSerializer deserializer2(escaped_chars); 167 JSONStringValueSerializer deserializer2(escaped_chars);
168 deserial_root.reset(deserializer2.Deserialize(NULL)); 168 deserial_root.reset(deserializer2.Deserialize(NULL, NULL));
169 ASSERT_TRUE(deserial_root.get()); 169 ASSERT_TRUE(deserial_root.get());
170 dict_root = static_cast<DictionaryValue*>(deserial_root.get()); 170 dict_root = static_cast<DictionaryValue*>(deserial_root.get());
171 ASSERT_TRUE(dict_root->GetString(L"test", &test_value)); 171 ASSERT_TRUE(dict_root->GetString(L"test", &test_value));
172 ASSERT_EQ(std::wstring(L"go"), test_value); 172 ASSERT_EQ(std::wstring(L"go"), test_value);
173 } 173 }
174 174
175 TEST(JSONValueSerializerTest, AllowTrailingComma) { 175 TEST(JSONValueSerializerTest, AllowTrailingComma) {
176 scoped_ptr<Value> root; 176 scoped_ptr<Value> root;
177 scoped_ptr<Value> root_expected; 177 scoped_ptr<Value> root_expected;
178 std::string test_with_commas("{\"key\": [true,],}"); 178 std::string test_with_commas("{\"key\": [true,],}");
179 std::string test_no_commas("{\"key\": [true]}"); 179 std::string test_no_commas("{\"key\": [true]}");
180 180
181 JSONStringValueSerializer serializer(test_with_commas); 181 JSONStringValueSerializer serializer(test_with_commas);
182 serializer.set_allow_trailing_comma(true); 182 serializer.set_allow_trailing_comma(true);
183 JSONStringValueSerializer serializer_expected(test_no_commas); 183 JSONStringValueSerializer serializer_expected(test_no_commas);
184 root.reset(serializer.Deserialize(NULL)); 184 root.reset(serializer.Deserialize(NULL, NULL));
185 ASSERT_TRUE(root.get()); 185 ASSERT_TRUE(root.get());
186 root_expected.reset(serializer_expected.Deserialize(NULL)); 186 root_expected.reset(serializer_expected.Deserialize(NULL, NULL));
187 ASSERT_TRUE(root_expected.get()); 187 ASSERT_TRUE(root_expected.get());
188 ASSERT_TRUE(root->Equals(root_expected.get())); 188 ASSERT_TRUE(root->Equals(root_expected.get()));
189 } 189 }
190 190
191 namespace { 191 namespace {
192 192
193 void ValidateJsonList(const std::string& json) { 193 void ValidateJsonList(const std::string& json) {
194 scoped_ptr<Value> root(base::JSONReader::Read(json, false)); 194 scoped_ptr<Value> root(base::JSONReader::Read(json, false));
195 ASSERT_TRUE(root.get() && root->IsType(Value::TYPE_LIST)); 195 ASSERT_TRUE(root.get() && root->IsType(Value::TYPE_LIST));
196 ListValue* list = static_cast<ListValue*>(root.get()); 196 ListValue* list = static_cast<ListValue*>(root.get());
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 FilePath original_file_path; 260 FilePath original_file_path;
261 ASSERT_TRUE( 261 ASSERT_TRUE(
262 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path)); 262 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path));
263 original_file_path = 263 original_file_path =
264 original_file_path.Append(FILE_PATH_LITERAL("serializer_test.js")); 264 original_file_path.Append(FILE_PATH_LITERAL("serializer_test.js"));
265 265
266 ASSERT_TRUE(file_util::PathExists(original_file_path)); 266 ASSERT_TRUE(file_util::PathExists(original_file_path));
267 267
268 JSONFileValueSerializer deserializer(original_file_path); 268 JSONFileValueSerializer deserializer(original_file_path);
269 scoped_ptr<Value> root; 269 scoped_ptr<Value> root;
270 root.reset(deserializer.Deserialize(NULL)); 270 root.reset(deserializer.Deserialize(NULL, NULL));
271 271
272 ASSERT_TRUE(root.get()); 272 ASSERT_TRUE(root.get());
273 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); 273 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY));
274 274
275 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); 275 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get());
276 276
277 Value* null_value = NULL; 277 Value* null_value = NULL;
278 ASSERT_TRUE(root_dict->Get(L"null", &null_value)); 278 ASSERT_TRUE(root_dict->Get(L"null", &null_value));
279 ASSERT_TRUE(null_value); 279 ASSERT_TRUE(null_value);
280 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL)); 280 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL));
(...skipping 29 matching lines...) Expand all
310 FilePath original_file_path; 310 FilePath original_file_path;
311 ASSERT_TRUE( 311 ASSERT_TRUE(
312 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path)); 312 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path));
313 original_file_path = 313 original_file_path =
314 original_file_path.Append(FILE_PATH_LITERAL("serializer_nested_test.js")); 314 original_file_path.Append(FILE_PATH_LITERAL("serializer_nested_test.js"));
315 315
316 ASSERT_TRUE(file_util::PathExists(original_file_path)); 316 ASSERT_TRUE(file_util::PathExists(original_file_path));
317 317
318 JSONFileValueSerializer deserializer(original_file_path); 318 JSONFileValueSerializer deserializer(original_file_path);
319 scoped_ptr<Value> root; 319 scoped_ptr<Value> root;
320 root.reset(deserializer.Deserialize(NULL)); 320 root.reset(deserializer.Deserialize(NULL, NULL));
321 ASSERT_TRUE(root.get()); 321 ASSERT_TRUE(root.get());
322 322
323 // Now try writing. 323 // Now try writing.
324 FilePath written_file_path = 324 FilePath written_file_path =
325 test_dir_.Append(FILE_PATH_LITERAL("test_output.js")); 325 test_dir_.Append(FILE_PATH_LITERAL("test_output.js"));
326 326
327 ASSERT_FALSE(file_util::PathExists(written_file_path)); 327 ASSERT_FALSE(file_util::PathExists(written_file_path));
328 JSONFileValueSerializer serializer(written_file_path); 328 JSONFileValueSerializer serializer(written_file_path);
329 ASSERT_TRUE(serializer.Serialize(*root)); 329 ASSERT_TRUE(serializer.Serialize(*root));
330 ASSERT_TRUE(file_util::PathExists(written_file_path)); 330 ASSERT_TRUE(file_util::PathExists(written_file_path));
331 331
332 // Now compare file contents. 332 // Now compare file contents.
333 EXPECT_TRUE(file_util::TextContentsEqual(original_file_path, 333 EXPECT_TRUE(file_util::TextContentsEqual(original_file_path,
334 written_file_path)); 334 written_file_path));
335 EXPECT_TRUE(file_util::Delete(written_file_path, false)); 335 EXPECT_TRUE(file_util::Delete(written_file_path, false));
336 } 336 }
337 337
338 TEST_F(JSONFileValueSerializerTest, NoWhitespace) { 338 TEST_F(JSONFileValueSerializerTest, NoWhitespace) {
339 FilePath source_file_path; 339 FilePath source_file_path;
340 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_file_path)); 340 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_file_path));
341 source_file_path = source_file_path.Append( 341 source_file_path = source_file_path.Append(
342 FILE_PATH_LITERAL("serializer_test_nowhitespace.js")); 342 FILE_PATH_LITERAL("serializer_test_nowhitespace.js"));
343 ASSERT_TRUE(file_util::PathExists(source_file_path)); 343 ASSERT_TRUE(file_util::PathExists(source_file_path));
344 JSONFileValueSerializer serializer(source_file_path); 344 JSONFileValueSerializer serializer(source_file_path);
345 scoped_ptr<Value> root; 345 scoped_ptr<Value> root;
346 root.reset(serializer.Deserialize(NULL)); 346 root.reset(serializer.Deserialize(NULL, NULL));
347 ASSERT_TRUE(root.get()); 347 ASSERT_TRUE(root.get());
348 } 348 }
OLDNEW
« no previous file with comments | « chrome/common/json_value_serializer_perftest.cc ('k') | chrome/installer/util/google_chrome_distribution.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698