diff options
Diffstat (limited to 'chrome/browser/prefs/pref_service_unittest.cc')
-rw-r--r-- | chrome/browser/prefs/pref_service_unittest.cc | 175 |
1 files changed, 53 insertions, 122 deletions
diff --git a/chrome/browser/prefs/pref_service_unittest.cc b/chrome/browser/prefs/pref_service_unittest.cc index 7fc4608..6575bdf 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()); } |