1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/prefs/default_pref_store.h"
6 #include "base/memory/raw_ptr.h"
7 #include "testing/gtest/include/gtest/gtest.h"
13 class MockPrefStoreObserver : public PrefStore::Observer {
15 explicit MockPrefStoreObserver(DefaultPrefStore* pref_store);
17 MockPrefStoreObserver(const MockPrefStoreObserver&) = delete;
18 MockPrefStoreObserver& operator=(const MockPrefStoreObserver&) = delete;
20 ~MockPrefStoreObserver() override;
26 // PrefStore::Observer implementation:
27 void OnPrefValueChanged(const std::string& key) override;
28 void OnInitializationCompleted(bool succeeded) override {}
31 raw_ptr<DefaultPrefStore> pref_store_;
36 MockPrefStoreObserver::MockPrefStoreObserver(DefaultPrefStore* pref_store)
37 : pref_store_(pref_store), change_count_(0) {
38 pref_store_->AddObserver(this);
41 MockPrefStoreObserver::~MockPrefStoreObserver() {
42 pref_store_->RemoveObserver(this);
45 void MockPrefStoreObserver::OnPrefValueChanged(const std::string& key) {
51 TEST(DefaultPrefStoreTest, NotifyPrefValueChanged) {
52 scoped_refptr<DefaultPrefStore> pref_store(new DefaultPrefStore);
53 MockPrefStoreObserver observer(pref_store.get());
54 std::string kPrefKey("pref_key");
56 // Setting a default value shouldn't send a change notification.
57 pref_store->SetDefaultValue(kPrefKey, Value("foo"));
58 EXPECT_EQ(0, observer.change_count());
60 // Replacing the default value should send a change notification...
61 pref_store->ReplaceDefaultValue(kPrefKey, Value("bar"));
62 EXPECT_EQ(1, observer.change_count());
64 // But only if the value actually changed.
65 pref_store->ReplaceDefaultValue(kPrefKey, Value("bar"));
66 EXPECT_EQ(1, observer.change_count());