| OLD | NEW |
| 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_reader.h" | 7 #include "base/json_reader.h" |
| 8 #include "base/json_writer.h" | 8 #include "base/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 Value* root = NULL; | |
| 20 JSONStringValueSerializer serializer(original_serialization); | 19 JSONStringValueSerializer serializer(original_serialization); |
| 21 ASSERT_TRUE(serializer.Deserialize(&root, NULL)); | 20 scoped_ptr<Value> root(serializer.Deserialize(NULL)); |
| 22 ASSERT_TRUE(root); | 21 ASSERT_TRUE(root.get()); |
| 23 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 22 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 24 | 23 |
| 25 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root); | 24 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); |
| 26 | 25 |
| 27 Value* null_value = NULL; | 26 Value* null_value = NULL; |
| 28 ASSERT_TRUE(root_dict->Get(L"null", &null_value)); | 27 ASSERT_TRUE(root_dict->Get(L"null", &null_value)); |
| 29 ASSERT_TRUE(null_value); | 28 ASSERT_TRUE(null_value); |
| 30 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL)); | 29 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL)); |
| 31 | 30 |
| 32 bool bool_value = false; | 31 bool bool_value = false; |
| 33 ASSERT_TRUE(root_dict->GetBoolean(L"bool", &bool_value)); | 32 ASSERT_TRUE(root_dict->GetBoolean(L"bool", &bool_value)); |
| 34 ASSERT_TRUE(bool_value); | 33 ASSERT_TRUE(bool_value); |
| 35 | 34 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 54 ASSERT_TRUE(mutable_serializer.Serialize(*root_dict)); | 53 ASSERT_TRUE(mutable_serializer.Serialize(*root_dict)); |
| 55 const std::string pretty_serialization = | 54 const std::string pretty_serialization = |
| 56 "{\r\n" | 55 "{\r\n" |
| 57 " \"bool\": true,\r\n" | 56 " \"bool\": true,\r\n" |
| 58 " \"int\": 42,\r\n" | 57 " \"int\": 42,\r\n" |
| 59 " \"list\": [ 1, 2 ],\r\n" | 58 " \"list\": [ 1, 2 ],\r\n" |
| 60 " \"null\": null,\r\n" | 59 " \"null\": null,\r\n" |
| 61 " \"real\": 3.14\r\n" | 60 " \"real\": 3.14\r\n" |
| 62 "}\r\n"; | 61 "}\r\n"; |
| 63 ASSERT_EQ(pretty_serialization, test_serialization); | 62 ASSERT_EQ(pretty_serialization, test_serialization); |
| 64 | |
| 65 delete root; | |
| 66 } | 63 } |
| 67 | 64 |
| 68 TEST(JSONValueSerializerTest, StringEscape) { | 65 TEST(JSONValueSerializerTest, StringEscape) { |
| 69 std::wstring all_chars; | 66 std::wstring all_chars; |
| 70 for (int i = 1; i < 256; ++i) { | 67 for (int i = 1; i < 256; ++i) { |
| 71 all_chars += static_cast<wchar_t>(i); | 68 all_chars += static_cast<wchar_t>(i); |
| 72 } | 69 } |
| 73 // Generated in in Firefox using the following js (with an extra backslash for | 70 // Generated in in Firefox using the following js (with an extra backslash for |
| 74 // double quote): | 71 // double quote): |
| 75 // var s = ''; | 72 // var s = ''; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 root.SetString(L"web", test); | 109 root.SetString(L"web", test); |
| 113 | 110 |
| 114 std::string expected = "{\"web\":\"\\u7F51\\u9875\"}"; | 111 std::string expected = "{\"web\":\"\\u7F51\\u9875\"}"; |
| 115 | 112 |
| 116 std::string actual; | 113 std::string actual; |
| 117 JSONStringValueSerializer serializer(&actual); | 114 JSONStringValueSerializer serializer(&actual); |
| 118 ASSERT_TRUE(serializer.Serialize(root)); | 115 ASSERT_TRUE(serializer.Serialize(root)); |
| 119 ASSERT_EQ(expected, actual); | 116 ASSERT_EQ(expected, actual); |
| 120 | 117 |
| 121 // escaped ascii text -> json | 118 // escaped ascii text -> json |
| 122 Value* deserial_root = NULL; | |
| 123 JSONStringValueSerializer deserializer(expected); | 119 JSONStringValueSerializer deserializer(expected); |
| 124 ASSERT_TRUE(deserializer.Deserialize(&deserial_root, NULL)); | 120 scoped_ptr<Value> deserial_root(deserializer.Deserialize(NULL)); |
| 125 DictionaryValue* dict_root = static_cast<DictionaryValue*>(deserial_root); | 121 ASSERT_TRUE(deserial_root.get()); |
| 122 DictionaryValue* dict_root = |
| 123 static_cast<DictionaryValue*>(deserial_root.get()); |
| 126 std::wstring web_value; | 124 std::wstring web_value; |
| 127 ASSERT_TRUE(dict_root->GetString(L"web", &web_value)); | 125 ASSERT_TRUE(dict_root->GetString(L"web", &web_value)); |
| 128 ASSERT_EQ(test, web_value); | 126 ASSERT_EQ(test, web_value); |
| 129 delete deserial_root; | |
| 130 } | 127 } |
| 131 | 128 |
| 132 TEST(JSONValueSerializerTest, HexStrings) { | 129 TEST(JSONValueSerializerTest, HexStrings) { |
| 133 // hex string json -> escaped ascii text | 130 // hex string json -> escaped ascii text |
| 134 DictionaryValue root; | 131 DictionaryValue root; |
| 135 std::wstring test(L"\x01\x02"); | 132 std::wstring test(L"\x01\x02"); |
| 136 root.SetString(L"test", test); | 133 root.SetString(L"test", test); |
| 137 | 134 |
| 138 std::string expected = "{\"test\":\"\\x01\\x02\"}"; | 135 std::string expected = "{\"test\":\"\\x01\\x02\"}"; |
| 139 | 136 |
| 140 std::string actual; | 137 std::string actual; |
| 141 JSONStringValueSerializer serializer(&actual); | 138 JSONStringValueSerializer serializer(&actual); |
| 142 ASSERT_TRUE(serializer.Serialize(root)); | 139 ASSERT_TRUE(serializer.Serialize(root)); |
| 143 ASSERT_EQ(expected, actual); | 140 ASSERT_EQ(expected, actual); |
| 144 | 141 |
| 145 // escaped ascii text -> json | 142 // escaped ascii text -> json |
| 146 Value* deserial_root = NULL; | |
| 147 JSONStringValueSerializer deserializer(expected); | 143 JSONStringValueSerializer deserializer(expected); |
| 148 ASSERT_TRUE(deserializer.Deserialize(&deserial_root, NULL)); | 144 scoped_ptr<Value> deserial_root(deserializer.Deserialize(NULL)); |
| 149 DictionaryValue* dict_root = static_cast<DictionaryValue*>(deserial_root); | 145 ASSERT_TRUE(deserial_root.get()); |
| 146 DictionaryValue* dict_root = |
| 147 static_cast<DictionaryValue*>(deserial_root.get()); |
| 150 std::wstring test_value; | 148 std::wstring test_value; |
| 151 ASSERT_TRUE(dict_root->GetString(L"test", &test_value)); | 149 ASSERT_TRUE(dict_root->GetString(L"test", &test_value)); |
| 152 ASSERT_EQ(test, test_value); | 150 ASSERT_EQ(test, test_value); |
| 153 delete deserial_root; | |
| 154 | 151 |
| 155 // Test converting escaped regular chars | 152 // Test converting escaped regular chars |
| 156 deserial_root = NULL; | |
| 157 std::string escaped_chars = "{\"test\":\"\\x67\\x6f\"}"; | 153 std::string escaped_chars = "{\"test\":\"\\x67\\x6f\"}"; |
| 158 JSONStringValueSerializer deserializer2(escaped_chars); | 154 JSONStringValueSerializer deserializer2(escaped_chars); |
| 159 ASSERT_TRUE(deserializer2.Deserialize(&deserial_root, NULL)); | 155 deserial_root.reset(deserializer2.Deserialize(NULL)); |
| 160 dict_root = static_cast<DictionaryValue*>(deserial_root); | 156 ASSERT_TRUE(deserial_root.get()); |
| 157 dict_root = static_cast<DictionaryValue*>(deserial_root.get()); |
| 161 ASSERT_TRUE(dict_root->GetString(L"test", &test_value)); | 158 ASSERT_TRUE(dict_root->GetString(L"test", &test_value)); |
| 162 ASSERT_EQ(std::wstring(L"go"), test_value); | 159 ASSERT_EQ(std::wstring(L"go"), test_value); |
| 163 delete deserial_root; | |
| 164 } | 160 } |
| 165 | 161 |
| 166 TEST(JSONValueSerializerTest, AllowTrailingComma) { | 162 TEST(JSONValueSerializerTest, AllowTrailingComma) { |
| 167 Value* root = NULL; | 163 scoped_ptr<Value> root; |
| 168 Value* root_expected = NULL; | 164 scoped_ptr<Value> root_expected; |
| 169 std::string test_with_commas("{\"key\": [true,],}"); | 165 std::string test_with_commas("{\"key\": [true,],}"); |
| 170 std::string test_no_commas("{\"key\": [true]}"); | 166 std::string test_no_commas("{\"key\": [true]}"); |
| 171 | 167 |
| 172 JSONStringValueSerializer serializer(test_with_commas); | 168 JSONStringValueSerializer serializer(test_with_commas); |
| 173 serializer.set_allow_trailing_comma(true); | 169 serializer.set_allow_trailing_comma(true); |
| 174 JSONStringValueSerializer serializer_expected(test_no_commas); | 170 JSONStringValueSerializer serializer_expected(test_no_commas); |
| 175 ASSERT_TRUE(serializer.Deserialize(&root, NULL)); | 171 root.reset(serializer.Deserialize(NULL)); |
| 176 ASSERT_TRUE(serializer_expected.Deserialize(&root_expected, NULL)); | 172 ASSERT_TRUE(root.get()); |
| 177 ASSERT_TRUE(root->Equals(root_expected)); | 173 root_expected.reset(serializer_expected.Deserialize(NULL)); |
| 178 | 174 ASSERT_TRUE(root_expected.get()); |
| 179 delete root; | 175 ASSERT_TRUE(root->Equals(root_expected.get())); |
| 180 delete root_expected; | |
| 181 } | 176 } |
| 182 | 177 |
| 183 namespace { | 178 namespace { |
| 184 | 179 |
| 185 void ValidateJsonList(const std::string& json) { | 180 void ValidateJsonList(const std::string& json) { |
| 186 Value* root = NULL; | 181 scoped_ptr<Value> root(JSONReader::Read(json, false)); |
| 187 ASSERT_TRUE(JSONReader::Read(json, &root, false)); | 182 ASSERT_TRUE(root.get() && root->IsType(Value::TYPE_LIST)); |
| 188 ASSERT_TRUE(root && root->IsType(Value::TYPE_LIST)); | 183 ListValue* list = static_cast<ListValue*>(root.get()); |
| 189 ListValue* list = static_cast<ListValue*>(root); | |
| 190 ASSERT_EQ(1U, list->GetSize()); | 184 ASSERT_EQ(1U, list->GetSize()); |
| 191 Value* elt = NULL; | 185 Value* elt = NULL; |
| 192 ASSERT_TRUE(list->Get(0, &elt)); | 186 ASSERT_TRUE(list->Get(0, &elt)); |
| 193 int value = 0; | 187 int value = 0; |
| 194 ASSERT_TRUE(elt && elt->GetAsInteger(&value)); | 188 ASSERT_TRUE(elt && elt->GetAsInteger(&value)); |
| 195 ASSERT_EQ(1, value); | 189 ASSERT_EQ(1, value); |
| 196 delete root; | |
| 197 } | 190 } |
| 198 | 191 |
| 199 } // namespace | 192 } // namespace |
| 200 | 193 |
| 201 TEST(JSONValueSerializerTest, JSONReaderComments) { | 194 TEST(JSONValueSerializerTest, JSONReaderComments) { |
| 202 ValidateJsonList("[ // 2, 3, ignore me ] \n1 ]"); | 195 ValidateJsonList("[ // 2, 3, ignore me ] \n1 ]"); |
| 203 ValidateJsonList("[ /* 2, \n3, ignore me ]*/ \n1 ]"); | 196 ValidateJsonList("[ /* 2, \n3, ignore me ]*/ \n1 ]"); |
| 204 ValidateJsonList("//header\n[ // 2, \n// 3, \n1 ]// footer"); | 197 ValidateJsonList("//header\n[ // 2, \n// 3, \n1 ]// footer"); |
| 205 ValidateJsonList("/*\n[ // 2, \n// 3, \n1 ]*/[1]"); | 198 ValidateJsonList("/*\n[ // 2, \n// 3, \n1 ]*/[1]"); |
| 206 ValidateJsonList("[ 1 /* one */ ] /* end */"); | 199 ValidateJsonList("[ 1 /* one */ ] /* end */"); |
| 207 ValidateJsonList("[ 1 //// ,2\r\n ]"); | 200 ValidateJsonList("[ 1 //// ,2\r\n ]"); |
| 208 | 201 |
| 209 Value* root = NULL; | 202 scoped_ptr<Value> root; |
| 203 |
| 210 // It's ok to have a comment in a string. | 204 // It's ok to have a comment in a string. |
| 211 ASSERT_TRUE(JSONReader::Read("[\"// ok\\n /* foo */ \"]", &root, false)); | 205 root.reset(JSONReader::Read("[\"// ok\\n /* foo */ \"]", false)); |
| 212 ASSERT_TRUE(root && root->IsType(Value::TYPE_LIST)); | 206 ASSERT_TRUE(root.get() && root->IsType(Value::TYPE_LIST)); |
| 213 ListValue* list = static_cast<ListValue*>(root); | 207 ListValue* list = static_cast<ListValue*>(root.get()); |
| 214 ASSERT_EQ(1U, list->GetSize()); | 208 ASSERT_EQ(1U, list->GetSize()); |
| 215 Value* elt = NULL; | 209 Value* elt = NULL; |
| 216 ASSERT_TRUE(list->Get(0, &elt)); | 210 ASSERT_TRUE(list->Get(0, &elt)); |
| 217 std::wstring value; | 211 std::wstring value; |
| 218 ASSERT_TRUE(elt && elt->GetAsString(&value)); | 212 ASSERT_TRUE(elt && elt->GetAsString(&value)); |
| 219 ASSERT_EQ(L"// ok\n /* foo */ ", value); | 213 ASSERT_EQ(L"// ok\n /* foo */ ", value); |
| 220 delete root; | |
| 221 | 214 |
| 222 root = NULL; | |
| 223 // You can't nest comments. | 215 // You can't nest comments. |
| 224 ASSERT_FALSE(JSONReader::Read("/* /* inner */ outer */ [ 1 ]", &root, false)); | 216 root.reset(JSONReader::Read("/* /* inner */ outer */ [ 1 ]", false)); |
| 217 ASSERT_FALSE(root.get()); |
| 225 | 218 |
| 226 // Not a open comment token. | 219 // Not a open comment token. |
| 227 ASSERT_FALSE(JSONReader::Read("/ * * / [1]", &root, false)); | 220 root.reset(JSONReader::Read("/ * * / [1]", false)); |
| 221 ASSERT_FALSE(root.get()); |
| 228 } | 222 } |
| 229 | 223 |
| 230 namespace { | 224 namespace { |
| 231 class JSONFileValueSerializerTest : public testing::Test { | 225 class JSONFileValueSerializerTest : public testing::Test { |
| 232 protected: | 226 protected: |
| 233 virtual void SetUp() { | 227 virtual void SetUp() { |
| 234 // Name a subdirectory of the temp directory. | 228 // Name a subdirectory of the temp directory. |
| 235 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &test_dir_)); | 229 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &test_dir_)); |
| 236 file_util::AppendToPath(&test_dir_, L"JSONFileValueSerializerTest"); | 230 file_util::AppendToPath(&test_dir_, L"JSONFileValueSerializerTest"); |
| 237 | 231 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 254 #if defined(OS_WIN) | 248 #if defined(OS_WIN) |
| 255 TEST_F(JSONFileValueSerializerTest, Roundtrip) { | 249 TEST_F(JSONFileValueSerializerTest, Roundtrip) { |
| 256 std::wstring original_file_path; | 250 std::wstring original_file_path; |
| 257 ASSERT_TRUE( | 251 ASSERT_TRUE( |
| 258 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path)); | 252 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path)); |
| 259 file_util::AppendToPath(&original_file_path, L"serializer_test.js"); | 253 file_util::AppendToPath(&original_file_path, L"serializer_test.js"); |
| 260 | 254 |
| 261 ASSERT_TRUE(file_util::PathExists(original_file_path)); | 255 ASSERT_TRUE(file_util::PathExists(original_file_path)); |
| 262 | 256 |
| 263 JSONFileValueSerializer deserializer(original_file_path); | 257 JSONFileValueSerializer deserializer(original_file_path); |
| 264 Value* root; | 258 scoped_ptr<Value> root; |
| 265 ASSERT_TRUE(deserializer.Deserialize(&root, NULL)); | 259 root.reset(deserializer.Deserialize(NULL)); |
| 266 | 260 |
| 267 ASSERT_TRUE(root); | 261 ASSERT_TRUE(root.get()); |
| 268 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); | 262 ASSERT_TRUE(root->IsType(Value::TYPE_DICTIONARY)); |
| 269 | 263 |
| 270 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root); | 264 DictionaryValue* root_dict = static_cast<DictionaryValue*>(root.get()); |
| 271 | 265 |
| 272 Value* null_value = NULL; | 266 Value* null_value = NULL; |
| 273 ASSERT_TRUE(root_dict->Get(L"null", &null_value)); | 267 ASSERT_TRUE(root_dict->Get(L"null", &null_value)); |
| 274 ASSERT_TRUE(null_value); | 268 ASSERT_TRUE(null_value); |
| 275 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL)); | 269 ASSERT_TRUE(null_value->IsType(Value::TYPE_NULL)); |
| 276 | 270 |
| 277 bool bool_value = false; | 271 bool bool_value = false; |
| 278 ASSERT_TRUE(root_dict->GetBoolean(L"bool", &bool_value)); | 272 ASSERT_TRUE(root_dict->GetBoolean(L"bool", &bool_value)); |
| 279 ASSERT_TRUE(bool_value); | 273 ASSERT_TRUE(bool_value); |
| 280 | 274 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 291 file_util::AppendToPath(&written_file_path, L"test_output.js"); | 285 file_util::AppendToPath(&written_file_path, L"test_output.js"); |
| 292 | 286 |
| 293 ASSERT_FALSE(file_util::PathExists(written_file_path)); | 287 ASSERT_FALSE(file_util::PathExists(written_file_path)); |
| 294 JSONFileValueSerializer serializer(written_file_path); | 288 JSONFileValueSerializer serializer(written_file_path); |
| 295 ASSERT_TRUE(serializer.Serialize(*root)); | 289 ASSERT_TRUE(serializer.Serialize(*root)); |
| 296 ASSERT_TRUE(file_util::PathExists(written_file_path)); | 290 ASSERT_TRUE(file_util::PathExists(written_file_path)); |
| 297 | 291 |
| 298 // Now compare file contents. | 292 // Now compare file contents. |
| 299 EXPECT_TRUE(file_util::ContentsEqual(original_file_path, written_file_path)); | 293 EXPECT_TRUE(file_util::ContentsEqual(original_file_path, written_file_path)); |
| 300 EXPECT_TRUE(file_util::Delete(written_file_path, false)); | 294 EXPECT_TRUE(file_util::Delete(written_file_path, false)); |
| 301 | |
| 302 delete root; | |
| 303 } | 295 } |
| 304 | 296 |
| 305 TEST_F(JSONFileValueSerializerTest, RoundtripNested) { | 297 TEST_F(JSONFileValueSerializerTest, RoundtripNested) { |
| 306 std::wstring original_file_path; | 298 std::wstring original_file_path; |
| 307 ASSERT_TRUE( | 299 ASSERT_TRUE( |
| 308 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path)); | 300 PathService::Get(chrome::DIR_TEST_DATA, &original_file_path)); |
| 309 file_util::AppendToPath(&original_file_path, L"serializer_nested_test.js"); | 301 file_util::AppendToPath(&original_file_path, L"serializer_nested_test.js"); |
| 310 | 302 |
| 311 ASSERT_TRUE(file_util::PathExists(original_file_path)); | 303 ASSERT_TRUE(file_util::PathExists(original_file_path)); |
| 312 | 304 |
| 313 JSONFileValueSerializer deserializer(original_file_path); | 305 JSONFileValueSerializer deserializer(original_file_path); |
| 314 Value* root; | 306 scoped_ptr<Value> root; |
| 315 ASSERT_TRUE(deserializer.Deserialize(&root, NULL)); | 307 root.reset(deserializer.Deserialize(NULL)); |
| 308 ASSERT_TRUE(root.get()); |
| 316 | 309 |
| 317 // Now try writing. | 310 // Now try writing. |
| 318 std::wstring written_file_path = test_dir_; | 311 std::wstring written_file_path = test_dir_; |
| 319 file_util::AppendToPath(&written_file_path, L"test_output.js"); | 312 file_util::AppendToPath(&written_file_path, L"test_output.js"); |
| 320 | 313 |
| 321 ASSERT_FALSE(file_util::PathExists(written_file_path)); | 314 ASSERT_FALSE(file_util::PathExists(written_file_path)); |
| 322 JSONFileValueSerializer serializer(written_file_path); | 315 JSONFileValueSerializer serializer(written_file_path); |
| 323 ASSERT_TRUE(serializer.Serialize(*root)); | 316 ASSERT_TRUE(serializer.Serialize(*root)); |
| 324 ASSERT_TRUE(file_util::PathExists(written_file_path)); | 317 ASSERT_TRUE(file_util::PathExists(written_file_path)); |
| 325 | 318 |
| 326 // Now compare file contents. | 319 // Now compare file contents. |
| 327 EXPECT_TRUE(file_util::ContentsEqual(original_file_path, written_file_path)); | 320 EXPECT_TRUE(file_util::ContentsEqual(original_file_path, written_file_path)); |
| 328 EXPECT_TRUE(file_util::Delete(written_file_path, false)); | 321 EXPECT_TRUE(file_util::Delete(written_file_path, false)); |
| 329 | |
| 330 delete root; | |
| 331 } | 322 } |
| 332 | 323 |
| 333 TEST_F(JSONFileValueSerializerTest, NoWhitespace) { | 324 TEST_F(JSONFileValueSerializerTest, NoWhitespace) { |
| 334 std::wstring source_file_path; | 325 std::wstring source_file_path; |
| 335 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_file_path)); | 326 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_file_path)); |
| 336 file_util::AppendToPath(&source_file_path, | 327 file_util::AppendToPath(&source_file_path, |
| 337 L"serializer_test_nowhitespace.js"); | 328 L"serializer_test_nowhitespace.js"); |
| 338 ASSERT_TRUE(file_util::PathExists(source_file_path)); | 329 ASSERT_TRUE(file_util::PathExists(source_file_path)); |
| 339 JSONFileValueSerializer serializer(source_file_path); | 330 JSONFileValueSerializer serializer(source_file_path); |
| 340 Value* root; | 331 scoped_ptr<Value> root; |
| 341 ASSERT_TRUE(serializer.Deserialize(&root, NULL)); | 332 root.reset(serializer.Deserialize(NULL)); |
| 342 ASSERT_TRUE(root); | 333 ASSERT_TRUE(root.get()); |
| 343 delete root; | |
| 344 } | 334 } |
| 345 #endif // defined(OS_WIN) | 335 #endif // defined(OS_WIN) |
| OLD | NEW |