| Index: content/browser/mojo/merge_dictionary_unittest.cc
|
| diff --git a/content/browser/mojo/merge_dictionary_unittest.cc b/content/browser/mojo/merge_dictionary_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..16e7af6ef1b4a1a4ee98e4e50405d5c3453a2fc8
|
| --- /dev/null
|
| +++ b/content/browser/mojo/merge_dictionary_unittest.cc
|
| @@ -0,0 +1,73 @@
|
| +// Copyright 2016 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 "base/memory/ptr_util.h"
|
| +#include "content/browser/mojo/merge_dictionary.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace content {
|
| +
|
| +using MergeDictionaryTest = testing::Test;
|
| +
|
| +TEST(MergeDictionaryTest, Merge) {
|
| + // |source| & |target| have three properties, "string", "list" and
|
| + // "dictionary", which are then merged.
|
| + base::DictionaryValue target;
|
| + target.SetString("string", "Hello, ");
|
| + std::unique_ptr<base::DictionaryValue> dict_value_original(
|
| + base::MakeUnique<base::DictionaryValue>());
|
| + dict_value_original->SetString("key1", "original");
|
| + dict_value_original->SetString("key3", "original");
|
| + target.Set("dictionary", std::move(dict_value_original));
|
| + std::unique_ptr<base::ListValue> list(base::MakeUnique<base::ListValue>());
|
| + list->AppendString("A");
|
| + list->AppendString("B");
|
| + target.Set("list", std::move(list));
|
| +
|
| + base::DictionaryValue source;
|
| + source.SetString("string", "World!");
|
| + std::unique_ptr<base::DictionaryValue> dict_value_replacement(
|
| + base::MakeUnique<base::DictionaryValue>());
|
| + dict_value_replacement->SetString("key1", "new");
|
| + dict_value_replacement->SetString("key2", "new");
|
| + source.Set("dictionary", std::move(dict_value_replacement));
|
| + list = base::MakeUnique<base::ListValue>();
|
| + list->AppendString("C");
|
| + source.Set("list", std::move(list));
|
| +
|
| + MergeDictionary(&target, &source);
|
| +
|
| + // Simple string value should have been clobbered.
|
| + std::string out_string;
|
| + EXPECT_TRUE(target.GetString("string", &out_string));
|
| + EXPECT_EQ(out_string, "World!");
|
| +
|
| + // Dictionary should have been merged, with key1 being clobbered, key2 added
|
| + // and key3 preserved.
|
| + base::DictionaryValue* out_dictionary = nullptr;
|
| + EXPECT_TRUE(target.GetDictionary("dictionary", &out_dictionary));
|
| + EXPECT_EQ(3u, out_dictionary->size());
|
| + std::string value1, value2, value3;
|
| + EXPECT_TRUE(out_dictionary->GetString("key1", &value1));
|
| + EXPECT_TRUE(out_dictionary->GetString("key2", &value2));
|
| + EXPECT_TRUE(out_dictionary->GetString("key3", &value3));
|
| + EXPECT_EQ(value1, "new");
|
| + EXPECT_EQ(value2, "new");
|
| + EXPECT_EQ(value3, "original");
|
| +
|
| + // List should have been merged, with the items from source appended to the
|
| + // items from target.
|
| + base::ListValue* out_list = nullptr;
|
| + EXPECT_TRUE(target.GetList("list", &out_list));
|
| + EXPECT_EQ(3u, out_list->GetSize());
|
| + std::string a, b, c;
|
| + EXPECT_TRUE(out_list->GetString(0, &a));
|
| + EXPECT_TRUE(out_list->GetString(1, &b));
|
| + EXPECT_TRUE(out_list->GetString(2, &c));
|
| + EXPECT_EQ("A", a);
|
| + EXPECT_EQ("B", b);
|
| + EXPECT_EQ("C", c);
|
| +}
|
| +
|
| +} // namespace content
|
|
|