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 |