summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prefs/pref_service_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/prefs/pref_service_unittest.cc')
-rw-r--r--chrome/browser/prefs/pref_service_unittest.cc175
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());
}