1// Copyright (c) 2011 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
5#include "base/prefs/pref_value_map.h"
6
7#include "base/values.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace base {
11namespace {
12
13TEST(PrefValueMapTest, SetValue) {
14  PrefValueMap map;
15  const Value* result = NULL;
16  EXPECT_FALSE(map.GetValue("key", &result));
17  EXPECT_FALSE(result);
18
19  EXPECT_TRUE(map.SetValue("key", new StringValue("test")));
20  EXPECT_FALSE(map.SetValue("key", new StringValue("test")));
21  EXPECT_TRUE(map.SetValue("key", new StringValue("hi mom!")));
22
23  EXPECT_TRUE(map.GetValue("key", &result));
24  EXPECT_TRUE(StringValue("hi mom!").Equals(result));
25}
26
27TEST(PrefValueMapTest, GetAndSetIntegerValue) {
28  PrefValueMap map;
29  ASSERT_TRUE(map.SetValue("key", new FundamentalValue(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
40TEST(PrefValueMapTest, SetDoubleValue) {
41  PrefValueMap map;
42  ASSERT_TRUE(map.SetValue("key", new FundamentalValue(5.5)));
43
44  const Value* result = NULL;
45  ASSERT_TRUE(map.GetValue("key", &result));
46  double double_value = 0.;
47  EXPECT_TRUE(result->GetAsDouble(&double_value));
48  EXPECT_DOUBLE_EQ(5.5, double_value);
49}
50
51TEST(PrefValueMapTest, RemoveValue) {
52  PrefValueMap map;
53  EXPECT_FALSE(map.RemoveValue("key"));
54
55  EXPECT_TRUE(map.SetValue("key", new StringValue("test")));
56  EXPECT_TRUE(map.GetValue("key", NULL));
57
58  EXPECT_TRUE(map.RemoveValue("key"));
59  EXPECT_FALSE(map.GetValue("key", NULL));
60
61  EXPECT_FALSE(map.RemoveValue("key"));
62}
63
64TEST(PrefValueMapTest, Clear) {
65  PrefValueMap map;
66  EXPECT_TRUE(map.SetValue("key", new StringValue("test")));
67  EXPECT_TRUE(map.GetValue("key", NULL));
68
69  map.Clear();
70
71  EXPECT_FALSE(map.GetValue("key", NULL));
72}
73
74TEST(PrefValueMapTest, GetDifferingKeys) {
75  PrefValueMap reference;
76  EXPECT_TRUE(reference.SetValue("b", new StringValue("test")));
77  EXPECT_TRUE(reference.SetValue("c", new StringValue("test")));
78  EXPECT_TRUE(reference.SetValue("e", new StringValue("test")));
79
80  PrefValueMap check;
81  std::vector<std::string> differing_paths;
82  std::vector<std::string> expected_differing_paths;
83
84  reference.GetDifferingKeys(&check, &differing_paths);
85  expected_differing_paths.push_back("b");
86  expected_differing_paths.push_back("c");
87  expected_differing_paths.push_back("e");
88  EXPECT_EQ(expected_differing_paths, differing_paths);
89
90  EXPECT_TRUE(check.SetValue("a", new StringValue("test")));
91  EXPECT_TRUE(check.SetValue("c", new StringValue("test")));
92  EXPECT_TRUE(check.SetValue("d", new StringValue("test")));
93
94  reference.GetDifferingKeys(&check, &differing_paths);
95  expected_differing_paths.clear();
96  expected_differing_paths.push_back("a");
97  expected_differing_paths.push_back("b");
98  expected_differing_paths.push_back("d");
99  expected_differing_paths.push_back("e");
100  EXPECT_EQ(expected_differing_paths, differing_paths);
101}
102
103TEST(PrefValueMapTest, SwapTwoMaps) {
104  PrefValueMap first_map;
105  EXPECT_TRUE(first_map.SetValue("a", new StringValue("test")));
106  EXPECT_TRUE(first_map.SetValue("b", new StringValue("test")));
107  EXPECT_TRUE(first_map.SetValue("c", new StringValue("test")));
108
109  PrefValueMap second_map;
110  EXPECT_TRUE(second_map.SetValue("d", new StringValue("test")));
111  EXPECT_TRUE(second_map.SetValue("e", new StringValue("test")));
112  EXPECT_TRUE(second_map.SetValue("f", new StringValue("test")));
113
114  first_map.Swap(&second_map);
115
116  EXPECT_TRUE(first_map.GetValue("d", NULL));
117  EXPECT_TRUE(first_map.GetValue("e", NULL));
118  EXPECT_TRUE(first_map.GetValue("f", NULL));
119
120  EXPECT_TRUE(second_map.GetValue("a", NULL));
121  EXPECT_TRUE(second_map.GetValue("b", NULL));
122  EXPECT_TRUE(second_map.GetValue("c", NULL));
123}
124
125}  // namespace
126}  // namespace base
127