| Index: components/syncable_prefs/pref_model_associator_unittest.cc
|
| diff --git a/components/syncable_prefs/pref_model_associator_unittest.cc b/components/syncable_prefs/pref_model_associator_unittest.cc
|
| deleted file mode 100644
|
| index 023524208a8387b493f4b53e5fadbd9c7f9a69f1..0000000000000000000000000000000000000000
|
| --- a/components/syncable_prefs/pref_model_associator_unittest.cc
|
| +++ /dev/null
|
| @@ -1,445 +0,0 @@
|
| -// 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 "components/syncable_prefs/pref_model_associator.h"
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/macros.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/values.h"
|
| -#include "components/prefs/scoped_user_pref_update.h"
|
| -#include "components/syncable_prefs/pref_model_associator_client.h"
|
| -#include "components/syncable_prefs/pref_service_mock_factory.h"
|
| -#include "components/syncable_prefs/pref_service_syncable.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace syncable_prefs {
|
| -
|
| -namespace {
|
| -
|
| -const char kStringPrefName[] = "pref.string";
|
| -const char kListPrefName[] = "pref.list";
|
| -const char kDictionaryPrefName[] = "pref.dictionary";
|
| -
|
| -class TestPrefModelAssociatorClient : public PrefModelAssociatorClient {
|
| - public:
|
| - TestPrefModelAssociatorClient() {}
|
| - ~TestPrefModelAssociatorClient() override {}
|
| -
|
| - // PrefModelAssociatorClient implementation.
|
| - bool IsMergeableListPreference(const std::string& pref_name) const override {
|
| - return pref_name == kListPrefName;
|
| - }
|
| -
|
| - bool IsMergeableDictionaryPreference(
|
| - const std::string& pref_name) const override {
|
| - return pref_name == kDictionaryPrefName;
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TestPrefModelAssociatorClient);
|
| -};
|
| -
|
| -class AbstractPreferenceMergeTest : public testing::Test {
|
| - protected:
|
| - AbstractPreferenceMergeTest() {
|
| - PrefServiceMockFactory factory;
|
| - factory.SetPrefModelAssociatorClient(&client_);
|
| - scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry(
|
| - new user_prefs::PrefRegistrySyncable);
|
| - pref_registry->RegisterStringPref(
|
| - kStringPrefName,
|
| - std::string(),
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - pref_registry->RegisterListPref(
|
| - kListPrefName,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - pref_registry->RegisterDictionaryPref(
|
| - kDictionaryPrefName,
|
| - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| - pref_service_ = factory.CreateSyncable(pref_registry.get());
|
| - pref_sync_service_ = static_cast<PrefModelAssociator*>(
|
| - pref_service_->GetSyncableService(syncer::PREFERENCES));
|
| - }
|
| -
|
| - void SetContentPattern(base::DictionaryValue* patterns_dict,
|
| - const std::string& expression,
|
| - int setting) {
|
| - base::DictionaryValue* expression_dict;
|
| - bool found =
|
| - patterns_dict->GetDictionaryWithoutPathExpansion(expression,
|
| - &expression_dict);
|
| - if (!found) {
|
| - expression_dict = new base::DictionaryValue;
|
| - patterns_dict->SetWithoutPathExpansion(expression, expression_dict);
|
| - }
|
| - expression_dict->SetWithoutPathExpansion(
|
| - "setting", new base::FundamentalValue(setting));
|
| - }
|
| -
|
| - void SetPrefToEmpty(const std::string& pref_name) {
|
| - std::unique_ptr<base::Value> empty_value;
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(pref_name.c_str());
|
| - ASSERT_TRUE(pref);
|
| - base::Value::Type type = pref->GetType();
|
| - if (type == base::Value::TYPE_DICTIONARY)
|
| - empty_value.reset(new base::DictionaryValue);
|
| - else if (type == base::Value::TYPE_LIST)
|
| - empty_value.reset(new base::ListValue);
|
| - else
|
| - FAIL();
|
| - pref_service_->Set(pref_name.c_str(), *empty_value);
|
| - }
|
| -
|
| - TestPrefModelAssociatorClient client_;
|
| - std::unique_ptr<PrefServiceSyncable> pref_service_;
|
| - PrefModelAssociator* pref_sync_service_;
|
| -};
|
| -
|
| -class ListPreferenceMergeTest : public AbstractPreferenceMergeTest {
|
| - protected:
|
| - ListPreferenceMergeTest()
|
| - : server_url0_("http://example.com/server0"),
|
| - server_url1_("http://example.com/server1"),
|
| - local_url0_("http://example.com/local0"),
|
| - local_url1_("http://example.com/local1") {
|
| - server_url_list_.AppendString(server_url0_);
|
| - server_url_list_.AppendString(server_url1_);
|
| - }
|
| -
|
| - std::string server_url0_;
|
| - std::string server_url1_;
|
| - std::string local_url0_;
|
| - std::string local_url1_;
|
| - base::ListValue server_url_list_;
|
| -};
|
| -
|
| -TEST_F(ListPreferenceMergeTest, NotListOrDictionary) {
|
| - pref_service_->SetString(kStringPrefName, local_url0_);
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kStringPrefName);
|
| - std::unique_ptr<base::Value> server_value(
|
| - new base::StringValue(server_url0_));
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), *server_value));
|
| - EXPECT_TRUE(merged_value->Equals(server_value.get()));
|
| -}
|
| -
|
| -TEST_F(ListPreferenceMergeTest, LocalEmpty) {
|
| - SetPrefToEmpty(kListPrefName);
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kListPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), server_url_list_));
|
| - EXPECT_TRUE(merged_value->Equals(&server_url_list_));
|
| -}
|
| -
|
| -TEST_F(ListPreferenceMergeTest, ServerNull) {
|
| - std::unique_ptr<base::Value> null_value = base::Value::CreateNullValue();
|
| - {
|
| - ListPrefUpdate update(pref_service_.get(), kListPrefName);
|
| - base::ListValue* local_list_value = update.Get();
|
| - local_list_value->AppendString(local_url0_);
|
| - }
|
| -
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kListPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), *null_value));
|
| - const base::ListValue* local_list_value =
|
| - pref_service_->GetList(kListPrefName);
|
| - EXPECT_TRUE(merged_value->Equals(local_list_value));
|
| -}
|
| -
|
| -TEST_F(ListPreferenceMergeTest, ServerEmpty) {
|
| - std::unique_ptr<base::Value> empty_value(new base::ListValue);
|
| - {
|
| - ListPrefUpdate update(pref_service_.get(), kListPrefName);
|
| - base::ListValue* local_list_value = update.Get();
|
| - local_list_value->AppendString(local_url0_);
|
| - }
|
| -
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kListPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), *empty_value));
|
| - const base::ListValue* local_list_value =
|
| - pref_service_->GetList(kListPrefName);
|
| - EXPECT_TRUE(merged_value->Equals(local_list_value));
|
| -}
|
| -
|
| -TEST_F(ListPreferenceMergeTest, Merge) {
|
| - {
|
| - ListPrefUpdate update(pref_service_.get(), kListPrefName);
|
| - base::ListValue* local_list_value = update.Get();
|
| - local_list_value->AppendString(local_url0_);
|
| - local_list_value->AppendString(local_url1_);
|
| - }
|
| -
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kListPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), server_url_list_));
|
| -
|
| - base::ListValue expected;
|
| - expected.AppendString(server_url0_);
|
| - expected.AppendString(server_url1_);
|
| - expected.AppendString(local_url0_);
|
| - expected.AppendString(local_url1_);
|
| - EXPECT_TRUE(merged_value->Equals(&expected));
|
| -}
|
| -
|
| -TEST_F(ListPreferenceMergeTest, Duplicates) {
|
| - {
|
| - ListPrefUpdate update(pref_service_.get(), kListPrefName);
|
| - base::ListValue* local_list_value = update.Get();
|
| - local_list_value->AppendString(local_url0_);
|
| - local_list_value->AppendString(server_url0_);
|
| - local_list_value->AppendString(server_url1_);
|
| - }
|
| -
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kListPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), server_url_list_));
|
| -
|
| - base::ListValue expected;
|
| - expected.AppendString(server_url0_);
|
| - expected.AppendString(server_url1_);
|
| - expected.AppendString(local_url0_);
|
| - EXPECT_TRUE(merged_value->Equals(&expected));
|
| -}
|
| -
|
| -TEST_F(ListPreferenceMergeTest, Equals) {
|
| - {
|
| - ListPrefUpdate update(pref_service_.get(), kListPrefName);
|
| - base::ListValue* local_list_value = update.Get();
|
| - local_list_value->AppendString(server_url0_);
|
| - local_list_value->AppendString(server_url1_);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> original(server_url_list_.DeepCopy());
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kListPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), server_url_list_));
|
| - EXPECT_TRUE(merged_value->Equals(original.get()));
|
| -}
|
| -
|
| -class DictionaryPreferenceMergeTest : public AbstractPreferenceMergeTest {
|
| - protected:
|
| - DictionaryPreferenceMergeTest()
|
| - : expression0_("expression0"),
|
| - expression1_("expression1"),
|
| - expression2_("expression2"),
|
| - expression3_("expression3"),
|
| - expression4_("expression4") {
|
| - SetContentPattern(&server_patterns_, expression0_, 1);
|
| - SetContentPattern(&server_patterns_, expression1_, 2);
|
| - SetContentPattern(&server_patterns_, expression2_, 1);
|
| - }
|
| -
|
| - std::string expression0_;
|
| - std::string expression1_;
|
| - std::string expression2_;
|
| - std::string expression3_;
|
| - std::string expression4_;
|
| - base::DictionaryValue server_patterns_;
|
| -};
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, LocalEmpty) {
|
| - SetPrefToEmpty(kDictionaryPrefName);
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kDictionaryPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), server_patterns_));
|
| - EXPECT_TRUE(merged_value->Equals(&server_patterns_));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, ServerNull) {
|
| - std::unique_ptr<base::Value> null_value = base::Value::CreateNullValue();
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), kDictionaryPrefName);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression3_, 1);
|
| - }
|
| -
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kDictionaryPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), *null_value));
|
| - const base::DictionaryValue* local_dict_value =
|
| - pref_service_->GetDictionary(kDictionaryPrefName);
|
| - EXPECT_TRUE(merged_value->Equals(local_dict_value));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, ServerEmpty) {
|
| - std::unique_ptr<base::Value> empty_value(new base::DictionaryValue);
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), kDictionaryPrefName);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression3_, 1);
|
| - }
|
| -
|
| - const PrefService::Preference* pref =
|
| - pref_service_->FindPreference(kDictionaryPrefName);
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - pref->name(), *pref->GetValue(), *empty_value));
|
| - const base::DictionaryValue* local_dict_value =
|
| - pref_service_->GetDictionary(kDictionaryPrefName);
|
| - EXPECT_TRUE(merged_value->Equals(local_dict_value));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, MergeNoConflicts) {
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), kDictionaryPrefName);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression3_, 1);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - kDictionaryPrefName,
|
| - *pref_service_->FindPreference(kDictionaryPrefName)->GetValue(),
|
| - server_patterns_));
|
| -
|
| - base::DictionaryValue expected;
|
| - SetContentPattern(&expected, expression0_, 1);
|
| - SetContentPattern(&expected, expression1_, 2);
|
| - SetContentPattern(&expected, expression2_, 1);
|
| - SetContentPattern(&expected, expression3_, 1);
|
| - EXPECT_TRUE(merged_value->Equals(&expected));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, MergeConflicts) {
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), kDictionaryPrefName);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression0_, 2);
|
| - SetContentPattern(local_dict_value, expression2_, 1);
|
| - SetContentPattern(local_dict_value, expression3_, 1);
|
| - SetContentPattern(local_dict_value, expression4_, 2);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - kDictionaryPrefName,
|
| - *pref_service_->FindPreference(kDictionaryPrefName)->GetValue(),
|
| - server_patterns_));
|
| -
|
| - base::DictionaryValue expected;
|
| - SetContentPattern(&expected, expression0_, 1);
|
| - SetContentPattern(&expected, expression1_, 2);
|
| - SetContentPattern(&expected, expression2_, 1);
|
| - SetContentPattern(&expected, expression3_, 1);
|
| - SetContentPattern(&expected, expression4_, 2);
|
| - EXPECT_TRUE(merged_value->Equals(&expected));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, MergeValueToDictionary) {
|
| - base::DictionaryValue local_dict_value;
|
| - local_dict_value.SetInteger("key", 0);
|
| -
|
| - base::DictionaryValue server_dict_value;
|
| - server_dict_value.SetInteger("key.subkey", 0);
|
| -
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - kDictionaryPrefName, local_dict_value, server_dict_value));
|
| -
|
| - EXPECT_TRUE(merged_value->Equals(&server_dict_value));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, Equal) {
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), kDictionaryPrefName);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression0_, 1);
|
| - SetContentPattern(local_dict_value, expression1_, 2);
|
| - SetContentPattern(local_dict_value, expression2_, 1);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - kDictionaryPrefName,
|
| - *pref_service_->FindPreference(kDictionaryPrefName)->GetValue(),
|
| - server_patterns_));
|
| - EXPECT_TRUE(merged_value->Equals(&server_patterns_));
|
| -}
|
| -
|
| -TEST_F(DictionaryPreferenceMergeTest, ConflictButServerWins) {
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), kDictionaryPrefName);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression0_, 2);
|
| - SetContentPattern(local_dict_value, expression1_, 2);
|
| - SetContentPattern(local_dict_value, expression2_, 1);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> merged_value(pref_sync_service_->MergePreference(
|
| - kDictionaryPrefName,
|
| - *pref_service_->FindPreference(kDictionaryPrefName)->GetValue(),
|
| - server_patterns_));
|
| - EXPECT_TRUE(merged_value->Equals(&server_patterns_));
|
| -}
|
| -
|
| -class IndividualPreferenceMergeTest : public AbstractPreferenceMergeTest {
|
| - protected:
|
| - IndividualPreferenceMergeTest()
|
| - : url0_("http://example.com/server0"),
|
| - url1_("http://example.com/server1"),
|
| - expression0_("expression0"),
|
| - expression1_("expression1") {
|
| - server_url_list_.AppendString(url0_);
|
| - SetContentPattern(&server_patterns_, expression0_, 1);
|
| - }
|
| -
|
| - bool MergeListPreference(const char* pref) {
|
| - {
|
| - ListPrefUpdate update(pref_service_.get(), pref);
|
| - base::ListValue* local_list_value = update.Get();
|
| - local_list_value->AppendString(url1_);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> merged_value(
|
| - pref_sync_service_->MergePreference(
|
| - pref, *pref_service_->GetUserPrefValue(pref), server_url_list_));
|
| -
|
| - base::ListValue expected;
|
| - expected.AppendString(url0_);
|
| - expected.AppendString(url1_);
|
| - return merged_value->Equals(&expected);
|
| - }
|
| -
|
| - bool MergeDictionaryPreference(const char* pref) {
|
| - {
|
| - DictionaryPrefUpdate update(pref_service_.get(), pref);
|
| - base::DictionaryValue* local_dict_value = update.Get();
|
| - SetContentPattern(local_dict_value, expression1_, 1);
|
| - }
|
| -
|
| - std::unique_ptr<base::Value> merged_value(
|
| - pref_sync_service_->MergePreference(
|
| - pref, *pref_service_->GetUserPrefValue(pref), server_patterns_));
|
| -
|
| - base::DictionaryValue expected;
|
| - SetContentPattern(&expected, expression0_, 1);
|
| - SetContentPattern(&expected, expression1_, 1);
|
| - return merged_value->Equals(&expected);
|
| - }
|
| -
|
| - std::string url0_;
|
| - std::string url1_;
|
| - std::string expression0_;
|
| - std::string expression1_;
|
| - std::string content_type0_;
|
| - base::ListValue server_url_list_;
|
| - base::DictionaryValue server_patterns_;
|
| -};
|
| -
|
| -TEST_F(IndividualPreferenceMergeTest, ListPreference) {
|
| - EXPECT_TRUE(MergeListPreference(kListPrefName));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace syncable_prefs
|
|
|