Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/bind.h" | |
| 6 #include "base/bind_helpers.h" | |
| 5 #include "base/prefs/public/pref_change_registrar.h" | 7 #include "base/prefs/public/pref_change_registrar.h" |
| 6 #include "base/prefs/public/pref_observer.h" | 8 #include "base/prefs/public/pref_observer.h" |
| 7 #include "chrome/test/base/testing_pref_service.h" | 9 #include "chrome/test/base/testing_pref_service.h" |
| 8 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 12 |
| 11 using testing::Mock; | 13 using testing::Mock; |
| 12 using testing::Eq; | 14 using testing::Eq; |
| 13 | 15 |
| 14 namespace { | 16 namespace { |
| 15 | 17 |
| 16 const char kHomePage[] = "homepage"; | 18 const char kHomePage[] = "homepage"; |
| 17 const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage"; | 19 const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage"; |
| 18 const char kApplicationLocale[] = "intl.app_locale"; | 20 const char kApplicationLocale[] = "intl.app_locale"; |
| 19 | 21 |
| 20 // TODO(joi): Use PrefObserverMock once it moves to base/prefs/. | |
| 21 class MockPrefObserver : public PrefObserver { | |
| 22 public: | |
| 23 virtual ~MockPrefObserver() {} | |
| 24 | |
| 25 MOCK_METHOD2(OnPreferenceChanged, void(PrefServiceBase*, const std::string&)); | |
| 26 }; | |
| 27 | |
| 28 // A mock provider that allows us to capture pref observer changes. | 22 // A mock provider that allows us to capture pref observer changes. |
| 29 class MockPrefService : public TestingPrefService { | 23 class MockPrefService : public TestingPrefService { |
| 30 public: | 24 public: |
| 31 MockPrefService() {} | 25 MockPrefService() {} |
| 32 virtual ~MockPrefService() {} | 26 virtual ~MockPrefService() {} |
| 33 | 27 |
| 34 MOCK_METHOD2(AddPrefObserver, | 28 MOCK_METHOD2(AddPrefObserver, |
| 35 void(const char*, PrefObserver*)); | 29 void(const char*, PrefObserver*)); |
| 36 MOCK_METHOD2(RemovePrefObserver, | 30 MOCK_METHOD2(RemovePrefObserver, |
| 37 void(const char*, PrefObserver*)); | 31 void(const char*, PrefObserver*)); |
| 38 }; | 32 }; |
| 39 | 33 |
| 40 } // namespace | 34 } // namespace |
| 41 | 35 |
| 42 class PrefChangeRegistrarTest : public testing::Test { | 36 class PrefChangeRegistrarTest : public testing::Test { |
| 43 public: | 37 public: |
| 44 PrefChangeRegistrarTest() {} | 38 PrefChangeRegistrarTest() {} |
| 45 virtual ~PrefChangeRegistrarTest() {} | 39 virtual ~PrefChangeRegistrarTest() {} |
| 46 | 40 |
| 47 protected: | 41 protected: |
| 48 virtual void SetUp(); | 42 virtual void SetUp(); |
| 49 | 43 |
| 50 PrefObserver* observer() const { return observer_.get(); } | 44 base::Closure observer() const { |
| 45 return base::Bind(&base::DoNothing); | |
| 46 } | |
| 47 | |
| 51 MockPrefService* service() const { return service_.get(); } | 48 MockPrefService* service() const { return service_.get(); } |
| 52 | 49 |
| 53 private: | 50 private: |
| 54 scoped_ptr<MockPrefService> service_; | 51 scoped_ptr<MockPrefService> service_; |
| 55 scoped_ptr<MockPrefObserver> observer_; | |
| 56 }; | 52 }; |
| 57 | 53 |
| 58 void PrefChangeRegistrarTest::SetUp() { | 54 void PrefChangeRegistrarTest::SetUp() { |
| 59 service_.reset(new MockPrefService()); | 55 service_.reset(new MockPrefService()); |
| 60 observer_.reset(new MockPrefObserver()); | |
| 61 } | 56 } |
| 62 | 57 |
| 63 TEST_F(PrefChangeRegistrarTest, AddAndRemove) { | 58 TEST_F(PrefChangeRegistrarTest, AddAndRemove) { |
| 64 PrefChangeRegistrar registrar; | 59 PrefChangeRegistrar registrar; |
| 65 registrar.Init(service()); | 60 registrar.Init(service()); |
| 66 | 61 |
| 67 // Test adding. | 62 // Test adding. |
| 68 EXPECT_CALL(*service(), | 63 EXPECT_CALL(*service(), |
| 69 AddPrefObserver(Eq(std::string("test.pref.1")), ®istrar)); | 64 AddPrefObserver(Eq(std::string("test.pref.1")), ®istrar)); |
| 70 EXPECT_CALL(*service(), | 65 EXPECT_CALL(*service(), |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 121 EXPECT_CALL(*service(), | 116 EXPECT_CALL(*service(), |
| 122 RemovePrefObserver(Eq(std::string("test.pref.2")), ®istrar)); | 117 RemovePrefObserver(Eq(std::string("test.pref.2")), ®istrar)); |
| 123 registrar.RemoveAll(); | 118 registrar.RemoveAll(); |
| 124 EXPECT_TRUE(registrar.IsEmpty()); | 119 EXPECT_TRUE(registrar.IsEmpty()); |
| 125 | 120 |
| 126 // Explicitly check the expectations now to make sure that the RemoveAll | 121 // Explicitly check the expectations now to make sure that the RemoveAll |
| 127 // worked (rather than the registrar destructor doing the work). | 122 // worked (rather than the registrar destructor doing the work). |
| 128 Mock::VerifyAndClearExpectations(service()); | 123 Mock::VerifyAndClearExpectations(service()); |
| 129 } | 124 } |
| 130 | 125 |
| 131 class ObserveSetOfPreferencesTest : public testing::Test, | 126 class ObserveSetOfPreferencesTest : public testing::Test { |
| 132 public PrefObserver { | |
| 133 public: | 127 public: |
| 134 virtual void SetUp() { | 128 virtual void SetUp() { |
| 135 pref_service_.reset(new TestingPrefService); | 129 pref_service_.reset(new TestingPrefService); |
| 136 pref_service_->RegisterStringPref(kHomePage, | 130 pref_service_->RegisterStringPref(kHomePage, |
| 137 "http://google.com", | 131 "http://google.com", |
| 138 PrefService::UNSYNCABLE_PREF); | 132 PrefService::UNSYNCABLE_PREF); |
| 139 pref_service_->RegisterBooleanPref(kHomePageIsNewTabPage, | 133 pref_service_->RegisterBooleanPref(kHomePageIsNewTabPage, |
| 140 false, | 134 false, |
| 141 PrefService::UNSYNCABLE_PREF); | 135 PrefService::UNSYNCABLE_PREF); |
| 142 pref_service_->RegisterStringPref(kApplicationLocale, | 136 pref_service_->RegisterStringPref(kApplicationLocale, |
| 143 "", | 137 "", |
| 144 PrefService::UNSYNCABLE_PREF); | 138 PrefService::UNSYNCABLE_PREF); |
| 145 } | 139 } |
| 146 | 140 |
| 147 PrefChangeRegistrar* CreatePrefChangeRegistrar( | 141 PrefChangeRegistrar* CreatePrefChangeRegistrar() { |
| 148 PrefObserver* observer) { | |
| 149 if (!observer) | |
| 150 observer = this; | |
| 151 PrefChangeRegistrar* pref_set = new PrefChangeRegistrar(); | 142 PrefChangeRegistrar* pref_set = new PrefChangeRegistrar(); |
| 143 base::Closure callback = base::Bind(&base::DoNothing); | |
| 152 pref_set->Init(pref_service_.get()); | 144 pref_set->Init(pref_service_.get()); |
| 153 pref_set->Add(kHomePage, observer); | 145 pref_set->Add(kHomePage, callback); |
| 154 pref_set->Add(kHomePageIsNewTabPage, observer); | 146 pref_set->Add(kHomePageIsNewTabPage, callback); |
| 155 return pref_set; | 147 return pref_set; |
| 156 } | 148 } |
| 157 | 149 |
| 158 // PrefObserver (used to enable NULL as parameter to | |
| 159 // CreatePrefChangeRegistrar above). | |
| 160 virtual void OnPreferenceChanged(PrefServiceBase* service, | |
| 161 const std::string& pref_name) OVERRIDE { | |
| 162 } | |
| 163 | |
| 164 scoped_ptr<TestingPrefService> pref_service_; | 150 scoped_ptr<TestingPrefService> pref_service_; |
| 165 }; | 151 }; |
| 166 | 152 |
| 167 TEST_F(ObserveSetOfPreferencesTest, IsObserved) { | 153 TEST_F(ObserveSetOfPreferencesTest, IsObserved) { |
| 168 scoped_ptr<PrefChangeRegistrar> pref_set(CreatePrefChangeRegistrar(NULL)); | 154 scoped_ptr<PrefChangeRegistrar> pref_set(CreatePrefChangeRegistrar()); |
| 169 EXPECT_TRUE(pref_set->IsObserved(kHomePage)); | 155 EXPECT_TRUE(pref_set->IsObserved(kHomePage)); |
| 170 EXPECT_TRUE(pref_set->IsObserved(kHomePageIsNewTabPage)); | 156 EXPECT_TRUE(pref_set->IsObserved(kHomePageIsNewTabPage)); |
| 171 EXPECT_FALSE(pref_set->IsObserved(kApplicationLocale)); | 157 EXPECT_FALSE(pref_set->IsObserved(kApplicationLocale)); |
| 172 } | 158 } |
| 173 | 159 |
| 174 TEST_F(ObserveSetOfPreferencesTest, IsManaged) { | 160 TEST_F(ObserveSetOfPreferencesTest, IsManaged) { |
| 175 scoped_ptr<PrefChangeRegistrar> pref_set(CreatePrefChangeRegistrar(NULL)); | 161 scoped_ptr<PrefChangeRegistrar> pref_set(CreatePrefChangeRegistrar()); |
| 176 EXPECT_FALSE(pref_set->IsManaged()); | 162 EXPECT_FALSE(pref_set->IsManaged()); |
| 177 pref_service_->SetManagedPref(kHomePage, | 163 pref_service_->SetManagedPref(kHomePage, |
| 178 Value::CreateStringValue("http://crbug.com")); | 164 Value::CreateStringValue("http://crbug.com")); |
| 179 EXPECT_TRUE(pref_set->IsManaged()); | 165 EXPECT_TRUE(pref_set->IsManaged()); |
| 180 pref_service_->SetManagedPref(kHomePageIsNewTabPage, | 166 pref_service_->SetManagedPref(kHomePageIsNewTabPage, |
| 181 Value::CreateBooleanValue(true)); | 167 Value::CreateBooleanValue(true)); |
| 182 EXPECT_TRUE(pref_set->IsManaged()); | 168 EXPECT_TRUE(pref_set->IsManaged()); |
| 183 pref_service_->RemoveManagedPref(kHomePage); | 169 pref_service_->RemoveManagedPref(kHomePage); |
| 184 EXPECT_TRUE(pref_set->IsManaged()); | 170 EXPECT_TRUE(pref_set->IsManaged()); |
| 185 pref_service_->RemoveManagedPref(kHomePageIsNewTabPage); | 171 pref_service_->RemoveManagedPref(kHomePageIsNewTabPage); |
| 186 EXPECT_FALSE(pref_set->IsManaged()); | 172 EXPECT_FALSE(pref_set->IsManaged()); |
| 187 } | 173 } |
| 188 | 174 |
| 175 class MockPrefChangeCallback { | |
| 176 public: | |
| 177 virtual ~MockPrefChangeCallback() {} | |
| 178 | |
| 179 MOCK_METHOD1(OnPreferenceChanged, void(const std::string&)); | |
|
Mattias Nissler (ping if slow)
2012/12/04 10:10:34
optional: You can move that declaration to the tes
Jói
2012/12/04 10:55:57
Done.
| |
| 180 }; | |
| 181 | |
| 189 TEST_F(ObserveSetOfPreferencesTest, Observe) { | 182 TEST_F(ObserveSetOfPreferencesTest, Observe) { |
| 190 using testing::_; | 183 using testing::_; |
| 191 using testing::Mock; | 184 using testing::Mock; |
| 192 | 185 |
| 193 MockPrefObserver observer; | 186 MockPrefChangeCallback observer; |
| 194 scoped_ptr<PrefChangeRegistrar> pref_set( | 187 PrefChangeRegistrar pref_set; |
| 195 CreatePrefChangeRegistrar(&observer)); | 188 PrefChangeRegistrar::NamedChangeCallback callback = base::Bind( |
| 189 &MockPrefChangeCallback::OnPreferenceChanged, | |
| 190 base::Unretained(&observer)); | |
| 191 pref_set.Init(pref_service_.get()); | |
| 192 pref_set.Add(kHomePage, callback); | |
| 193 pref_set.Add(kHomePageIsNewTabPage, callback); | |
| 196 | 194 |
| 197 EXPECT_CALL(observer, OnPreferenceChanged(pref_service_.get(), kHomePage)); | 195 EXPECT_CALL(observer, OnPreferenceChanged(kHomePage)); |
| 198 pref_service_->SetUserPref(kHomePage, | 196 pref_service_->SetUserPref(kHomePage, |
| 199 Value::CreateStringValue("http://crbug.com")); | 197 Value::CreateStringValue("http://crbug.com")); |
| 200 Mock::VerifyAndClearExpectations(&observer); | 198 Mock::VerifyAndClearExpectations(&observer); |
| 201 | 199 |
| 202 EXPECT_CALL(observer, OnPreferenceChanged(pref_service_.get(), | 200 EXPECT_CALL(observer, OnPreferenceChanged(kHomePageIsNewTabPage)); |
| 203 kHomePageIsNewTabPage)); | |
| 204 pref_service_->SetUserPref(kHomePageIsNewTabPage, | 201 pref_service_->SetUserPref(kHomePageIsNewTabPage, |
| 205 Value::CreateBooleanValue(true)); | 202 Value::CreateBooleanValue(true)); |
| 206 Mock::VerifyAndClearExpectations(&observer); | 203 Mock::VerifyAndClearExpectations(&observer); |
| 207 | 204 |
| 208 EXPECT_CALL(observer, OnPreferenceChanged(_, _)).Times(0); | 205 EXPECT_CALL(observer, OnPreferenceChanged(_)).Times(0); |
| 209 pref_service_->SetUserPref(kApplicationLocale, | 206 pref_service_->SetUserPref(kApplicationLocale, |
| 210 Value::CreateStringValue("en_US.utf8")); | 207 Value::CreateStringValue("en_US.utf8")); |
| 211 Mock::VerifyAndClearExpectations(&observer); | 208 Mock::VerifyAndClearExpectations(&observer); |
| 212 } | 209 } |
| OLD | NEW |