diff options
author | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-05 09:46:42 +0000 |
---|---|---|
committer | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-05 09:46:42 +0000 |
commit | 261c877ec8b445c6208063cb7d9814c52853dd81 (patch) | |
tree | 24ac32815ed9087867bf8aa8b944ae26af8bbd39 /base/json/json_value_converter_unittest.cc | |
parent | 0cd27afb74a463f809c1d41e47c5aaeb6d7603d0 (diff) | |
download | chromium_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.cc | 46 |
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 |