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

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

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

Powered by Google App Engine
This is Rietveld 408576698