| Index: base/prefs/pref_change_registrar_unittest.cc
|
| diff --git a/base/prefs/pref_change_registrar_unittest.cc b/base/prefs/pref_change_registrar_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..da425cfad287b231215949c68553fef231393dd8
|
| --- /dev/null
|
| +++ b/base/prefs/pref_change_registrar_unittest.cc
|
| @@ -0,0 +1,198 @@
|
| +// Copyright (c) 2010 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/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/prefs/pref_change_registrar.h"
|
| +#include "base/prefs/pref_observer.h"
|
| +#include "base/prefs/pref_registry_simple.h"
|
| +#include "base/prefs/testing_pref_service.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using testing::Mock;
|
| +using testing::Eq;
|
| +
|
| +namespace base {
|
| +namespace {
|
| +
|
| +const char kHomePage[] = "homepage";
|
| +const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage";
|
| +const char kApplicationLocale[] = "intl.app_locale";
|
| +
|
| +// A mock provider that allows us to capture pref observer changes.
|
| +class MockPrefService : public TestingPrefServiceSimple {
|
| + public:
|
| + MockPrefService() {}
|
| + virtual ~MockPrefService() {}
|
| +
|
| + MOCK_METHOD2(AddPrefObserver, void(const std::string&, PrefObserver*));
|
| + MOCK_METHOD2(RemovePrefObserver, void(const std::string&, PrefObserver*));
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class PrefChangeRegistrarTest : public testing::Test {
|
| + public:
|
| + PrefChangeRegistrarTest() {}
|
| + ~PrefChangeRegistrarTest() override {}
|
| +
|
| + protected:
|
| + void SetUp() override;
|
| +
|
| + base::Closure observer() const {
|
| + return base::Bind(&base::DoNothing);
|
| + }
|
| +
|
| + MockPrefService* service() const { return service_.get(); }
|
| +
|
| + private:
|
| + scoped_ptr<MockPrefService> service_;
|
| +};
|
| +
|
| +void PrefChangeRegistrarTest::SetUp() {
|
| + service_.reset(new MockPrefService());
|
| +}
|
| +
|
| +TEST_F(PrefChangeRegistrarTest, AddAndRemove) {
|
| + PrefChangeRegistrar registrar;
|
| + registrar.Init(service());
|
| +
|
| + // Test adding.
|
| + EXPECT_CALL(*service(),
|
| + AddPrefObserver(Eq(std::string("test.pref.1")), ®istrar));
|
| + EXPECT_CALL(*service(),
|
| + AddPrefObserver(Eq(std::string("test.pref.2")), ®istrar));
|
| + registrar.Add("test.pref.1", observer());
|
| + registrar.Add("test.pref.2", observer());
|
| + EXPECT_FALSE(registrar.IsEmpty());
|
| +
|
| + // Test removing.
|
| + Mock::VerifyAndClearExpectations(service());
|
| + EXPECT_CALL(*service(),
|
| + RemovePrefObserver(Eq(std::string("test.pref.1")), ®istrar));
|
| + EXPECT_CALL(*service(),
|
| + RemovePrefObserver(Eq(std::string("test.pref.2")), ®istrar));
|
| + registrar.Remove("test.pref.1");
|
| + registrar.Remove("test.pref.2");
|
| + EXPECT_TRUE(registrar.IsEmpty());
|
| +
|
| + // Explicitly check the expectations now to make sure that the Removes
|
| + // worked (rather than the registrar destructor doing the work).
|
| + Mock::VerifyAndClearExpectations(service());
|
| +}
|
| +
|
| +TEST_F(PrefChangeRegistrarTest, AutoRemove) {
|
| + PrefChangeRegistrar registrar;
|
| + registrar.Init(service());
|
| +
|
| + // Setup of auto-remove.
|
| + EXPECT_CALL(*service(),
|
| + AddPrefObserver(Eq(std::string("test.pref.1")), ®istrar));
|
| + registrar.Add("test.pref.1", observer());
|
| + Mock::VerifyAndClearExpectations(service());
|
| + EXPECT_FALSE(registrar.IsEmpty());
|
| +
|
| + // Test auto-removing.
|
| + EXPECT_CALL(*service(),
|
| + RemovePrefObserver(Eq(std::string("test.pref.1")), ®istrar));
|
| +}
|
| +
|
| +TEST_F(PrefChangeRegistrarTest, RemoveAll) {
|
| + PrefChangeRegistrar registrar;
|
| + registrar.Init(service());
|
| +
|
| + EXPECT_CALL(*service(),
|
| + AddPrefObserver(Eq(std::string("test.pref.1")), ®istrar));
|
| + EXPECT_CALL(*service(),
|
| + AddPrefObserver(Eq(std::string("test.pref.2")), ®istrar));
|
| + registrar.Add("test.pref.1", observer());
|
| + registrar.Add("test.pref.2", observer());
|
| + Mock::VerifyAndClearExpectations(service());
|
| +
|
| + EXPECT_CALL(*service(),
|
| + RemovePrefObserver(Eq(std::string("test.pref.1")), ®istrar));
|
| + EXPECT_CALL(*service(),
|
| + RemovePrefObserver(Eq(std::string("test.pref.2")), ®istrar));
|
| + registrar.RemoveAll();
|
| + EXPECT_TRUE(registrar.IsEmpty());
|
| +
|
| + // Explicitly check the expectations now to make sure that the RemoveAll
|
| + // worked (rather than the registrar destructor doing the work).
|
| + Mock::VerifyAndClearExpectations(service());
|
| +}
|
| +
|
| +class ObserveSetOfPreferencesTest : public testing::Test {
|
| + public:
|
| + virtual void SetUp() {
|
| + pref_service_.reset(new TestingPrefServiceSimple);
|
| + PrefRegistrySimple* registry = pref_service_->registry();
|
| + registry->RegisterStringPref(kHomePage, "http://google.com");
|
| + registry->RegisterBooleanPref(kHomePageIsNewTabPage, false);
|
| + registry->RegisterStringPref(kApplicationLocale, std::string());
|
| + }
|
| +
|
| + PrefChangeRegistrar* CreatePrefChangeRegistrar() {
|
| + PrefChangeRegistrar* pref_set = new PrefChangeRegistrar();
|
| + base::Closure callback = base::Bind(&base::DoNothing);
|
| + pref_set->Init(pref_service_.get());
|
| + pref_set->Add(kHomePage, callback);
|
| + pref_set->Add(kHomePageIsNewTabPage, callback);
|
| + return pref_set;
|
| + }
|
| +
|
| + MOCK_METHOD1(OnPreferenceChanged, void(const std::string&));
|
| +
|
| + scoped_ptr<TestingPrefServiceSimple> pref_service_;
|
| +};
|
| +
|
| +TEST_F(ObserveSetOfPreferencesTest, IsObserved) {
|
| + scoped_ptr<PrefChangeRegistrar> pref_set(CreatePrefChangeRegistrar());
|
| + EXPECT_TRUE(pref_set->IsObserved(kHomePage));
|
| + EXPECT_TRUE(pref_set->IsObserved(kHomePageIsNewTabPage));
|
| + EXPECT_FALSE(pref_set->IsObserved(kApplicationLocale));
|
| +}
|
| +
|
| +TEST_F(ObserveSetOfPreferencesTest, IsManaged) {
|
| + scoped_ptr<PrefChangeRegistrar> pref_set(CreatePrefChangeRegistrar());
|
| + EXPECT_FALSE(pref_set->IsManaged());
|
| + pref_service_->SetManagedPref(kHomePage,
|
| + new StringValue("http://crbug.com"));
|
| + EXPECT_TRUE(pref_set->IsManaged());
|
| + pref_service_->SetManagedPref(kHomePageIsNewTabPage,
|
| + new FundamentalValue(true));
|
| + EXPECT_TRUE(pref_set->IsManaged());
|
| + pref_service_->RemoveManagedPref(kHomePage);
|
| + EXPECT_TRUE(pref_set->IsManaged());
|
| + pref_service_->RemoveManagedPref(kHomePageIsNewTabPage);
|
| + EXPECT_FALSE(pref_set->IsManaged());
|
| +}
|
| +
|
| +TEST_F(ObserveSetOfPreferencesTest, Observe) {
|
| + using testing::_;
|
| + using testing::Mock;
|
| +
|
| + PrefChangeRegistrar pref_set;
|
| + PrefChangeRegistrar::NamedChangeCallback callback = base::Bind(
|
| + &ObserveSetOfPreferencesTest::OnPreferenceChanged,
|
| + base::Unretained(this));
|
| + pref_set.Init(pref_service_.get());
|
| + pref_set.Add(kHomePage, callback);
|
| + pref_set.Add(kHomePageIsNewTabPage, callback);
|
| +
|
| + EXPECT_CALL(*this, OnPreferenceChanged(kHomePage));
|
| + pref_service_->SetUserPref(kHomePage, new StringValue("http://crbug.com"));
|
| + Mock::VerifyAndClearExpectations(this);
|
| +
|
| + EXPECT_CALL(*this, OnPreferenceChanged(kHomePageIsNewTabPage));
|
| + pref_service_->SetUserPref(kHomePageIsNewTabPage,
|
| + new FundamentalValue(true));
|
| + Mock::VerifyAndClearExpectations(this);
|
| +
|
| + EXPECT_CALL(*this, OnPreferenceChanged(_)).Times(0);
|
| + pref_service_->SetUserPref(kApplicationLocale, new StringValue("en_US.utf8"));
|
| + Mock::VerifyAndClearExpectations(this);
|
| +}
|
| +
|
| +} // namespace base
|
|
|