1 // Copyright 2011 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/pref_value_map.h"
6
7 #include "base/values.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace base {
11 namespace {
12
TEST(PrefValueMapTest,SetValue)13 TEST(PrefValueMapTest, SetValue) {
14 PrefValueMap map;
15 const Value* result = nullptr;
16 EXPECT_FALSE(map.GetValue("key", &result));
17 EXPECT_FALSE(result);
18
19 EXPECT_TRUE(map.SetValue("key", Value("test")));
20 EXPECT_FALSE(map.SetValue("key", Value("test")));
21 EXPECT_TRUE(map.SetValue("key", Value("hi mom!")));
22
23 EXPECT_TRUE(map.GetValue("key", &result));
24 EXPECT_EQ("hi mom!", *result);
25 }
26
TEST(PrefValueMapTest,GetAndSetIntegerValue)27 TEST(PrefValueMapTest, GetAndSetIntegerValue) {
28 PrefValueMap map;
29 ASSERT_TRUE(map.SetValue("key", Value(5)));
30
31 int int_value = 0;
32 EXPECT_TRUE(map.GetInteger("key", &int_value));
33 EXPECT_EQ(5, int_value);
34
35 map.SetInteger("key", -14);
36 EXPECT_TRUE(map.GetInteger("key", &int_value));
37 EXPECT_EQ(-14, int_value);
38 }
39
TEST(PrefValueMapTest,SetDoubleValue)40 TEST(PrefValueMapTest, SetDoubleValue) {
41 PrefValueMap map;
42 ASSERT_TRUE(map.SetValue("key", Value(5.5)));
43
44 const Value* result = nullptr;
45 ASSERT_TRUE(map.GetValue("key", &result));
46 EXPECT_DOUBLE_EQ(5.5, result->GetDouble());
47 }
48
TEST(PrefValueMapTest,RemoveValue)49 TEST(PrefValueMapTest, RemoveValue) {
50 PrefValueMap map;
51 EXPECT_FALSE(map.RemoveValue("key"));
52
53 EXPECT_TRUE(map.SetValue("key", Value("test")));
54 EXPECT_TRUE(map.GetValue("key", nullptr));
55
56 EXPECT_TRUE(map.RemoveValue("key"));
57 EXPECT_FALSE(map.GetValue("key", nullptr));
58
59 EXPECT_FALSE(map.RemoveValue("key"));
60 }
61
TEST(PrefValueMapTest,Clear)62 TEST(PrefValueMapTest, Clear) {
63 PrefValueMap map;
64 EXPECT_TRUE(map.SetValue("key", Value("test")));
65 EXPECT_TRUE(map.GetValue("key", nullptr));
66
67 map.Clear();
68
69 EXPECT_FALSE(map.GetValue("key", nullptr));
70 }
71
TEST(PrefValueMapTest,ClearWithPrefix)72 TEST(PrefValueMapTest, ClearWithPrefix) {
73 {
74 PrefValueMap map;
75 EXPECT_TRUE(map.SetValue("a", Value("test")));
76 EXPECT_TRUE(map.SetValue("b", Value("test")));
77 EXPECT_TRUE(map.SetValue("bb", Value("test")));
78 EXPECT_TRUE(map.SetValue("z", Value("test")));
79
80 map.ClearWithPrefix("b");
81
82 EXPECT_TRUE(map.GetValue("a", nullptr));
83 EXPECT_FALSE(map.GetValue("b", nullptr));
84 EXPECT_FALSE(map.GetValue("bb", nullptr));
85 EXPECT_TRUE(map.GetValue("z", nullptr));
86 }
87 {
88 PrefValueMap map;
89 EXPECT_TRUE(map.SetValue("a", Value("test")));
90 EXPECT_TRUE(map.SetValue("b", Value("test")));
91 EXPECT_TRUE(map.SetValue("bb", Value("test")));
92 EXPECT_TRUE(map.SetValue("z", Value("test")));
93
94 map.ClearWithPrefix("z");
95
96 EXPECT_TRUE(map.GetValue("a", nullptr));
97 EXPECT_TRUE(map.GetValue("b", nullptr));
98 EXPECT_TRUE(map.GetValue("bb", nullptr));
99 EXPECT_FALSE(map.GetValue("z", nullptr));
100 }
101 {
102 PrefValueMap map;
103 EXPECT_TRUE(map.SetValue("a", Value("test")));
104 EXPECT_TRUE(map.SetValue("b", Value("test")));
105 EXPECT_TRUE(map.SetValue("bb", Value("test")));
106 EXPECT_TRUE(map.SetValue("z", Value("test")));
107
108 map.ClearWithPrefix("c");
109
110 EXPECT_TRUE(map.GetValue("a", nullptr));
111 EXPECT_TRUE(map.GetValue("b", nullptr));
112 EXPECT_TRUE(map.GetValue("bb", nullptr));
113 EXPECT_TRUE(map.GetValue("z", nullptr));
114 }
115 }
116
TEST(PrefValueMapTest,GetDifferingKeys)117 TEST(PrefValueMapTest, GetDifferingKeys) {
118 PrefValueMap reference;
119 EXPECT_TRUE(reference.SetValue("b", Value("test")));
120 EXPECT_TRUE(reference.SetValue("c", Value("test")));
121 EXPECT_TRUE(reference.SetValue("e", Value("test")));
122
123 PrefValueMap check;
124 std::vector<std::string> differing_paths;
125 std::vector<std::string> expected_differing_paths;
126
127 reference.GetDifferingKeys(&check, &differing_paths);
128 expected_differing_paths.push_back("b");
129 expected_differing_paths.push_back("c");
130 expected_differing_paths.push_back("e");
131 EXPECT_EQ(expected_differing_paths, differing_paths);
132
133 EXPECT_TRUE(check.SetValue("a", Value("test")));
134 EXPECT_TRUE(check.SetValue("c", Value("test")));
135 EXPECT_TRUE(check.SetValue("d", Value("test")));
136
137 reference.GetDifferingKeys(&check, &differing_paths);
138 expected_differing_paths.clear();
139 expected_differing_paths.push_back("a");
140 expected_differing_paths.push_back("b");
141 expected_differing_paths.push_back("d");
142 expected_differing_paths.push_back("e");
143 EXPECT_EQ(expected_differing_paths, differing_paths);
144 }
145
TEST(PrefValueMapTest,SwapTwoMaps)146 TEST(PrefValueMapTest, SwapTwoMaps) {
147 PrefValueMap first_map;
148 EXPECT_TRUE(first_map.SetValue("a", Value("test")));
149 EXPECT_TRUE(first_map.SetValue("b", Value("test")));
150 EXPECT_TRUE(first_map.SetValue("c", Value("test")));
151
152 PrefValueMap second_map;
153 EXPECT_TRUE(second_map.SetValue("d", Value("test")));
154 EXPECT_TRUE(second_map.SetValue("e", Value("test")));
155 EXPECT_TRUE(second_map.SetValue("f", Value("test")));
156
157 first_map.Swap(&second_map);
158
159 EXPECT_TRUE(first_map.GetValue("d", nullptr));
160 EXPECT_TRUE(first_map.GetValue("e", nullptr));
161 EXPECT_TRUE(first_map.GetValue("f", nullptr));
162
163 EXPECT_TRUE(second_map.GetValue("a", nullptr));
164 EXPECT_TRUE(second_map.GetValue("b", nullptr));
165 EXPECT_TRUE(second_map.GetValue("c", nullptr));
166 }
167
168 } // namespace
169 } // namespace base
170