in_memory_pref_store_unittest.cc 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Copyright 2016 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/in_memory_pref_store.h"
  5. #include <memory>
  6. #include "base/test/task_environment.h"
  7. #include "base/values.h"
  8. #include "components/prefs/persistent_pref_store_unittest.h"
  9. #include "components/prefs/pref_store_observer_mock.h"
  10. #include "testing/gmock/include/gmock/gmock.h"
  11. #include "testing/gtest/include/gtest/gtest.h"
  12. namespace {
  13. const char kTestPref[] = "test.pref";
  14. class InMemoryPrefStoreTest : public testing::Test {
  15. public:
  16. InMemoryPrefStoreTest() { }
  17. void SetUp() override { store_ = new InMemoryPrefStore(); }
  18. protected:
  19. base::test::TaskEnvironment task_environment_;
  20. scoped_refptr<InMemoryPrefStore> store_;
  21. PrefStoreObserverMock observer_;
  22. };
  23. TEST_F(InMemoryPrefStoreTest, SetGetValue) {
  24. const base::Value* value = nullptr;
  25. base::Value* mutable_value = nullptr;
  26. EXPECT_FALSE(store_->GetValue(kTestPref, &value));
  27. EXPECT_FALSE(store_->GetMutableValue(kTestPref, &mutable_value));
  28. store_->SetValue(kTestPref, std::make_unique<base::Value>(42),
  29. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  30. EXPECT_TRUE(store_->GetValue(kTestPref, &value));
  31. EXPECT_EQ(base::Value(42), *value);
  32. EXPECT_TRUE(store_->GetMutableValue(kTestPref, &mutable_value));
  33. EXPECT_EQ(base::Value(42), *mutable_value);
  34. store_->RemoveValue(kTestPref, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  35. EXPECT_FALSE(store_->GetValue(kTestPref, &value));
  36. EXPECT_FALSE(store_->GetMutableValue(kTestPref, &mutable_value));
  37. }
  38. TEST_F(InMemoryPrefStoreTest, GetSetObserver) {
  39. // Starts with no observers.
  40. EXPECT_FALSE(store_->HasObservers());
  41. // Add one.
  42. store_->AddObserver(&observer_);
  43. EXPECT_TRUE(store_->HasObservers());
  44. // Remove only observer.
  45. store_->RemoveObserver(&observer_);
  46. EXPECT_FALSE(store_->HasObservers());
  47. }
  48. TEST_F(InMemoryPrefStoreTest, CallObserver) {
  49. // With observer included.
  50. store_->AddObserver(&observer_);
  51. // Triggers on SetValue.
  52. store_->SetValue(kTestPref, std::make_unique<base::Value>(42),
  53. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  54. observer_.VerifyAndResetChangedKey(kTestPref);
  55. // And RemoveValue.
  56. store_->RemoveValue(kTestPref, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  57. observer_.VerifyAndResetChangedKey(kTestPref);
  58. // But not SetValueSilently.
  59. store_->SetValueSilently(kTestPref, std::make_unique<base::Value>(42),
  60. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  61. EXPECT_EQ(0u, observer_.changed_keys.size());
  62. // On multiple RemoveValues only the first one triggers observer.
  63. store_->RemoveValue(kTestPref, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  64. observer_.VerifyAndResetChangedKey(kTestPref);
  65. store_->RemoveValue(kTestPref, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  66. EXPECT_EQ(0u, observer_.changed_keys.size());
  67. // Doesn't make call on removed observers.
  68. store_->RemoveObserver(&observer_);
  69. store_->SetValue(kTestPref, std::make_unique<base::Value>(42),
  70. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  71. store_->RemoveValue(kTestPref, WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  72. EXPECT_EQ(0u, observer_.changed_keys.size());
  73. }
  74. TEST_F(InMemoryPrefStoreTest, Initialization) {
  75. EXPECT_TRUE(store_->IsInitializationComplete());
  76. }
  77. TEST_F(InMemoryPrefStoreTest, ReadOnly) {
  78. EXPECT_FALSE(store_->ReadOnly());
  79. }
  80. TEST_F(InMemoryPrefStoreTest, GetReadError) {
  81. EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, store_->GetReadError());
  82. }
  83. TEST_F(InMemoryPrefStoreTest, ReadPrefs) {
  84. EXPECT_EQ(PersistentPrefStore::PREF_READ_ERROR_NONE, store_->ReadPrefs());
  85. }
  86. TEST_F(InMemoryPrefStoreTest, CommitPendingWriteWithCallback) {
  87. TestCommitPendingWriteWithCallback(store_.get(), &task_environment_);
  88. }
  89. TEST_F(InMemoryPrefStoreTest, RemoveValuesByPrefix) {
  90. const base::Value* value;
  91. const std::string prefix = "pref";
  92. const std::string subpref_name1 = "pref.a";
  93. const std::string subpref_name2 = "pref.b";
  94. const std::string other_name = "other";
  95. store_->SetValue(subpref_name1, std::make_unique<base::Value>(42),
  96. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  97. store_->SetValue(subpref_name2, std::make_unique<base::Value>(42),
  98. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  99. store_->SetValue(other_name, std::make_unique<base::Value>(42),
  100. WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
  101. store_->RemoveValuesByPrefixSilently(prefix);
  102. EXPECT_FALSE(store_->GetValue(subpref_name1, &value));
  103. EXPECT_FALSE(store_->GetValue(subpref_name2, &value));
  104. EXPECT_TRUE(store_->GetValue(other_name, &value));
  105. }
  106. } // namespace