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

Side by Side Diff: services/preferences/public/cpp/tests/pref_observer_store_unittest.cc

Issue 2474653003: PreferencesManager (Closed)
Patch Set: DLOG error states Created 4 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "services/preferences/public/cpp/pref_observer_store.h" 5 #include "services/preferences/public/cpp/pref_observer_store.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 15 matching lines...) Expand all
26 binding_(this, std::move(request)) {} 26 binding_(this, std::move(request)) {}
27 ~TestPreferenceManager() override {} 27 ~TestPreferenceManager() override {}
28 28
29 bool add_observer_called() { return add_observer_called_; } 29 bool add_observer_called() { return add_observer_called_; }
30 const std::set<std::string>& last_preference_set() { 30 const std::set<std::string>& last_preference_set() {
31 return last_preference_set_; 31 return last_preference_set_;
32 } 32 }
33 bool set_preferences_called() { return set_preferences_called_; } 33 bool set_preferences_called() { return set_preferences_called_; }
34 34
35 // prefs::mojom::TestPreferenceManager: 35 // prefs::mojom::TestPreferenceManager:
36 void AddObserver(const std::vector<std::string>& preferences, 36 void AddObserver(prefs::mojom::PreferencesObserverPtr client) override;
37 prefs::mojom::PreferencesObserverPtr client) override;
38 void SetPreferences(const base::DictionaryValue& preferences) override; 37 void SetPreferences(const base::DictionaryValue& preferences) override;
38 void Subscribe(const std::vector<std::string>& preferences) override;
39 39
40 private: 40 private:
41 bool add_observer_called_; 41 bool add_observer_called_;
42 std::set<std::string> last_preference_set_; 42 std::set<std::string> last_preference_set_;
43 bool set_preferences_called_; 43 bool set_preferences_called_;
44 mojo::Binding<PreferencesManager> binding_; 44 mojo::Binding<PreferencesManager> binding_;
45 45
46 DISALLOW_COPY_AND_ASSIGN(TestPreferenceManager); 46 DISALLOW_COPY_AND_ASSIGN(TestPreferenceManager);
47 }; 47 };
48 48
49 void TestPreferenceManager::AddObserver( 49 void TestPreferenceManager::AddObserver(
50 const std::vector<std::string>& preferences,
51 prefs::mojom::PreferencesObserverPtr client) { 50 prefs::mojom::PreferencesObserverPtr client) {
52 add_observer_called_ = true; 51 add_observer_called_ = true;
53 last_preference_set_.clear();
54 last_preference_set_.insert(preferences.begin(), preferences.end());
55 } 52 }
56 53
57 void TestPreferenceManager::SetPreferences( 54 void TestPreferenceManager::SetPreferences(
58 const base::DictionaryValue& preferences) { 55 const base::DictionaryValue& preferences) {
59 set_preferences_called_ = true; 56 set_preferences_called_ = true;
60 } 57 }
61 58
59 void TestPreferenceManager::Subscribe(
60 const std::vector<std::string>& preferences) {
61 last_preference_set_.clear();
62 last_preference_set_.insert(preferences.begin(), preferences.end());
63 }
64
62 } // namespace 65 } // namespace
63 66
67 namespace preferences {
68
64 class PrefObserverStoreTest : public testing::Test { 69 class PrefObserverStoreTest : public testing::Test {
65 public: 70 public:
66 PrefObserverStoreTest() {} 71 PrefObserverStoreTest() {}
67 ~PrefObserverStoreTest() override {} 72 ~PrefObserverStoreTest() override {}
68 73
69 TestPreferenceManager* manager() { return manager_.get(); } 74 TestPreferenceManager* manager() { return manager_.get(); }
70 PrefStoreObserverMock* observer() { return &observer_; } 75 PrefStoreObserverMock* observer() { return &observer_; }
71 PrefObserverStore* store() { return store_.get(); } 76 PrefObserverStore* store() { return store_.get(); }
72 77
73 bool Initialized() { return store_->initialized_; } 78 bool Initialized() { return store_->initialized_; }
(...skipping 25 matching lines...) Expand all
99 void PrefObserverStoreTest::TearDown() { 104 void PrefObserverStoreTest::TearDown() {
100 store_->RemoveObserver(&observer_); 105 store_->RemoveObserver(&observer_);
101 } 106 }
102 107
103 // Tests that observers are notified upon the completion of initialization, and 108 // Tests that observers are notified upon the completion of initialization, and
104 // that values become available. 109 // that values become available.
105 TEST_F(PrefObserverStoreTest, Initialization) { 110 TEST_F(PrefObserverStoreTest, Initialization) {
106 std::set<std::string> keys; 111 std::set<std::string> keys;
107 const std::string key("hey"); 112 const std::string key("hey");
108 keys.insert(key); 113 keys.insert(key);
109 store()->Init(keys); 114 store()->Subscribe(keys);
110 115
111 EXPECT_FALSE(Initialized()); 116 EXPECT_FALSE(Initialized());
112 EXPECT_FALSE(observer()->initialized); 117 EXPECT_FALSE(observer()->initialized);
113 118
114 const int kValue = 42; 119 const int kValue = 42;
115 base::FundamentalValue pref(kValue); 120 base::FundamentalValue pref(kValue);
116 base::DictionaryValue prefs; 121 base::DictionaryValue prefs;
117 prefs.Set(key, pref.CreateDeepCopy()); 122 prefs.Set(key, pref.CreateDeepCopy());
118 123
119 // PreferenceManager notifies of PreferencesChanged, completing 124 // PreferenceManager notifies of PreferencesChanged, completing
(...skipping 12 matching lines...) Expand all
132 EXPECT_EQ(kValue, actual_value); 137 EXPECT_EQ(kValue, actual_value);
133 EXPECT_FALSE(manager()->set_preferences_called()); 138 EXPECT_FALSE(manager()->set_preferences_called());
134 } 139 }
135 140
136 // Tests that values set silently are also set on the preference manager, but 141 // Tests that values set silently are also set on the preference manager, but
137 // that no observers are notified. 142 // that no observers are notified.
138 TEST_F(PrefObserverStoreTest, SetValueSilently) { 143 TEST_F(PrefObserverStoreTest, SetValueSilently) {
139 std::set<std::string> keys; 144 std::set<std::string> keys;
140 const std::string key("hey"); 145 const std::string key("hey");
141 keys.insert(key); 146 keys.insert(key);
142 store()->Init(keys); 147 store()->Subscribe(keys);
143 148
144 const int kValue = 42; 149 const int kValue = 42;
145 base::FundamentalValue pref(kValue); 150 base::FundamentalValue pref(kValue);
146 store()->SetValueSilently(key, pref.CreateDeepCopy(), 0); 151 store()->SetValueSilently(key, pref.CreateDeepCopy(), 0);
147 base::RunLoop().RunUntilIdle(); 152 base::RunLoop().RunUntilIdle();
148 EXPECT_TRUE(manager()->set_preferences_called()); 153 EXPECT_TRUE(manager()->set_preferences_called());
149 EXPECT_TRUE(observer()->changed_keys.empty()); 154 EXPECT_TRUE(observer()->changed_keys.empty());
150 } 155 }
151 156
152 // Test that reporting values changed notifies observers, and the preference 157 // Test that reporting values changed notifies observers, and the preference
153 // manager. 158 // manager.
154 TEST_F(PrefObserverStoreTest, ReportValueChanged) { 159 TEST_F(PrefObserverStoreTest, ReportValueChanged) {
155 std::set<std::string> keys; 160 std::set<std::string> keys;
156 const std::string key("hey"); 161 const std::string key("hey");
157 keys.insert(key); 162 keys.insert(key);
158 store()->Init(keys); 163 store()->Subscribe(keys);
159 164
160 const int kValue = 42; 165 const int kValue = 42;
161 base::FundamentalValue pref(kValue); 166 base::FundamentalValue pref(kValue);
162 base::DictionaryValue prefs; 167 base::DictionaryValue prefs;
163 prefs.Set(key, pref.CreateDeepCopy()); 168 prefs.Set(key, pref.CreateDeepCopy());
164 OnPreferencesChanged(prefs); 169 OnPreferencesChanged(prefs);
165 observer()->changed_keys.clear(); 170 observer()->changed_keys.clear();
166 171
167 store()->ReportValueChanged(key, 0); 172 store()->ReportValueChanged(key, 0);
168 base::RunLoop().RunUntilIdle(); 173 base::RunLoop().RunUntilIdle();
169 EXPECT_TRUE(manager()->set_preferences_called()); 174 EXPECT_TRUE(manager()->set_preferences_called());
170 observer()->VerifyAndResetChangedKey(key); 175 observer()->VerifyAndResetChangedKey(key);
171 } 176 }
172 177
173 // Test that when initialized with multiple keys, that observers receive a 178 // Test that when initialized with multiple keys, that observers receive a
174 // notification for each key. 179 // notification for each key.
175 TEST_F(PrefObserverStoreTest, MultipleKeyInitialization) { 180 TEST_F(PrefObserverStoreTest, MultipleKeyInitialization) {
176 std::set<std::string> keys; 181 std::set<std::string> keys;
177 const std::string key1("hey"); 182 const std::string key1("hey");
178 const std::string key2("listen"); 183 const std::string key2("listen");
179 keys.insert(key1); 184 keys.insert(key1);
180 keys.insert(key2); 185 keys.insert(key2);
181 store()->Init(keys); 186 store()->Subscribe(keys);
182 187
183 EXPECT_FALSE(Initialized()); 188 EXPECT_FALSE(Initialized());
184 EXPECT_FALSE(observer()->initialized); 189 EXPECT_FALSE(observer()->initialized);
185 190
186 const int kValue = 42; 191 const int kValue = 42;
187 base::FundamentalValue pref1(kValue); 192 base::FundamentalValue pref1(kValue);
188 const std::string kStringValue("look"); 193 const std::string kStringValue("look");
189 base::StringValue pref2(kStringValue); 194 base::StringValue pref2(kStringValue);
190 195
191 base::DictionaryValue prefs; 196 base::DictionaryValue prefs;
(...skipping 12 matching lines...) Expand all
204 std::find(observer()->changed_keys.begin(), 209 std::find(observer()->changed_keys.begin(),
205 observer()->changed_keys.end(), key2)); 210 observer()->changed_keys.end(), key2));
206 } 211 }
207 212
208 // Tests that if OnPreferencesChanged is received with invalid keys, that they 213 // Tests that if OnPreferencesChanged is received with invalid keys, that they
209 // are ignored. 214 // are ignored.
210 TEST_F(PrefObserverStoreTest, InvalidInitialization) { 215 TEST_F(PrefObserverStoreTest, InvalidInitialization) {
211 std::set<std::string> keys; 216 std::set<std::string> keys;
212 const std::string key("hey"); 217 const std::string key("hey");
213 keys.insert(key); 218 keys.insert(key);
214 store()->Init(keys); 219 store()->Subscribe(keys);
215 220
216 const std::string kInvalidKey("look"); 221 const std::string kInvalidKey("look");
217 const int kValue = 42; 222 const int kValue = 42;
218 base::FundamentalValue pref(kValue); 223 base::FundamentalValue pref(kValue);
219 base::DictionaryValue prefs; 224 base::DictionaryValue prefs;
220 prefs.Set(kInvalidKey, pref.CreateDeepCopy()); 225 prefs.Set(kInvalidKey, pref.CreateDeepCopy());
221 226
222 OnPreferencesChanged(prefs); 227 OnPreferencesChanged(prefs);
223 EXPECT_TRUE(observer()->changed_keys.empty()); 228 EXPECT_TRUE(observer()->changed_keys.empty());
224 } 229 }
225 230
226 // Tests that when tracking preferences which nest other DictionaryValues, that 231 // Tests that when tracking preferences which nest other DictionaryValues, that
227 // modifications to the nested values properly notify the observer. 232 // modifications to the nested values properly notify the observer.
228 TEST_F(PrefObserverStoreTest, WriteToNestedPrefs) { 233 TEST_F(PrefObserverStoreTest, WriteToNestedPrefs) {
229 std::set<std::string> keys; 234 std::set<std::string> keys;
230 const std::string key1("hey"); 235 const std::string key1("hey");
231 const std::string key2("listen"); 236 const std::string key2("listen");
232 keys.insert(key1); 237 keys.insert(key1);
233 keys.insert(key2); 238 keys.insert(key2);
234 store()->Init(keys); 239 store()->Subscribe(keys);
235 240
236 EXPECT_FALSE(Initialized()); 241 EXPECT_FALSE(Initialized());
237 EXPECT_FALSE(observer()->initialized); 242 EXPECT_FALSE(observer()->initialized);
238 243
239 const std::string sub_key1("look"); 244 const std::string sub_key1("look");
240 const int kValue1 = 42; 245 const int kValue1 = 42;
241 base::FundamentalValue pref1(kValue1); 246 base::FundamentalValue pref1(kValue1);
242 base::DictionaryValue sub_dictionary1; 247 base::DictionaryValue sub_dictionary1;
243 sub_dictionary1.Set(sub_key1, pref1.CreateDeepCopy()); 248 sub_dictionary1.Set(sub_key1, pref1.CreateDeepCopy());
244 249
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 } 290 }
286 291
287 // Tests that when tracking preferences that nest other DictionaryValues, that 292 // Tests that when tracking preferences that nest other DictionaryValues, that
288 // changes to the tracked keys properly notify the manager and observer. 293 // changes to the tracked keys properly notify the manager and observer.
289 TEST_F(PrefObserverStoreTest, UpdateOuterNestedPrefs) { 294 TEST_F(PrefObserverStoreTest, UpdateOuterNestedPrefs) {
290 std::set<std::string> keys; 295 std::set<std::string> keys;
291 const std::string key1("hey"); 296 const std::string key1("hey");
292 const std::string key2("listen"); 297 const std::string key2("listen");
293 keys.insert(key1); 298 keys.insert(key1);
294 keys.insert(key2); 299 keys.insert(key2);
295 store()->Init(keys); 300 store()->Subscribe(keys);
296 301
297 EXPECT_FALSE(Initialized()); 302 EXPECT_FALSE(Initialized());
298 EXPECT_FALSE(observer()->initialized); 303 EXPECT_FALSE(observer()->initialized);
299 304
300 const std::string sub_key1("look"); 305 const std::string sub_key1("look");
301 const int kValue1 = 42; 306 const int kValue1 = 42;
302 base::FundamentalValue pref1(kValue1); 307 base::FundamentalValue pref1(kValue1);
303 base::DictionaryValue sub_dictionary1; 308 base::DictionaryValue sub_dictionary1;
304 sub_dictionary1.Set(sub_key1, pref1.CreateDeepCopy()); 309 sub_dictionary1.Set(sub_key1, pref1.CreateDeepCopy());
305 310
(...skipping 20 matching lines...) Expand all
326 observer()->changed_keys.end(), key2)); 331 observer()->changed_keys.end(), key2));
327 332
328 observer()->changed_keys.clear(); 333 observer()->changed_keys.clear();
329 const int kValue3 = 9001; 334 const int kValue3 = 9001;
330 base::FundamentalValue pref3(kValue3); 335 base::FundamentalValue pref3(kValue3);
331 store()->SetValue(key1, pref3.CreateDeepCopy(), 0); 336 store()->SetValue(key1, pref3.CreateDeepCopy(), 0);
332 base::RunLoop().RunUntilIdle(); 337 base::RunLoop().RunUntilIdle();
333 EXPECT_EQ(1u, observer()->changed_keys.size()); 338 EXPECT_EQ(1u, observer()->changed_keys.size());
334 EXPECT_TRUE(manager()->set_preferences_called()); 339 EXPECT_TRUE(manager()->set_preferences_called());
335 } 340 }
341
342 // Tests that a PrefObserverStore can subscribe multiple times to different
343 // keys.
344 TEST_F(PrefObserverStoreTest, MultipleSubscriptions) {
345 std::set<std::string> keys1;
346 const std::string key1("hey");
347 keys1.insert(key1);
348 store()->Subscribe(keys1);
349 base::RunLoop().RunUntilIdle();
350 EXPECT_NE(manager()->last_preference_set().end(),
351 manager()->last_preference_set().find(key1));
352
353 std::set<std::string> keys2;
354 const std::string key2("listen");
355 keys2.insert(key2);
356 store()->Subscribe(keys2);
357 base::RunLoop().RunUntilIdle();
358 EXPECT_NE(manager()->last_preference_set().end(),
359 manager()->last_preference_set().find(key2));
360 }
361
362 // Tests that multiple PrefStore::Observers can be added to a PrefObserverStore
363 // and that they are each notified of changes.
364 TEST_F(PrefObserverStoreTest, MultipleObservers) {
365 PrefStoreObserverMock observer2;
366 store()->AddObserver(&observer2);
367
368 std::set<std::string> keys;
369 const std::string key("hey");
370 keys.insert(key);
371 store()->Subscribe(keys);
372
373 const int kValue = 42;
374 base::FundamentalValue pref(kValue);
375 base::DictionaryValue prefs;
376 prefs.Set(key, pref.CreateDeepCopy());
377
378 // PreferenceManager notifies of PreferencesChanged, completing
379 // initialization.
380 OnPreferencesChanged(prefs);
381 EXPECT_TRUE(observer()->initialized);
382 EXPECT_TRUE(observer2.initialized);
383 EXPECT_TRUE(observer()->initialization_success);
384 EXPECT_TRUE(observer2.initialization_success);
385 observer()->VerifyAndResetChangedKey(key);
386 observer2.VerifyAndResetChangedKey(key);
387 }
388
389 } // namespace preferences
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698