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 10 namespace base { 11 namespace { 12 13 TEST(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 27 TEST(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 40 TEST(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 51 TEST(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 64 TEST(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 74 TEST(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 103 TEST(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