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

Unified Diff: services/preferences/public/cpp/tests/pref_observer_store_unittest.cc

Issue 2474653003: PreferencesManager (Closed)
Patch Set: Update PreferencesManager to account for base::Value API change 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 side-by-side diff with in-line comments
Download patch
Index: services/preferences/public/cpp/tests/pref_observer_store_unittest.cc
diff --git a/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc b/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc
index 26f948ab5205751dacb37b3fceeda99e6e7b3323..9dbd0a526bc66eecded128a69b8a755f4ed87234 100644
--- a/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc
+++ b/services/preferences/public/cpp/tests/pref_observer_store_unittest.cc
@@ -33,10 +33,10 @@ class TestPreferenceManager : public prefs::mojom::PreferencesManager {
bool set_preferences_called() { return set_preferences_called_; }
// prefs::mojom::TestPreferenceManager:
- void AddObserver(const std::vector<std::string>& preferences,
- prefs::mojom::PreferencesObserverPtr client) override;
+ void AddObserver(prefs::mojom::PreferencesObserverPtr client) override;
void SetPreferences(
std::unique_ptr<base::DictionaryValue> preferences) override;
+ void Subscribe(const std::vector<std::string>& preferences) override;
private:
bool add_observer_called_;
@@ -48,11 +48,8 @@ class TestPreferenceManager : public prefs::mojom::PreferencesManager {
};
void TestPreferenceManager::AddObserver(
- const std::vector<std::string>& preferences,
prefs::mojom::PreferencesObserverPtr client) {
add_observer_called_ = true;
- last_preference_set_.clear();
- last_preference_set_.insert(preferences.begin(), preferences.end());
}
void TestPreferenceManager::SetPreferences(
@@ -60,8 +57,16 @@ void TestPreferenceManager::SetPreferences(
set_preferences_called_ = true;
}
+void TestPreferenceManager::Subscribe(
+ const std::vector<std::string>& preferences) {
+ last_preference_set_.clear();
+ last_preference_set_.insert(preferences.begin(), preferences.end());
+}
+
} // namespace
+namespace preferences {
+
class PrefObserverStoreTest : public testing::Test {
public:
PrefObserverStoreTest() {}
@@ -107,7 +112,7 @@ TEST_F(PrefObserverStoreTest, Initialization) {
std::set<std::string> keys;
const std::string key("hey");
keys.insert(key);
- store()->Init(keys);
+ store()->Subscribe(keys);
EXPECT_FALSE(Initialized());
EXPECT_FALSE(observer()->initialized);
@@ -140,7 +145,7 @@ TEST_F(PrefObserverStoreTest, SetValueSilently) {
std::set<std::string> keys;
const std::string key("hey");
keys.insert(key);
- store()->Init(keys);
+ store()->Subscribe(keys);
const int kValue = 42;
base::FundamentalValue pref(kValue);
@@ -156,7 +161,7 @@ TEST_F(PrefObserverStoreTest, ReportValueChanged) {
std::set<std::string> keys;
const std::string key("hey");
keys.insert(key);
- store()->Init(keys);
+ store()->Subscribe(keys);
const int kValue = 42;
base::FundamentalValue pref(kValue);
@@ -179,7 +184,7 @@ TEST_F(PrefObserverStoreTest, MultipleKeyInitialization) {
const std::string key2("listen");
keys.insert(key1);
keys.insert(key2);
- store()->Init(keys);
+ store()->Subscribe(keys);
EXPECT_FALSE(Initialized());
EXPECT_FALSE(observer()->initialized);
@@ -212,7 +217,7 @@ TEST_F(PrefObserverStoreTest, InvalidInitialization) {
std::set<std::string> keys;
const std::string key("hey");
keys.insert(key);
- store()->Init(keys);
+ store()->Subscribe(keys);
const std::string kInvalidKey("look");
const int kValue = 42;
@@ -232,7 +237,7 @@ TEST_F(PrefObserverStoreTest, WriteToNestedPrefs) {
const std::string key2("listen");
keys.insert(key1);
keys.insert(key2);
- store()->Init(keys);
+ store()->Subscribe(keys);
EXPECT_FALSE(Initialized());
EXPECT_FALSE(observer()->initialized);
@@ -293,7 +298,7 @@ TEST_F(PrefObserverStoreTest, UpdateOuterNestedPrefs) {
const std::string key2("listen");
keys.insert(key1);
keys.insert(key2);
- store()->Init(keys);
+ store()->Subscribe(keys);
EXPECT_FALSE(Initialized());
EXPECT_FALSE(observer()->initialized);
@@ -334,3 +339,54 @@ TEST_F(PrefObserverStoreTest, UpdateOuterNestedPrefs) {
EXPECT_EQ(1u, observer()->changed_keys.size());
EXPECT_TRUE(manager()->set_preferences_called());
}
+
+// Tests that a PrefObserverStore can subscribe multiple times to different
+// keys.
+TEST_F(PrefObserverStoreTest, MultipleSubscriptions) {
+ std::set<std::string> keys1;
+ const std::string key1("hey");
+ keys1.insert(key1);
+ store()->Subscribe(keys1);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_NE(manager()->last_preference_set().end(),
+ manager()->last_preference_set().find(key1));
+
+ std::set<std::string> keys2;
+ const std::string key2("listen");
+ keys2.insert(key2);
+ store()->Subscribe(keys2);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_NE(manager()->last_preference_set().end(),
+ manager()->last_preference_set().find(key2));
+}
+
+// Tests that multiple PrefStore::Observers can be added to a PrefObserverStore
+// and that they are each notified of changes.
+TEST_F(PrefObserverStoreTest, MultipleObservers) {
+ PrefStoreObserverMock observer2;
+ store()->AddObserver(&observer2);
+
+ std::set<std::string> keys;
+ const std::string key("hey");
+ keys.insert(key);
+ store()->Subscribe(keys);
+
+ const int kValue = 42;
+ base::FundamentalValue pref(kValue);
+ base::DictionaryValue prefs;
+ prefs.Set(key, pref.CreateDeepCopy());
+
+ // PreferenceManager notifies of PreferencesChanged, completing
+ // initialization.
+ OnPreferencesChanged(prefs);
+ EXPECT_TRUE(observer()->initialized);
+ EXPECT_TRUE(observer2.initialized);
+ EXPECT_TRUE(observer()->initialization_success);
+ EXPECT_TRUE(observer2.initialization_success);
+ observer()->VerifyAndResetChangedKey(key);
+ observer2.VerifyAndResetChangedKey(key);
+
+ store()->RemoveObserver(&observer2);
+}
+
+} // namespace preferences
« no previous file with comments | « services/preferences/public/cpp/pref_observer_store.cc ('k') | services/preferences/public/interfaces/preferences.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698