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