Index: chrome/browser/prefs/pref_service_unittest.cc |
diff --git a/chrome/browser/prefs/pref_service_unittest.cc b/chrome/browser/prefs/pref_service_unittest.cc |
index 7fc46082e4aba560d96da5e0b8c5a1eeb523b9ef..6575bdf3907a611ed4c5b9bbc8afd6c3a3d2b81a 100644 |
--- a/chrome/browser/prefs/pref_service_unittest.cc |
+++ b/chrome/browser/prefs/pref_service_unittest.cc |
@@ -12,14 +12,12 @@ |
#include "chrome/browser/policy/mock_configuration_policy_provider.h" |
#include "chrome/browser/prefs/browser_prefs.h" |
#include "chrome/browser/prefs/command_line_pref_store.h" |
-#include "chrome/browser/prefs/dummy_pref_store.h" |
+#include "chrome/browser/prefs/testing_pref_store.h" |
#include "chrome/browser/prefs/pref_change_registrar.h" |
+#include "chrome/browser/prefs/pref_observer_mock.h" |
#include "chrome/browser/prefs/pref_value_store.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/notification_observer_mock.h" |
-#include "chrome/common/notification_service.h" |
-#include "chrome/common/notification_type.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/test/testing_pref_service.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -27,49 +25,6 @@ |
using testing::_; |
using testing::Mock; |
-using testing::Pointee; |
-using testing::Property; |
- |
-namespace { |
- |
-class TestPrefObserver : public NotificationObserver { |
- public: |
- TestPrefObserver(const PrefService* prefs, |
- const std::string& pref_name, |
- const std::string& new_pref_value) |
- : observer_fired_(false), |
- prefs_(prefs), |
- pref_name_(pref_name), |
- new_pref_value_(new_pref_value) {} |
- virtual ~TestPrefObserver() {} |
- |
- virtual void Observe(NotificationType type, |
- const NotificationSource& source, |
- const NotificationDetails& details) { |
- EXPECT_EQ(type.value, NotificationType::PREF_CHANGED); |
- const PrefService* prefs_in = Source<PrefService>(source).ptr(); |
- EXPECT_EQ(prefs_in, prefs_); |
- const std::string* pref_name_in = Details<std::string>(details).ptr(); |
- EXPECT_EQ(*pref_name_in, pref_name_); |
- EXPECT_EQ(new_pref_value_, prefs_in->GetString("homepage")); |
- observer_fired_ = true; |
- } |
- |
- bool observer_fired() { return observer_fired_; } |
- |
- void Reset(const std::string& new_pref_value) { |
- observer_fired_ = false; |
- new_pref_value_ = new_pref_value; |
- } |
- |
- private: |
- bool observer_fired_; |
- const PrefService* prefs_; |
- const std::string pref_name_; |
- std::string new_pref_value_; |
-}; |
- |
-} // namespace |
// TODO(port): port this test to POSIX. |
#if defined(OS_WIN) |
@@ -102,33 +57,34 @@ TEST(PrefServiceTest, NoObserverFire) { |
const char pref_name[] = "homepage"; |
prefs.RegisterStringPref(pref_name, std::string()); |
- const std::string new_pref_value("http://www.google.com/"); |
- TestPrefObserver obs(&prefs, pref_name, new_pref_value); |
- |
+ const char new_pref_value[] = "http://www.google.com/"; |
+ PrefObserverMock obs; |
PrefChangeRegistrar registrar; |
registrar.Init(&prefs); |
registrar.Add(pref_name, &obs); |
- // This should fire the checks in TestPrefObserver::Observe. |
- prefs.SetString(pref_name, new_pref_value); |
- // Make sure the observer was actually fired. |
- EXPECT_TRUE(obs.observer_fired()); |
+ // This should fire the checks in PrefObserverMock::Observe. |
+ const StringValue expected_value(new_pref_value); |
+ obs.Expect(&prefs, pref_name, &expected_value); |
+ prefs.SetString(pref_name, new_pref_value); |
+ Mock::VerifyAndClearExpectations(&obs); |
// Setting the pref to the same value should not set the pref value a second |
// time. |
- obs.Reset(new_pref_value); |
+ EXPECT_CALL(obs, Observe(_, _, _)).Times(0); |
prefs.SetString(pref_name, new_pref_value); |
- EXPECT_FALSE(obs.observer_fired()); |
+ Mock::VerifyAndClearExpectations(&obs); |
// Clearing the pref should cause the pref to fire. |
- obs.Reset(std::string()); |
+ const StringValue expected_default_value(""); |
+ obs.Expect(&prefs, pref_name, &expected_default_value); |
prefs.ClearPref(pref_name); |
- EXPECT_TRUE(obs.observer_fired()); |
+ Mock::VerifyAndClearExpectations(&obs); |
// Clearing the pref again should not cause the pref to fire. |
- obs.Reset(std::string()); |
+ EXPECT_CALL(obs, Observe(_, _, _)).Times(0); |
prefs.ClearPref(pref_name); |
- EXPECT_FALSE(obs.observer_fired()); |
+ Mock::VerifyAndClearExpectations(&obs); |
} |
TEST(PrefServiceTest, HasPrefPath) { |
@@ -156,35 +112,38 @@ TEST(PrefServiceTest, Observers) { |
prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com")); |
prefs.RegisterStringPref(pref_name, std::string()); |
- const std::string new_pref_value("http://www.google.com/"); |
- TestPrefObserver obs(&prefs, pref_name, new_pref_value); |
+ const char new_pref_value[] = "http://www.google.com/"; |
+ const StringValue expected_new_pref_value(new_pref_value); |
+ PrefObserverMock obs; |
PrefChangeRegistrar registrar; |
registrar.Init(&prefs); |
registrar.Add(pref_name, &obs); |
- // This should fire the checks in TestPrefObserver::Observe. |
- prefs.SetString(pref_name, new_pref_value); |
- // Make sure the tests were actually run. |
- EXPECT_TRUE(obs.observer_fired()); |
+ // This should fire the checks in PrefObserverMock::Observe. |
+ obs.Expect(&prefs, pref_name, &expected_new_pref_value); |
+ prefs.SetString(pref_name, new_pref_value); |
+ Mock::VerifyAndClearExpectations(&obs); |
// Now try adding a second pref observer. |
- const std::string new_pref_value2("http://www.youtube.com/"); |
- obs.Reset(new_pref_value2); |
- TestPrefObserver obs2(&prefs, pref_name, new_pref_value2); |
+ const char new_pref_value2[] = "http://www.youtube.com/"; |
+ const StringValue expected_new_pref_value2(new_pref_value2); |
+ PrefObserverMock obs2; |
+ obs.Expect(&prefs, pref_name, &expected_new_pref_value2); |
+ obs2.Expect(&prefs, pref_name, &expected_new_pref_value2); |
registrar.Add(pref_name, &obs2); |
// This should fire the checks in obs and obs2. |
prefs.SetString(pref_name, new_pref_value2); |
- EXPECT_TRUE(obs.observer_fired()); |
- EXPECT_TRUE(obs2.observer_fired()); |
+ Mock::VerifyAndClearExpectations(&obs); |
+ Mock::VerifyAndClearExpectations(&obs2); |
// Make sure obs2 still works after removing obs. |
registrar.Remove(pref_name, &obs); |
- obs.Reset(std::string()); |
- obs2.Reset(new_pref_value); |
+ EXPECT_CALL(obs, Observe(_, _, _)).Times(0); |
+ obs2.Expect(&prefs, pref_name, &expected_new_pref_value); |
// This should only fire the observer in obs2. |
prefs.SetString(pref_name, new_pref_value); |
- EXPECT_FALSE(obs.observer_fired()); |
- EXPECT_TRUE(obs2.observer_fired()); |
+ Mock::VerifyAndClearExpectations(&obs); |
+ Mock::VerifyAndClearExpectations(&obs2); |
} |
TEST(PrefServiceTest, ProxyFromCommandLineNotPolicy) { |
@@ -340,24 +299,11 @@ class PrefServiceSetValueTest : public testing::Test { |
static const char kValue[]; |
PrefServiceSetValueTest() |
- : name_string_(kName), |
- null_value_(Value::CreateNullValue()) {} |
- |
- void SetExpectNoNotification() { |
- EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
- } |
- |
- void SetExpectPrefChanged() { |
- EXPECT_CALL(observer_, |
- Observe(NotificationType(NotificationType::PREF_CHANGED), _, |
- Property(&Details<std::string>::ptr, |
- Pointee(name_string_)))); |
- } |
+ : null_value_(Value::CreateNullValue()) {} |
TestingPrefService prefs_; |
- std::string name_string_; |
scoped_ptr<Value> null_value_; |
- NotificationObserverMock observer_; |
+ PrefObserverMock observer_; |
}; |
const char PrefServiceSetValueTest::kName[] = "name"; |
@@ -365,8 +311,7 @@ const char PrefServiceSetValueTest::kValue[] = "value"; |
TEST_F(PrefServiceSetValueTest, SetStringValue) { |
const char default_string[] = "default"; |
- const scoped_ptr<Value> default_value( |
- Value::CreateStringValue(default_string)); |
+ const StringValue default_value(default_string); |
prefs_.RegisterStringPref(kName, default_string); |
PrefChangeRegistrar registrar; |
@@ -374,18 +319,18 @@ TEST_F(PrefServiceSetValueTest, SetStringValue) { |
registrar.Add(kName, &observer_); |
// Changing the controlling store from default to user triggers notification. |
- SetExpectPrefChanged(); |
- prefs_.Set(kName, *default_value); |
+ observer_.Expect(&prefs_, kName, &default_value); |
+ prefs_.Set(kName, default_value); |
Mock::VerifyAndClearExpectations(&observer_); |
- SetExpectNoNotification(); |
- prefs_.Set(kName, *default_value); |
+ EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
+ prefs_.Set(kName, default_value); |
Mock::VerifyAndClearExpectations(&observer_); |
- const scoped_ptr<Value> new_value(Value::CreateStringValue(kValue)); |
- SetExpectPrefChanged(); |
- prefs_.Set(kName, *new_value); |
- EXPECT_EQ(kValue, prefs_.GetString(kName)); |
+ StringValue new_value(kValue); |
+ observer_.Expect(&prefs_, kName, &new_value); |
+ prefs_.Set(kName, new_value); |
+ Mock::VerifyAndClearExpectations(&observer_); |
} |
TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { |
@@ -396,30 +341,23 @@ TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { |
// Dictionary values are special: setting one to NULL is the same as clearing |
// the user value, allowing the NULL default to take (or keep) control. |
- SetExpectNoNotification(); |
+ EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
prefs_.Set(kName, *null_value_); |
Mock::VerifyAndClearExpectations(&observer_); |
DictionaryValue new_value; |
new_value.SetString(kName, kValue); |
- SetExpectPrefChanged(); |
+ observer_.Expect(&prefs_, kName, &new_value); |
prefs_.Set(kName, new_value); |
Mock::VerifyAndClearExpectations(&observer_); |
- DictionaryValue* dict = prefs_.GetMutableDictionary(kName); |
- EXPECT_EQ(1U, dict->size()); |
- std::string out_value; |
- dict->GetString(kName, &out_value); |
- EXPECT_EQ(kValue, out_value); |
- SetExpectNoNotification(); |
+ EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
prefs_.Set(kName, new_value); |
Mock::VerifyAndClearExpectations(&observer_); |
- SetExpectPrefChanged(); |
+ observer_.Expect(&prefs_, kName, null_value_.get()); |
prefs_.Set(kName, *null_value_); |
Mock::VerifyAndClearExpectations(&observer_); |
- dict = prefs_.GetMutableDictionary(kName); |
- EXPECT_EQ(0U, dict->size()); |
} |
TEST_F(PrefServiceSetValueTest, SetListValue) { |
@@ -430,28 +368,21 @@ TEST_F(PrefServiceSetValueTest, SetListValue) { |
// List values are special: setting one to NULL is the same as clearing the |
// user value, allowing the NULL default to take (or keep) control. |
- SetExpectNoNotification(); |
+ EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
prefs_.Set(kName, *null_value_); |
Mock::VerifyAndClearExpectations(&observer_); |
ListValue new_value; |
new_value.Append(Value::CreateStringValue(kValue)); |
- SetExpectPrefChanged(); |
+ observer_.Expect(&prefs_, kName, &new_value); |
prefs_.Set(kName, new_value); |
Mock::VerifyAndClearExpectations(&observer_); |
- const ListValue* list = prefs_.GetMutableList(kName); |
- ASSERT_EQ(1U, list->GetSize()); |
- std::string out_value; |
- list->GetString(0, &out_value); |
- EXPECT_EQ(kValue, out_value); |
- SetExpectNoNotification(); |
+ EXPECT_CALL(observer_, Observe(_, _, _)).Times(0); |
prefs_.Set(kName, new_value); |
Mock::VerifyAndClearExpectations(&observer_); |
- SetExpectPrefChanged(); |
+ observer_.Expect(&prefs_, kName, null_value_.get()); |
prefs_.Set(kName, *null_value_); |
Mock::VerifyAndClearExpectations(&observer_); |
- list = prefs_.GetMutableList(kName); |
- EXPECT_EQ(0U, list->GetSize()); |
} |