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 <string> | 5 #include <string> |
6 | 6 |
7 #include "app/test/data/resource.h" | 7 #include "app/test/data/resource.h" |
8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/prefs/dummy_pref_store.h" | 10 #include "chrome/browser/prefs/dummy_pref_store.h" |
| 11 #include "chrome/browser/prefs/pref_change_registrar.h" |
11 #include "chrome/browser/prefs/pref_value_store.h" | 12 #include "chrome/browser/prefs/pref_value_store.h" |
12 #include "chrome/common/chrome_paths.h" | 13 #include "chrome/common/chrome_paths.h" |
13 #include "chrome/common/notification_observer_mock.h" | 14 #include "chrome/common/notification_observer_mock.h" |
14 #include "chrome/common/notification_service.h" | 15 #include "chrome/common/notification_service.h" |
15 #include "chrome/common/notification_type.h" | 16 #include "chrome/common/notification_type.h" |
16 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
17 #include "chrome/test/testing_pref_service.h" | 18 #include "chrome/test/testing_pref_service.h" |
18 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
20 | 21 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 #endif | 88 #endif |
88 | 89 |
89 TEST(PrefServiceTest, NoObserverFire) { | 90 TEST(PrefServiceTest, NoObserverFire) { |
90 TestingPrefService prefs; | 91 TestingPrefService prefs; |
91 | 92 |
92 const char pref_name[] = "homepage"; | 93 const char pref_name[] = "homepage"; |
93 prefs.RegisterStringPref(pref_name, ""); | 94 prefs.RegisterStringPref(pref_name, ""); |
94 | 95 |
95 const std::string new_pref_value("http://www.google.com/"); | 96 const std::string new_pref_value("http://www.google.com/"); |
96 TestPrefObserver obs(&prefs, pref_name, new_pref_value); | 97 TestPrefObserver obs(&prefs, pref_name, new_pref_value); |
97 prefs.AddPrefObserver(pref_name, &obs); | 98 |
| 99 PrefChangeRegistrar registrar; |
| 100 registrar.Init(&prefs); |
| 101 registrar.Add(pref_name, &obs); |
98 // This should fire the checks in TestPrefObserver::Observe. | 102 // This should fire the checks in TestPrefObserver::Observe. |
99 prefs.SetString(pref_name, new_pref_value); | 103 prefs.SetString(pref_name, new_pref_value); |
100 | 104 |
101 // Make sure the observer was actually fired. | 105 // Make sure the observer was actually fired. |
102 EXPECT_TRUE(obs.observer_fired()); | 106 EXPECT_TRUE(obs.observer_fired()); |
103 | 107 |
104 // Setting the pref to the same value should not set the pref value a second | 108 // Setting the pref to the same value should not set the pref value a second |
105 // time. | 109 // time. |
106 obs.Reset(new_pref_value); | 110 obs.Reset(new_pref_value); |
107 prefs.SetString(pref_name, new_pref_value); | 111 prefs.SetString(pref_name, new_pref_value); |
108 EXPECT_FALSE(obs.observer_fired()); | 112 EXPECT_FALSE(obs.observer_fired()); |
109 | 113 |
110 // Clearing the pref should cause the pref to fire. | 114 // Clearing the pref should cause the pref to fire. |
111 obs.Reset(""); | 115 obs.Reset(""); |
112 prefs.ClearPref(pref_name); | 116 prefs.ClearPref(pref_name); |
113 EXPECT_TRUE(obs.observer_fired()); | 117 EXPECT_TRUE(obs.observer_fired()); |
114 | 118 |
115 // Clearing the pref again should not cause the pref to fire. | 119 // Clearing the pref again should not cause the pref to fire. |
116 obs.Reset(""); | 120 obs.Reset(""); |
117 prefs.ClearPref(pref_name); | 121 prefs.ClearPref(pref_name); |
118 EXPECT_FALSE(obs.observer_fired()); | 122 EXPECT_FALSE(obs.observer_fired()); |
119 | |
120 // Ok, clean up. | |
121 prefs.RemovePrefObserver(pref_name, &obs); | |
122 } | 123 } |
123 | 124 |
124 TEST(PrefServiceTest, HasPrefPath) { | 125 TEST(PrefServiceTest, HasPrefPath) { |
125 TestingPrefService prefs; | 126 TestingPrefService prefs; |
126 | 127 |
127 const char path[] = "fake.path"; | 128 const char path[] = "fake.path"; |
128 | 129 |
129 // Shouldn't initially have a path. | 130 // Shouldn't initially have a path. |
130 EXPECT_FALSE(prefs.HasPrefPath(path)); | 131 EXPECT_FALSE(prefs.HasPrefPath(path)); |
131 | 132 |
132 // Register the path. This doesn't set a value, so the path still shouldn't | 133 // Register the path. This doesn't set a value, so the path still shouldn't |
133 // exist. | 134 // exist. |
134 prefs.RegisterStringPref(path, std::string()); | 135 prefs.RegisterStringPref(path, std::string()); |
135 EXPECT_FALSE(prefs.HasPrefPath(path)); | 136 EXPECT_FALSE(prefs.HasPrefPath(path)); |
136 | 137 |
137 // Set a value and make sure we have a path. | 138 // Set a value and make sure we have a path. |
138 prefs.SetString(path, "blah"); | 139 prefs.SetString(path, "blah"); |
139 EXPECT_TRUE(prefs.HasPrefPath(path)); | 140 EXPECT_TRUE(prefs.HasPrefPath(path)); |
140 } | 141 } |
141 | 142 |
142 TEST(PrefServiceTest, Observers) { | 143 TEST(PrefServiceTest, Observers) { |
143 const char pref_name[] = "homepage"; | 144 const char pref_name[] = "homepage"; |
144 | 145 |
145 TestingPrefService prefs; | 146 TestingPrefService prefs; |
146 prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com")); | 147 prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com")); |
147 prefs.RegisterStringPref(pref_name, ""); | 148 prefs.RegisterStringPref(pref_name, ""); |
148 | 149 |
149 const std::string new_pref_value("http://www.google.com/"); | 150 const std::string new_pref_value("http://www.google.com/"); |
150 TestPrefObserver obs(&prefs, pref_name, new_pref_value); | 151 TestPrefObserver obs(&prefs, pref_name, new_pref_value); |
151 prefs.AddPrefObserver(pref_name, &obs); | 152 PrefChangeRegistrar registrar; |
| 153 registrar.Init(&prefs); |
| 154 registrar.Add(pref_name, &obs); |
152 // This should fire the checks in TestPrefObserver::Observe. | 155 // This should fire the checks in TestPrefObserver::Observe. |
153 prefs.SetString(pref_name, new_pref_value); | 156 prefs.SetString(pref_name, new_pref_value); |
154 | 157 |
155 // Make sure the tests were actually run. | 158 // Make sure the tests were actually run. |
156 EXPECT_TRUE(obs.observer_fired()); | 159 EXPECT_TRUE(obs.observer_fired()); |
157 | 160 |
158 // Now try adding a second pref observer. | 161 // Now try adding a second pref observer. |
159 const std::string new_pref_value2("http://www.youtube.com/"); | 162 const std::string new_pref_value2("http://www.youtube.com/"); |
160 obs.Reset(new_pref_value2); | 163 obs.Reset(new_pref_value2); |
161 TestPrefObserver obs2(&prefs, pref_name, new_pref_value2); | 164 TestPrefObserver obs2(&prefs, pref_name, new_pref_value2); |
162 prefs.AddPrefObserver(pref_name, &obs2); | 165 registrar.Add(pref_name, &obs2); |
163 // This should fire the checks in obs and obs2. | 166 // This should fire the checks in obs and obs2. |
164 prefs.SetString(pref_name, new_pref_value2); | 167 prefs.SetString(pref_name, new_pref_value2); |
165 EXPECT_TRUE(obs.observer_fired()); | 168 EXPECT_TRUE(obs.observer_fired()); |
166 EXPECT_TRUE(obs2.observer_fired()); | 169 EXPECT_TRUE(obs2.observer_fired()); |
167 | 170 |
168 // Make sure obs2 still works after removing obs. | 171 // Make sure obs2 still works after removing obs. |
169 prefs.RemovePrefObserver(pref_name, &obs); | 172 registrar.Remove(pref_name, &obs); |
170 obs.Reset(""); | 173 obs.Reset(""); |
171 obs2.Reset(new_pref_value); | 174 obs2.Reset(new_pref_value); |
172 // This should only fire the observer in obs2. | 175 // This should only fire the observer in obs2. |
173 prefs.SetString(pref_name, new_pref_value); | 176 prefs.SetString(pref_name, new_pref_value); |
174 EXPECT_FALSE(obs.observer_fired()); | 177 EXPECT_FALSE(obs.observer_fired()); |
175 EXPECT_TRUE(obs2.observer_fired()); | 178 EXPECT_TRUE(obs2.observer_fired()); |
176 | |
177 // Ok, clean up. | |
178 prefs.RemovePrefObserver(pref_name, &obs2); | |
179 } | 179 } |
180 | 180 |
181 class PrefServiceSetValueTest : public testing::Test { | 181 class PrefServiceSetValueTest : public testing::Test { |
182 protected: | 182 protected: |
183 static const char name_[]; | 183 static const char name_[]; |
184 static const char value_[]; | 184 static const char value_[]; |
185 | 185 |
186 PrefServiceSetValueTest() | 186 PrefServiceSetValueTest() |
187 : name_string_(name_), | 187 : name_string_(name_), |
188 null_value_(Value::CreateNullValue()) {} | 188 null_value_(Value::CreateNullValue()) {} |
(...skipping 15 matching lines...) Expand all Loading... |
204 NotificationObserverMock observer_; | 204 NotificationObserverMock observer_; |
205 }; | 205 }; |
206 | 206 |
207 const char PrefServiceSetValueTest::name_[] = "name"; | 207 const char PrefServiceSetValueTest::name_[] = "name"; |
208 const char PrefServiceSetValueTest::value_[] = "value"; | 208 const char PrefServiceSetValueTest::value_[] = "value"; |
209 | 209 |
210 TEST_F(PrefServiceSetValueTest, SetStringValue) { | 210 TEST_F(PrefServiceSetValueTest, SetStringValue) { |
211 const char default_string[] = "default"; | 211 const char default_string[] = "default"; |
212 scoped_ptr<Value> default_value(Value::CreateStringValue(default_string)); | 212 scoped_ptr<Value> default_value(Value::CreateStringValue(default_string)); |
213 prefs_.RegisterStringPref(name_, default_string); | 213 prefs_.RegisterStringPref(name_, default_string); |
214 prefs_.AddPrefObserver(name_, &observer_); | 214 |
| 215 PrefChangeRegistrar registrar; |
| 216 registrar.Init(&prefs_); |
| 217 registrar.Add(name_, &observer_); |
| 218 |
215 // Changing the controlling store from default to user triggers notification. | 219 // Changing the controlling store from default to user triggers notification. |
216 SetExpectPrefChanged(); | 220 SetExpectPrefChanged(); |
217 prefs_.Set(name_, *default_value); | 221 prefs_.Set(name_, *default_value); |
218 Mock::VerifyAndClearExpectations(&observer_); | 222 Mock::VerifyAndClearExpectations(&observer_); |
219 | 223 |
220 SetExpectNoNotification(); | 224 SetExpectNoNotification(); |
221 prefs_.Set(name_, *default_value); | 225 prefs_.Set(name_, *default_value); |
222 Mock::VerifyAndClearExpectations(&observer_); | 226 Mock::VerifyAndClearExpectations(&observer_); |
223 | 227 |
224 scoped_ptr<Value> new_value(Value::CreateStringValue(value_)); | 228 scoped_ptr<Value> new_value(Value::CreateStringValue(value_)); |
225 SetExpectPrefChanged(); | 229 SetExpectPrefChanged(); |
226 prefs_.Set(name_, *new_value); | 230 prefs_.Set(name_, *new_value); |
227 EXPECT_EQ(value_, prefs_.GetString(name_)); | 231 EXPECT_EQ(value_, prefs_.GetString(name_)); |
228 | |
229 prefs_.RemovePrefObserver(name_, &observer_); | |
230 } | 232 } |
231 | 233 |
232 TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { | 234 TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { |
233 prefs_.RegisterDictionaryPref(name_); | 235 prefs_.RegisterDictionaryPref(name_); |
234 prefs_.AddPrefObserver(name_, &observer_); | 236 PrefChangeRegistrar registrar; |
| 237 registrar.Init(&prefs_); |
| 238 registrar.Add(name_, &observer_); |
235 | 239 |
236 // Dictionary values are special: setting one to NULL is the same as clearing | 240 // Dictionary values are special: setting one to NULL is the same as clearing |
237 // the user value, allowing the NULL default to take (or keep) control. | 241 // the user value, allowing the NULL default to take (or keep) control. |
238 SetExpectNoNotification(); | 242 SetExpectNoNotification(); |
239 prefs_.Set(name_, *null_value_); | 243 prefs_.Set(name_, *null_value_); |
240 Mock::VerifyAndClearExpectations(&observer_); | 244 Mock::VerifyAndClearExpectations(&observer_); |
241 | 245 |
242 DictionaryValue new_value; | 246 DictionaryValue new_value; |
243 new_value.SetString(name_, value_); | 247 new_value.SetString(name_, value_); |
244 SetExpectPrefChanged(); | 248 SetExpectPrefChanged(); |
245 prefs_.Set(name_, new_value); | 249 prefs_.Set(name_, new_value); |
246 Mock::VerifyAndClearExpectations(&observer_); | 250 Mock::VerifyAndClearExpectations(&observer_); |
247 DictionaryValue* dict = prefs_.GetMutableDictionary(name_); | 251 DictionaryValue* dict = prefs_.GetMutableDictionary(name_); |
248 EXPECT_EQ(1U, dict->size()); | 252 EXPECT_EQ(1U, dict->size()); |
249 std::string out_value; | 253 std::string out_value; |
250 dict->GetString(name_, &out_value); | 254 dict->GetString(name_, &out_value); |
251 EXPECT_EQ(value_, out_value); | 255 EXPECT_EQ(value_, out_value); |
252 | 256 |
253 SetExpectNoNotification(); | 257 SetExpectNoNotification(); |
254 prefs_.Set(name_, new_value); | 258 prefs_.Set(name_, new_value); |
255 Mock::VerifyAndClearExpectations(&observer_); | 259 Mock::VerifyAndClearExpectations(&observer_); |
256 | 260 |
257 SetExpectPrefChanged(); | 261 SetExpectPrefChanged(); |
258 prefs_.Set(name_, *null_value_); | 262 prefs_.Set(name_, *null_value_); |
259 Mock::VerifyAndClearExpectations(&observer_); | 263 Mock::VerifyAndClearExpectations(&observer_); |
260 dict = prefs_.GetMutableDictionary(name_); | 264 dict = prefs_.GetMutableDictionary(name_); |
261 EXPECT_EQ(0U, dict->size()); | 265 EXPECT_EQ(0U, dict->size()); |
262 | |
263 prefs_.RemovePrefObserver(name_, &observer_); | |
264 } | 266 } |
265 | 267 |
266 TEST_F(PrefServiceSetValueTest, SetListValue) { | 268 TEST_F(PrefServiceSetValueTest, SetListValue) { |
267 prefs_.RegisterListPref(name_); | 269 prefs_.RegisterListPref(name_); |
268 prefs_.AddPrefObserver(name_, &observer_); | 270 PrefChangeRegistrar registrar; |
| 271 registrar.Init(&prefs_); |
| 272 registrar.Add(name_, &observer_); |
269 | 273 |
270 // List values are special: setting one to NULL is the same as clearing the | 274 // List values are special: setting one to NULL is the same as clearing the |
271 // user value, allowing the NULL default to take (or keep) control. | 275 // user value, allowing the NULL default to take (or keep) control. |
272 SetExpectNoNotification(); | 276 SetExpectNoNotification(); |
273 prefs_.Set(name_, *null_value_); | 277 prefs_.Set(name_, *null_value_); |
274 Mock::VerifyAndClearExpectations(&observer_); | 278 Mock::VerifyAndClearExpectations(&observer_); |
275 | 279 |
276 ListValue new_value; | 280 ListValue new_value; |
277 new_value.Append(Value::CreateStringValue(value_)); | 281 new_value.Append(Value::CreateStringValue(value_)); |
278 SetExpectPrefChanged(); | 282 SetExpectPrefChanged(); |
279 prefs_.Set(name_, new_value); | 283 prefs_.Set(name_, new_value); |
280 Mock::VerifyAndClearExpectations(&observer_); | 284 Mock::VerifyAndClearExpectations(&observer_); |
281 ListValue* list = prefs_.GetMutableList(name_); | 285 ListValue* list = prefs_.GetMutableList(name_); |
282 ASSERT_EQ(1U, list->GetSize()); | 286 ASSERT_EQ(1U, list->GetSize()); |
283 std::string out_value; | 287 std::string out_value; |
284 list->GetString(0, &out_value); | 288 list->GetString(0, &out_value); |
285 EXPECT_EQ(value_, out_value); | 289 EXPECT_EQ(value_, out_value); |
286 | 290 |
287 SetExpectNoNotification(); | 291 SetExpectNoNotification(); |
288 prefs_.Set(name_, new_value); | 292 prefs_.Set(name_, new_value); |
289 Mock::VerifyAndClearExpectations(&observer_); | 293 Mock::VerifyAndClearExpectations(&observer_); |
290 | 294 |
291 SetExpectPrefChanged(); | 295 SetExpectPrefChanged(); |
292 prefs_.Set(name_, *null_value_); | 296 prefs_.Set(name_, *null_value_); |
293 Mock::VerifyAndClearExpectations(&observer_); | 297 Mock::VerifyAndClearExpectations(&observer_); |
294 list = prefs_.GetMutableList(name_); | 298 list = prefs_.GetMutableList(name_); |
295 EXPECT_EQ(0U, list->GetSize()); | 299 EXPECT_EQ(0U, list->GetSize()); |
296 | |
297 prefs_.RemovePrefObserver(name_, &observer_); | |
298 } | 300 } |
OLD | NEW |