default_pref_store_unittest.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/prefs/default_pref_store.h"
  5. #include "base/memory/raw_ptr.h"
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. using base::Value;
  8. namespace {
  9. class MockPrefStoreObserver : public PrefStore::Observer {
  10. public:
  11. explicit MockPrefStoreObserver(DefaultPrefStore* pref_store);
  12. MockPrefStoreObserver(const MockPrefStoreObserver&) = delete;
  13. MockPrefStoreObserver& operator=(const MockPrefStoreObserver&) = delete;
  14. ~MockPrefStoreObserver() override;
  15. int change_count() {
  16. return change_count_;
  17. }
  18. // PrefStore::Observer implementation:
  19. void OnPrefValueChanged(const std::string& key) override;
  20. void OnInitializationCompleted(bool succeeded) override {}
  21. private:
  22. raw_ptr<DefaultPrefStore> pref_store_;
  23. int change_count_;
  24. };
  25. MockPrefStoreObserver::MockPrefStoreObserver(DefaultPrefStore* pref_store)
  26. : pref_store_(pref_store), change_count_(0) {
  27. pref_store_->AddObserver(this);
  28. }
  29. MockPrefStoreObserver::~MockPrefStoreObserver() {
  30. pref_store_->RemoveObserver(this);
  31. }
  32. void MockPrefStoreObserver::OnPrefValueChanged(const std::string& key) {
  33. change_count_++;
  34. }
  35. } // namespace
  36. TEST(DefaultPrefStoreTest, NotifyPrefValueChanged) {
  37. scoped_refptr<DefaultPrefStore> pref_store(new DefaultPrefStore);
  38. MockPrefStoreObserver observer(pref_store.get());
  39. std::string kPrefKey("pref_key");
  40. // Setting a default value shouldn't send a change notification.
  41. pref_store->SetDefaultValue(kPrefKey, Value("foo"));
  42. EXPECT_EQ(0, observer.change_count());
  43. // Replacing the default value should send a change notification...
  44. pref_store->ReplaceDefaultValue(kPrefKey, Value("bar"));
  45. EXPECT_EQ(1, observer.change_count());
  46. // But only if the value actually changed.
  47. pref_store->ReplaceDefaultValue(kPrefKey, Value("bar"));
  48. EXPECT_EQ(1, observer.change_count());
  49. }