Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Side by Side Diff: base/prefs/public/pref_change_registrar_unittest.cc

Issue 11316163: Remove the last usages of PrefObserver outside of Prefs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Win and CrOS build. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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")), &registrar)); 64 AddPrefObserver(Eq(std::string("test.pref.1")), &registrar));
70 EXPECT_CALL(*service(), 65 EXPECT_CALL(*service(),
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 EXPECT_CALL(*service(), 116 EXPECT_CALL(*service(),
122 RemovePrefObserver(Eq(std::string("test.pref.2")), &registrar)); 117 RemovePrefObserver(Eq(std::string("test.pref.2")), &registrar));
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698