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 3ead5022a4c35b5f8a205bfdcae0256d4947bbaf..32ab5b7b2357e297af4118f9f08ffa2cbbc22255 100644 |
--- a/chrome/browser/prefs/pref_service_unittest.cc |
+++ b/chrome/browser/prefs/pref_service_unittest.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -148,6 +148,27 @@ TEST(PrefServiceTest, Observers) { |
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; |
+ TestingPrefService prefs; |
+ 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"); |
@@ -296,11 +317,7 @@ class PrefServiceSetValueTest : public testing::Test { |
static const char kName[]; |
static const char kValue[]; |
- PrefServiceSetValueTest() |
- : null_value_(Value::CreateNullValue()) {} |
- |
TestingPrefService prefs_; |
- scoped_ptr<Value> null_value_; |
PrefObserverMock observer_; |
}; |
@@ -337,10 +354,8 @@ TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { |
registrar.Init(&prefs_); |
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; |
@@ -353,8 +368,9 @@ TEST_F(PrefServiceSetValueTest, SetDictionaryValue) { |
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_, kName, &empty); |
+ prefs_.Set(kName, empty); |
Mock::VerifyAndClearExpectations(&observer_); |
} |
@@ -364,10 +380,8 @@ TEST_F(PrefServiceSetValueTest, SetListValue) { |
registrar.Init(&prefs_); |
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; |
@@ -380,7 +394,8 @@ TEST_F(PrefServiceSetValueTest, SetListValue) { |
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_, kName, &empty); |
+ prefs_.Set(kName, empty); |
Mock::VerifyAndClearExpectations(&observer_); |
} |