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