Chromium Code Reviews| Index: base/json/json_value_serializer_unittest.cc |
| diff --git a/base/json/json_value_serializer_unittest.cc b/base/json/json_value_serializer_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7a33fa1a06419ca14c41cc500e06d2bea818bb89 |
| --- /dev/null |
| +++ b/base/json/json_value_serializer_unittest.cc |
| @@ -0,0 +1,151 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include <string> |
| + |
| +#include "testing/gtest/include/gtest/gtest.h" |
|
willchan no longer on Chromium
2011/11/15 02:36:22
This one should get sorted among the rest below.
pastarmovj
2011/11/17 10:35:35
Done.
|
| + |
| +#include "base/file_util.h" |
| +#include "base/json/json_reader.h" |
| +#include "base/json/json_value_serializer.h" |
|
willchan no longer on Chromium
2011/11/15 02:36:22
This one is supposed to go first, even ahead of th
pastarmovj
2011/11/17 10:35:35
Done.
|
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/scoped_temp_dir.h" |
| +#include "base/values.h" |
| + |
| +namespace { |
| + |
| +// Some proper JSON to test with: |
| +std::string proper_json = |
|
willchan no longer on Chromium
2011/11/15 02:36:22
This is creating a static intiializer. Please use
pastarmovj
2011/11/17 10:35:35
Done.
|
| + "{\n" |
| + " \"compound\": {\n" |
| + " \"a\": 1,\n" |
| + " \"b\": 2\n" |
| + " },\n" |
| + " \"some_String\": \"1337\",\n" |
| + " \"some_int\": 42,\n" |
| + " \"the_list\": [ \"val1\", \"val2\" ]\n" |
| + "}\n"; |
| + |
| +// Some proper JSON with trailing commas: |
| +std::string proper_json_with_commas = |
| + "{\n" |
| + "\t\"some_int\": 42,\n" |
| + "\t\"some_String\": \"1337\",\n" |
| + "\t\"the_list\": [\"val1\", \"val2\", ],\n" |
| + "\t\"compound\": { \"a\": 1, \"b\": 2, },\n" |
| + "}\n"; |
| + |
| +// Some broken JSON: |
| +std::string broken_json = |
| + "{\n" |
| + "\t\"some_int\": a42,\n" |
| + "\tsome_String: \"1337\",\n" |
| + "\t\"the_list: [\"val1\", \"val2\", ],\n" |
| + "\t\"compound\": { \"a\" 1, \"b\": 2, },\n" |
| + "},\n"; |
| + |
| +void CheckJSONIsStillTheSame(base::Value& value) { |
| + // Serialize back the output. |
| + std::string serialized_json; |
| + JSONStringValueSerializer str_serializer(&serialized_json); |
| + str_serializer.set_pretty_print(true); |
| + ASSERT_TRUE(str_serializer.Serialize(value)); |
| + // Now compare the input with the output. |
| + ASSERT_EQ(proper_json, serialized_json); |
| +} |
| + |
| +} // namespace |
| + |
| +namespace base { |
|
willchan no longer on Chromium
2011/11/15 02:36:22
You should probably just put everything within the
pastarmovj
2011/11/17 10:35:35
Done.
|
| + |
| +TEST(JSONValueSerializerTest, ReadProperJSONFromString) { |
| + // Try to deserialize it through the serializer. |
| + JSONStringValueSerializer str_deserializer(proper_json); |
| + |
| + int error_code = 0; |
| + std::string error_message; |
| + scoped_ptr<Value> value( |
| + str_deserializer.Deserialize(&error_code, &error_message)); |
| + ASSERT_TRUE(value.get()); |
| + ASSERT_EQ(0, error_code); |
| + ASSERT_TRUE(error_message.empty()); |
| + // Verify if the same JSON is still there. |
| + CheckJSONIsStillTheSame(*value); |
| +} |
| + |
| +TEST(JSONValueSerializerTest, ReadJSONWithTrailingCommasFromString) { |
| + // Try to deserialize it through the serializer. |
| + JSONStringValueSerializer str_deserializer(proper_json_with_commas); |
| + |
| + int error_code = 0; |
| + std::string error_message; |
| + scoped_ptr<Value> value( |
| + str_deserializer.Deserialize(&error_code, &error_message)); |
| + ASSERT_FALSE(value.get()); |
| + ASSERT_NE(0, error_code); |
| + ASSERT_FALSE(error_message.empty()); |
| + // Now the flag is set and it must pass. |
| + str_deserializer.set_allow_trailing_comma(true); |
| + value.reset(str_deserializer.Deserialize(&error_code, &error_message)); |
| + ASSERT_TRUE(value.get()); |
| + ASSERT_EQ(JSONReader::JSON_TRAILING_COMMA, error_code); |
| + // Verify if the same JSON is still there. |
| + CheckJSONIsStillTheSame(*value); |
| +} |
| + |
| +TEST(JSONValueSerializerTest, ReadProperJSONFromFile) { |
| + ScopedTempDir tempdir; |
| + ASSERT_TRUE(tempdir.CreateUniqueTempDir()); |
| + // Write it down in the file. |
| + FilePath temp_file(tempdir.path().AppendASCII("test.json")); |
| + ASSERT_EQ(static_cast<int>(proper_json.length()), |
| + file_util::WriteFile(temp_file, |
| + proper_json.data(), |
| + proper_json.length())); |
| + |
| + // Try to deserialize it through the serializer. |
| + JSONFileValueSerializer file_deserializer(temp_file); |
| + |
| + int error_code = 0; |
| + std::string error_message; |
| + scoped_ptr<Value> value( |
| + file_deserializer.Deserialize(&error_code, &error_message)); |
| + ASSERT_TRUE(value.get()); |
| + ASSERT_EQ(0, error_code); |
| + ASSERT_TRUE(error_message.empty()); |
| + // Verify if the same JSON is still there. |
| + CheckJSONIsStillTheSame(*value); |
| +} |
| + |
| +TEST(JSONValueSerializerTest, ReadJSONWithCommasFromFile) { |
| + ScopedTempDir tempdir; |
| + ASSERT_TRUE(tempdir.CreateUniqueTempDir()); |
| + // Write it down in the file. |
| + FilePath temp_file(tempdir.path().AppendASCII("test.json")); |
| + ASSERT_EQ(static_cast<int>(proper_json_with_commas.length()), |
| + file_util::WriteFile(temp_file, |
| + proper_json_with_commas.data(), |
| + proper_json_with_commas.length())); |
| + |
| + // Try to deserialize it through the serializer. |
| + JSONFileValueSerializer file_deserializer(temp_file); |
| + // This must fail without the proper flag. |
| + int error_code = 0; |
| + std::string error_message; |
| + scoped_ptr<Value> value( |
| + file_deserializer.Deserialize(&error_code, &error_message)); |
| + ASSERT_FALSE(value.get()); |
| + ASSERT_NE(0, error_code); |
| + ASSERT_FALSE(error_message.empty()); |
| + // Now the flag is set and it must pass. |
| + file_deserializer.set_allow_trailing_comma(true); |
| + value.reset(file_deserializer.Deserialize(&error_code, &error_message)); |
| + ASSERT_TRUE(value.get()); |
| + ASSERT_EQ(JSONReader::JSON_TRAILING_COMMA, error_code); |
| + // Verify if the same JSON is still there. |
| + CheckJSONIsStillTheSame(*value); |
| +} |
| + |
| +} // namespace base |
| + |