diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-09 21:54:27 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-09 21:54:27 +0000 |
commit | 135025619f3506016a729ff150b31c42b0856cd6 (patch) | |
tree | 453b9e9fee45d15b1dd5f6a46355cb0021b35710 /base/values_unittest.cc | |
parent | d435b07cf3f682a47b9bc0620c234c7ccb589984 (diff) | |
download | chromium_src-135025619f3506016a729ff150b31c42b0856cd6.zip chromium_src-135025619f3506016a729ff150b31c42b0856cd6.tar.gz chromium_src-135025619f3506016a729ff150b31c42b0856cd6.tar.bz2 |
Coverity: Fix a leak.
Also:
* Clarify the interface for DictionaryValue::MergeDictionary.
* Add tests that MergeDictionary performs a deep copy.
FYI:
* ReadExternalExtensionPrefFile() needs unit testing.
CID=103941
BUG=none
TEST=ValuesTest.MergeDictionaryDeepCopy
R=finnur
TBR=brettw
Review URL: https://chromiumcodereview.appspot.com/10358020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136137 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/values_unittest.cc')
-rw-r--r-- | base/values_unittest.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/base/values_unittest.cc b/base/values_unittest.cc index bbc53f9..9b92949 100644 --- a/base/values_unittest.cc +++ b/base/values_unittest.cc @@ -718,6 +718,37 @@ TEST(ValuesTest, MergeDictionary) { EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in. } +TEST(ValuesTest, MergeDictionaryDeepCopy) { + DictionaryValue* child = new DictionaryValue; + child->SetString("test", "value"); + EXPECT_EQ(1U, child->size()); + + std::string value; + EXPECT_TRUE(child->GetString("test", &value)); + EXPECT_EQ("value", value); + + scoped_ptr<DictionaryValue> base(new DictionaryValue); + base->Set("dict", child); + EXPECT_EQ(1U, base->size()); + + DictionaryValue* ptr; + EXPECT_TRUE(base->GetDictionary("dict", &ptr)); + EXPECT_EQ(child, ptr); + + scoped_ptr<DictionaryValue> merged(new DictionaryValue); + merged->MergeDictionary(base.get()); + EXPECT_EQ(1U, merged->size()); + EXPECT_TRUE(merged->GetDictionary("dict", &ptr)); + EXPECT_NE(child, ptr); + EXPECT_TRUE(ptr->GetString("test", &value)); + EXPECT_EQ("value", value); + + child->SetString("test", "overwrite"); + base.reset(); + EXPECT_TRUE(ptr->GetString("test", &value)); + EXPECT_EQ("value", value); +} + TEST(ValuesTest, DictionaryIterator) { DictionaryValue dict; for (DictionaryValue::Iterator it(dict); it.HasNext(); it.Advance()) { |