summaryrefslogtreecommitdiffstats
path: root/base/json/json_value_converter_unittest.cc
diff options
context:
space:
mode:
authormukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-05 09:46:42 +0000
committermukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-05 09:46:42 +0000
commit261c877ec8b445c6208063cb7d9814c52853dd81 (patch)
tree24ac32815ed9087867bf8aa8b944ae26af8bbd39 /base/json/json_value_converter_unittest.cc
parent0cd27afb74a463f809c1d41e47c5aaeb6d7603d0 (diff)
downloadchromium_src-261c877ec8b445c6208063cb7d9814c52853dd81.zip
chromium_src-261c877ec8b445c6208063cb7d9814c52853dd81.tar.gz
chromium_src-261c877ec8b445c6208063cb7d9814c52853dd81.tar.bz2
Returns a bool for JSONValueConverter::Convert()
As I see a real use scenario in chrome/browser/chromeos/gdata/ gdata_parser.cc, I realized that sometimes structural validity matters. It also introduce string16 whose code is almost equivalent to std::string. BUG=none TEST=passed Review URL: http://codereview.chromium.org/8952029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116473 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/json/json_value_converter_unittest.cc')
-rw-r--r--base/json/json_value_converter_unittest.cc46
1 files changed, 43 insertions, 3 deletions
diff --git a/base/json/json_value_converter_unittest.cc b/base/json/json_value_converter_unittest.cc
index d1a8ee72..73ed229 100644
--- a/base/json/json_value_converter_unittest.cc
+++ b/base/json/json_value_converter_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -62,7 +62,8 @@ TEST(JSONValueConverterTest, ParseSimpleMessage) {
scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false));
SimpleMessage message;
base::JSONValueConverter<SimpleMessage> converter;
- converter.Convert(*value.get(), &message);
+ EXPECT_TRUE(converter.Convert(*value.get(), &message));
+
EXPECT_EQ(1, message.foo);
EXPECT_EQ("bar", message.bar);
EXPECT_TRUE(message.baz);
@@ -95,7 +96,8 @@ TEST(JSONValueConverterTest, ParseNestedMessage) {
scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false));
NestedMessage message;
base::JSONValueConverter<NestedMessage> converter;
- converter.Convert(*value.get(), &message);
+ EXPECT_TRUE(converter.Convert(*value.get(), &message));
+
EXPECT_EQ(1.0, message.foo);
EXPECT_EQ(1, message.child.foo);
EXPECT_EQ("bar", message.child.bar);
@@ -113,4 +115,42 @@ TEST(JSONValueConverterTest, ParseNestedMessage) {
EXPECT_FALSE(second_child.baz);
}
+TEST(JSONValueConverterTest, ParseFailures) {
+ const char normal_data[] =
+ "{\n"
+ " \"foo\": 1,\n"
+ " \"bar\": 2,\n" // "bar" is an integer here.
+ " \"baz\": true,\n"
+ " \"ints\": [1, 2]"
+ "}\n";
+
+ scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false));
+ SimpleMessage message;
+ base::JSONValueConverter<SimpleMessage> converter;
+ EXPECT_FALSE(converter.Convert(*value.get(), &message));
+ // Do not check the values below. |message| may be modified during
+ // Convert() even it fails.
+}
+
+TEST(JSONValueConverterTest, ParseWithMissingFields) {
+ const char normal_data[] =
+ "{\n"
+ " \"foo\": 1,\n"
+ " \"baz\": true,\n"
+ " \"ints\": [1, 2]"
+ "}\n";
+
+ scoped_ptr<Value> value(base::JSONReader::Read(normal_data, false));
+ SimpleMessage message;
+ base::JSONValueConverter<SimpleMessage> converter;
+ // Convert() still succeeds even if the input doesn't have "bar" field.
+ EXPECT_TRUE(converter.Convert(*value.get(), &message));
+
+ EXPECT_EQ(1, message.foo);
+ EXPECT_TRUE(message.baz);
+ EXPECT_EQ(2, static_cast<int>(message.ints.size()));
+ EXPECT_EQ(1, message.ints[0]);
+ EXPECT_EQ(2, message.ints[1]);
+}
+
} // namespace base