| 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 8ada07a47ffb62d04698ed9364c139382248aff0..885e1b94ef33c25fef12b4dabf2e5ac5e6fcba99 100644
|
| --- a/chrome/browser/prefs/pref_service_unittest.cc
|
| +++ b/chrome/browser/prefs/pref_service_unittest.cc
|
| @@ -30,123 +30,149 @@ using testing::Mock;
|
| // TODO(port): port this test to POSIX.
|
| #if defined(OS_WIN)
|
| TEST(PrefServiceTest, LocalizedPrefs) {
|
| - TestingPrefService prefs;
|
| + scoped_ptr<TestingPrefService> prefs(
|
| + TestingPrefService::CreateTestingPrefService());
|
| const char kBoolean[] = "boolean";
|
| const char kInteger[] = "integer";
|
| const char kString[] = "string";
|
| - prefs.RegisterLocalizedBooleanPref(kBoolean, IDS_LOCALE_BOOL);
|
| - prefs.RegisterLocalizedIntegerPref(kInteger, IDS_LOCALE_INT);
|
| - prefs.RegisterLocalizedStringPref(kString, IDS_LOCALE_STRING);
|
| + prefs->RegisterLocalizedBooleanPref(kBoolean, IDS_LOCALE_BOOL);
|
| + prefs->RegisterLocalizedIntegerPref(kInteger, IDS_LOCALE_INT);
|
| + prefs->RegisterLocalizedStringPref(kString, IDS_LOCALE_STRING);
|
|
|
| // The locale default should take preference over the user default.
|
| - EXPECT_FALSE(prefs.GetBoolean(kBoolean));
|
| - EXPECT_EQ(1, prefs.GetInteger(kInteger));
|
| - EXPECT_EQ("hello", prefs.GetString(kString));
|
| -
|
| - prefs.SetBoolean(kBoolean, true);
|
| - EXPECT_TRUE(prefs.GetBoolean(kBoolean));
|
| - prefs.SetInteger(kInteger, 5);
|
| - EXPECT_EQ(5, prefs.GetInteger(kInteger));
|
| - prefs.SetString(kString, "foo");
|
| - EXPECT_EQ("foo", prefs.GetString(kString));
|
| + EXPECT_FALSE(prefs->GetBoolean(kBoolean));
|
| + EXPECT_EQ(1, prefs->GetInteger(kInteger));
|
| + EXPECT_EQ("hello", prefs->GetString(kString));
|
| +
|
| + prefs->SetBoolean(kBoolean, true);
|
| + EXPECT_TRUE(prefs->GetBoolean(kBoolean));
|
| + prefs->SetInteger(kInteger, 5);
|
| + EXPECT_EQ(5, prefs->GetInteger(kInteger));
|
| + prefs->SetString(kString, "foo");
|
| + EXPECT_EQ("foo", prefs->GetString(kString));
|
| }
|
| #endif
|
|
|
| TEST(PrefServiceTest, NoObserverFire) {
|
| - TestingPrefService prefs;
|
| + scoped_ptr<TestingPrefService> prefs(
|
| + TestingPrefService::CreateTestingPrefService());
|
|
|
| const char pref_name[] = "homepage";
|
| - prefs.RegisterStringPref(pref_name, std::string());
|
| + prefs->RegisterStringPref(pref_name, std::string());
|
|
|
| const char new_pref_value[] = "http://www.google.com/";
|
| PrefObserverMock obs;
|
| PrefChangeRegistrar registrar;
|
| - registrar.Init(&prefs);
|
| + registrar.Init(prefs.get());
|
| registrar.Add(pref_name, &obs);
|
|
|
| // 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);
|
| + obs.Expect(prefs.get(), 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.
|
| EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
|
| - prefs.SetString(pref_name, new_pref_value);
|
| + prefs->SetString(pref_name, new_pref_value);
|
| Mock::VerifyAndClearExpectations(&obs);
|
|
|
| // Clearing the pref should cause the pref to fire.
|
| const StringValue expected_default_value("");
|
| - obs.Expect(&prefs, pref_name, &expected_default_value);
|
| - prefs.ClearPref(pref_name);
|
| + obs.Expect(prefs.get(), pref_name, &expected_default_value);
|
| + prefs->ClearPref(pref_name);
|
| Mock::VerifyAndClearExpectations(&obs);
|
|
|
| // Clearing the pref again should not cause the pref to fire.
|
| EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
|
| - prefs.ClearPref(pref_name);
|
| + prefs->ClearPref(pref_name);
|
| Mock::VerifyAndClearExpectations(&obs);
|
| }
|
|
|
| TEST(PrefServiceTest, HasPrefPath) {
|
| - TestingPrefService prefs;
|
| + scoped_ptr<TestingPrefService> prefs(
|
| + TestingPrefService::CreateTestingPrefService());
|
|
|
| const char path[] = "fake.path";
|
|
|
| // Shouldn't initially have a path.
|
| - EXPECT_FALSE(prefs.HasPrefPath(path));
|
| + EXPECT_FALSE(prefs->HasPrefPath(path));
|
|
|
| // Register the path. This doesn't set a value, so the path still shouldn't
|
| // exist.
|
| - prefs.RegisterStringPref(path, std::string());
|
| - EXPECT_FALSE(prefs.HasPrefPath(path));
|
| + prefs->RegisterStringPref(path, std::string());
|
| + EXPECT_FALSE(prefs->HasPrefPath(path));
|
|
|
| // Set a value and make sure we have a path.
|
| - prefs.SetString(path, "blah");
|
| - EXPECT_TRUE(prefs.HasPrefPath(path));
|
| + prefs->SetString(path, "blah");
|
| + EXPECT_TRUE(prefs->HasPrefPath(path));
|
| }
|
|
|
| TEST(PrefServiceTest, Observers) {
|
| const char pref_name[] = "homepage";
|
|
|
| - TestingPrefService prefs;
|
| - prefs.SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com"));
|
| - prefs.RegisterStringPref(pref_name, std::string());
|
| + scoped_ptr<TestingPrefService> prefs(
|
| + TestingPrefService::CreateTestingPrefService());
|
| + prefs->SetUserPref(pref_name, Value::CreateStringValue("http://www.cnn.com"));
|
| + prefs->RegisterStringPref(pref_name, std::string());
|
|
|
| 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.Init(prefs.get());
|
| registrar.Add(pref_name, &obs);
|
|
|
| // This should fire the checks in PrefObserverMock::Observe.
|
| - obs.Expect(&prefs, pref_name, &expected_new_pref_value);
|
| - prefs.SetString(pref_name, new_pref_value);
|
| + obs.Expect(prefs.get(), pref_name, &expected_new_pref_value);
|
| + prefs->SetString(pref_name, new_pref_value);
|
| Mock::VerifyAndClearExpectations(&obs);
|
|
|
| // Now try adding a second pref observer.
|
| 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);
|
| + obs.Expect(prefs.get(), pref_name, &expected_new_pref_value2);
|
| + obs2.Expect(prefs.get(), 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);
|
| + prefs->SetString(pref_name, new_pref_value2);
|
| Mock::VerifyAndClearExpectations(&obs);
|
| Mock::VerifyAndClearExpectations(&obs2);
|
|
|
| // Make sure obs2 still works after removing obs.
|
| registrar.Remove(pref_name, &obs);
|
| EXPECT_CALL(obs, Observe(_, _, _)).Times(0);
|
| - obs2.Expect(&prefs, pref_name, &expected_new_pref_value);
|
| + obs2.Expect(prefs.get(), pref_name, &expected_new_pref_value);
|
| // This should only fire the observer in obs2.
|
| - prefs.SetString(pref_name, new_pref_value);
|
| + prefs->SetString(pref_name, new_pref_value);
|
| Mock::VerifyAndClearExpectations(&obs);
|
| Mock::VerifyAndClearExpectations(&obs2);
|
| }
|
|
|
| +// Make sure that if a preference changes type, so the wrong type is stored in
|
| +// the user pref file, it uses the correct fallback value instead.
|
| +TEST(PrefServiceTest, GetValueChangedType) {
|
| + const int kTestValue = 10;
|
| + scoped_ptr<TestingPrefService> prefs(
|
| + TestingPrefService::CreateTestingPrefService());
|
| + prefs->RegisterIntegerPref(prefs::kStabilityLaunchCount, kTestValue);
|
| +
|
| + // Check falling back to a recommended value.
|
| + prefs->SetUserPref(prefs::kStabilityLaunchCount,
|
| + Value::CreateStringValue("not an integer"));
|
| + const PrefService::Preference* pref =
|
| + prefs->FindPreference(prefs::kStabilityLaunchCount);
|
| + ASSERT_TRUE(pref);
|
| + const Value* value = pref->GetValue();
|
| + ASSERT_TRUE(value);
|
| + EXPECT_EQ(Value::TYPE_INTEGER, value->GetType());
|
| + int actual_int_value = -1;
|
| + EXPECT_TRUE(value->GetAsInteger(&actual_int_value));
|
| + EXPECT_EQ(kTestValue, actual_int_value);
|
| +}
|
| +
|
| TEST(PrefServiceTest, ProxyPolicyOverridesCommandLineOptions) {
|
| CommandLine command_line(CommandLine::NO_PROGRAM);
|
| command_line.AppendSwitchASCII(switches::kProxyBypassList, "123");
|
| @@ -304,10 +330,10 @@ class PrefServiceSetValueTest : public testing::Test {
|
| static const char kValue[];
|
|
|
| PrefServiceSetValueTest()
|
| - : null_value_(Value::CreateNullValue()) {}
|
| + : prefs_(TestingPrefService::CreateTestingPrefService()) {
|
| + }
|
|
|
| - TestingPrefService prefs_;
|
| - scoped_ptr<Value> null_value_;
|
| + scoped_ptr<TestingPrefService> prefs_;
|
| PrefObserverMock observer_;
|
| };
|
|
|
| @@ -317,77 +343,75 @@ const char PrefServiceSetValueTest::kValue[] = "value";
|
| TEST_F(PrefServiceSetValueTest, SetStringValue) {
|
| const char default_string[] = "default";
|
| const StringValue default_value(default_string);
|
| - prefs_.RegisterStringPref(kName, default_string);
|
| + prefs_->RegisterStringPref(kName, default_string);
|
|
|
| PrefChangeRegistrar registrar;
|
| - registrar.Init(&prefs_);
|
| + registrar.Init(prefs_.get());
|
| registrar.Add(kName, &observer_);
|
|
|
| // Changing the controlling store from default to user triggers notification.
|
| - observer_.Expect(&prefs_, kName, &default_value);
|
| - prefs_.Set(kName, default_value);
|
| + observer_.Expect(prefs_.get(), kName, &default_value);
|
| + prefs_->Set(kName, default_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
|
| - prefs_.Set(kName, default_value);
|
| + prefs_->Set(kName, default_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| StringValue new_value(kValue);
|
| - observer_.Expect(&prefs_, kName, &new_value);
|
| - prefs_.Set(kName, new_value);
|
| + observer_.Expect(prefs_.get(), kName, &new_value);
|
| + prefs_->Set(kName, new_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
| }
|
|
|
| TEST_F(PrefServiceSetValueTest, SetDictionaryValue) {
|
| - prefs_.RegisterDictionaryPref(kName);
|
| + prefs_->RegisterDictionaryPref(kName);
|
| PrefChangeRegistrar registrar;
|
| - registrar.Init(&prefs_);
|
| + registrar.Init(prefs_.get());
|
| registrar.Add(kName, &observer_);
|
|
|
| - // 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.
|
| EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
|
| - prefs_.Set(kName, *null_value_);
|
| + prefs_->RemoveUserPref(kName);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| DictionaryValue new_value;
|
| new_value.SetString(kName, kValue);
|
| - observer_.Expect(&prefs_, kName, &new_value);
|
| - prefs_.Set(kName, new_value);
|
| + observer_.Expect(prefs_.get(), kName, &new_value);
|
| + prefs_->Set(kName, new_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
|
| - prefs_.Set(kName, new_value);
|
| + prefs_->Set(kName, new_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| - observer_.Expect(&prefs_, kName, null_value_.get());
|
| - prefs_.Set(kName, *null_value_);
|
| + DictionaryValue empty;
|
| + observer_.Expect(prefs_.get(), kName, &empty);
|
| + prefs_->Set(kName, empty);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
| }
|
|
|
| TEST_F(PrefServiceSetValueTest, SetListValue) {
|
| - prefs_.RegisterListPref(kName);
|
| + prefs_->RegisterListPref(kName);
|
| PrefChangeRegistrar registrar;
|
| - registrar.Init(&prefs_);
|
| + registrar.Init(prefs_.get());
|
| registrar.Add(kName, &observer_);
|
|
|
| - // 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.
|
| EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
|
| - prefs_.Set(kName, *null_value_);
|
| + prefs_->RemoveUserPref(kName);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| ListValue new_value;
|
| new_value.Append(Value::CreateStringValue(kValue));
|
| - observer_.Expect(&prefs_, kName, &new_value);
|
| - prefs_.Set(kName, new_value);
|
| + observer_.Expect(prefs_.get(), kName, &new_value);
|
| + prefs_->Set(kName, new_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| EXPECT_CALL(observer_, Observe(_, _, _)).Times(0);
|
| - prefs_.Set(kName, new_value);
|
| + prefs_->Set(kName, new_value);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
|
|
| - observer_.Expect(&prefs_, kName, null_value_.get());
|
| - prefs_.Set(kName, *null_value_);
|
| + ListValue empty;
|
| + observer_.Expect(prefs_.get(), kName, &empty);
|
| + prefs_->Set(kName, empty);
|
| Mock::VerifyAndClearExpectations(&observer_);
|
| }
|
|
|