diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 09:12:58 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 09:12:58 +0000 |
commit | f8f8b6733c5e0e38c0b09785dabd627c87e3b000 (patch) | |
tree | 7795230ba6f7d9700e99f609eea0cfd3719ba580 /base/prefs/default_pref_store_unittest.cc | |
parent | df11561fbad158a558765c311e84324fb8574e82 (diff) | |
download | chromium_src-f8f8b6733c5e0e38c0b09785dabd627c87e3b000.zip chromium_src-f8f8b6733c5e0e38c0b09785dabd627c87e3b000.tar.gz chromium_src-f8f8b6733c5e0e38c0b09785dabd627c87e3b000.tar.bz2 |
Send pref change notifications when changing the default value for a pref.
TBR=ben@chromium.org
BUG=none
Review URL: https://chromiumcodereview.appspot.com/12541008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186662 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/prefs/default_pref_store_unittest.cc')
-rw-r--r-- | base/prefs/default_pref_store_unittest.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/base/prefs/default_pref_store_unittest.cc b/base/prefs/default_pref_store_unittest.cc new file mode 100644 index 0000000..7181989 --- /dev/null +++ b/base/prefs/default_pref_store_unittest.cc @@ -0,0 +1,69 @@ +// Copyright (c) 2012 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. + +#include "base/prefs/default_pref_store.h" +#include "testing/gtest/include/gtest/gtest.h" + +using base::StringValue; +using base::Value; + +namespace { + +class MockPrefStoreObserver : public PrefStore::Observer { + public: + explicit MockPrefStoreObserver(DefaultPrefStore* pref_store); + virtual ~MockPrefStoreObserver(); + + int change_count() { + return change_count_; + } + + // PrefStore::Observer implementation: + virtual void OnPrefValueChanged(const std::string& key) OVERRIDE; + virtual void OnInitializationCompleted(bool succeeded) OVERRIDE {} + + private: + DefaultPrefStore* pref_store_; + + int change_count_; + + DISALLOW_COPY_AND_ASSIGN(MockPrefStoreObserver); +}; + +MockPrefStoreObserver::MockPrefStoreObserver(DefaultPrefStore* pref_store) + : pref_store_(pref_store), change_count_(0) { + pref_store_->AddObserver(this); +} + +MockPrefStoreObserver::~MockPrefStoreObserver() { + pref_store_->RemoveObserver(this); +} + +void MockPrefStoreObserver::OnPrefValueChanged(const std::string& key) { + change_count_++; +} + +} // namespace + +TEST(DefaultPrefStoreTest, NotifyPrefValueChanged) { + scoped_refptr<DefaultPrefStore> pref_store(new DefaultPrefStore); + MockPrefStoreObserver observer(pref_store.get()); + std::string kPrefKey("pref_key"); + + // Setting a default value shouldn't send a change notification. + pref_store->SetDefaultValue(kPrefKey, + scoped_ptr<Value>(new StringValue("foo"))); + EXPECT_EQ(0, observer.change_count()); + + // Replacing the default value should send a change notification... + pref_store->ReplaceDefaultValue(kPrefKey, + scoped_ptr<Value>(new StringValue("bar"))); + EXPECT_EQ(1, observer.change_count()); + + // But only if the value actually changed. + pref_store->ReplaceDefaultValue(kPrefKey, + scoped_ptr<Value>(new StringValue("bar"))); + EXPECT_EQ(1, observer.change_count()); +} + |