overlay_persistent_pref_store_unittest.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
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/values.h"
6#include "chrome/browser/prefs/overlay_persistent_pref_store.h"
7#include "chrome/browser/prefs/testing_pref_store.h"
8#include "chrome/common/pref_store_observer_mock.h"
9#include "testing/gmock/include/gmock/gmock.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12using ::testing::Mock;
13using ::testing::StrEq;
14
15const char key[] = "test.key";
16
17class OverlayPersistentPrefStoreTest : public testing::Test {
18 public:
19  OverlayPersistentPrefStoreTest()
20      : underlay_(new TestingPrefStore()),
21        overlay_(new OverlayPersistentPrefStore(underlay_.get())) {
22  }
23
24  scoped_refptr<TestingPrefStore> underlay_;
25  scoped_refptr<OverlayPersistentPrefStore> overlay_;
26};
27
28TEST_F(OverlayPersistentPrefStoreTest, Observer) {
29  PrefStoreObserverMock obs;
30  overlay_->AddObserver(&obs);
31
32  // Check that underlay first value is reported.
33  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(1);
34  underlay_->SetValue(key, Value::CreateIntegerValue(42));
35  Mock::VerifyAndClearExpectations(&obs);
36
37  // Check that underlay overwriting is reported.
38  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(1);
39  underlay_->SetValue(key, Value::CreateIntegerValue(43));
40  Mock::VerifyAndClearExpectations(&obs);
41
42  // Check that overwriting change in overlay is reported.
43  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(1);
44  overlay_->SetValue(key, Value::CreateIntegerValue(44));
45  Mock::VerifyAndClearExpectations(&obs);
46
47  // Check that hidden underlay change is not reported.
48  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(0);
49  underlay_->SetValue(key, Value::CreateIntegerValue(45));
50  Mock::VerifyAndClearExpectations(&obs);
51
52  // Check that overlay remove is reported.
53  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(1);
54  overlay_->RemoveValue(key);
55  Mock::VerifyAndClearExpectations(&obs);
56
57  // Check that underlay remove is reported.
58  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(1);
59  underlay_->RemoveValue(key);
60  Mock::VerifyAndClearExpectations(&obs);
61
62  // Check respecting of silence.
63  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(0);
64  overlay_->SetValueSilently(key, Value::CreateIntegerValue(46));
65  Mock::VerifyAndClearExpectations(&obs);
66
67  overlay_->RemoveObserver(&obs);
68
69  // Check successful unsubscription.
70  EXPECT_CALL(obs, OnPrefValueChanged(StrEq(key))).Times(0);
71  underlay_->SetValue(key, Value::CreateIntegerValue(47));
72  overlay_->SetValue(key, Value::CreateIntegerValue(48));
73  Mock::VerifyAndClearExpectations(&obs);
74}
75
76TEST_F(OverlayPersistentPrefStoreTest, GetAndSet) {
77  Value* value = NULL;
78  int i = -1;
79  EXPECT_EQ(PrefStore::READ_NO_VALUE, overlay_->GetValue(key, &value));
80  EXPECT_EQ(PrefStore::READ_NO_VALUE, underlay_->GetValue(key, &value));
81
82  underlay_->SetValue(key, Value::CreateIntegerValue(42));
83
84  // Value shines through:
85  EXPECT_EQ(PrefStore::READ_OK, overlay_->GetValue(key, &value));
86  ASSERT_TRUE(value);
87  EXPECT_TRUE(value->GetAsInteger(&i));
88  EXPECT_EQ(42, i);
89
90  EXPECT_EQ(PrefStore::READ_OK, underlay_->GetValue(key, &value));
91  ASSERT_TRUE(value);
92  EXPECT_TRUE(value->GetAsInteger(&i));
93  EXPECT_EQ(42, i);
94
95  overlay_->SetValue(key, Value::CreateIntegerValue(43));
96
97  EXPECT_EQ(PrefStore::READ_OK, overlay_->GetValue(key, &value));
98  ASSERT_TRUE(value);
99  EXPECT_TRUE(value->GetAsInteger(&i));
100  EXPECT_EQ(43, i);
101
102  EXPECT_EQ(PrefStore::READ_OK, underlay_->GetValue(key, &value));
103  ASSERT_TRUE(value);
104  EXPECT_TRUE(value->GetAsInteger(&i));
105  EXPECT_EQ(42, i);
106
107  overlay_->RemoveValue(key);
108
109  // Value shines through:
110  EXPECT_EQ(PrefStore::READ_OK, overlay_->GetValue(key, &value));
111  ASSERT_TRUE(value);
112  EXPECT_TRUE(value->GetAsInteger(&i));
113  EXPECT_EQ(42, i);
114
115  EXPECT_EQ(PrefStore::READ_OK, underlay_->GetValue(key, &value));
116  ASSERT_TRUE(value);
117  EXPECT_TRUE(value->GetAsInteger(&i));
118  EXPECT_EQ(42, i);
119}
120