1 // Copyright (c) 2010 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 "chrome/browser/prefs/pref_set_observer.h" 6 #include "chrome/common/pref_names.h" 7 #include "chrome/test/testing_pref_service.h" 8 #include "content/common/notification_details.h" 9 #include "content/common/notification_observer_mock.h" 10 #include "content/common/notification_source.h" 11 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gtest/include/gtest/gtest.h" 13 14 // Unit tests for PrefSetObserver. 15 class PrefSetObserverTest : public testing::Test { 16 public: 17 virtual void SetUp() { 18 pref_service_.reset(new TestingPrefService); 19 pref_service_->RegisterStringPref(prefs::kHomePage, "http://google.com"); 20 pref_service_->RegisterBooleanPref(prefs::kHomePageIsNewTabPage, false); 21 pref_service_->RegisterStringPref(prefs::kApplicationLocale, ""); 22 } 23 24 PrefSetObserver* CreatePrefSetObserver(NotificationObserver* observer) { 25 PrefSetObserver* pref_set = 26 new PrefSetObserver(pref_service_.get(), observer); 27 pref_set->AddPref(prefs::kHomePage); 28 pref_set->AddPref(prefs::kHomePageIsNewTabPage); 29 return pref_set; 30 } 31 32 scoped_ptr<TestingPrefService> pref_service_; 33 }; 34 35 TEST_F(PrefSetObserverTest, IsObserved) { 36 scoped_ptr<PrefSetObserver> pref_set(CreatePrefSetObserver(NULL)); 37 EXPECT_TRUE(pref_set->IsObserved(prefs::kHomePage)); 38 EXPECT_TRUE(pref_set->IsObserved(prefs::kHomePageIsNewTabPage)); 39 EXPECT_FALSE(pref_set->IsObserved(prefs::kApplicationLocale)); 40 } 41 42 TEST_F(PrefSetObserverTest, IsManaged) { 43 scoped_ptr<PrefSetObserver> pref_set(CreatePrefSetObserver(NULL)); 44 EXPECT_FALSE(pref_set->IsManaged()); 45 pref_service_->SetManagedPref(prefs::kHomePage, 46 Value::CreateStringValue("http://crbug.com")); 47 EXPECT_TRUE(pref_set->IsManaged()); 48 pref_service_->SetManagedPref(prefs::kHomePageIsNewTabPage, 49 Value::CreateBooleanValue(true)); 50 EXPECT_TRUE(pref_set->IsManaged()); 51 pref_service_->RemoveManagedPref(prefs::kHomePage); 52 EXPECT_TRUE(pref_set->IsManaged()); 53 pref_service_->RemoveManagedPref(prefs::kHomePageIsNewTabPage); 54 EXPECT_FALSE(pref_set->IsManaged()); 55 } 56 57 MATCHER_P(PrefNameDetails, name, "details references named preference") { 58 std::string* pstr = reinterpret_cast<const Details<std::string>&>(arg).ptr(); 59 return pstr && *pstr == name; 60 } 61 62 TEST_F(PrefSetObserverTest, Observe) { 63 using testing::_; 64 using testing::Mock; 65 66 NotificationObserverMock observer; 67 scoped_ptr<PrefSetObserver> pref_set(CreatePrefSetObserver(&observer)); 68 69 EXPECT_CALL(observer, 70 Observe(NotificationType(NotificationType::PREF_CHANGED), 71 Source<PrefService>(pref_service_.get()), 72 PrefNameDetails(prefs::kHomePage))); 73 pref_service_->SetUserPref(prefs::kHomePage, 74 Value::CreateStringValue("http://crbug.com")); 75 Mock::VerifyAndClearExpectations(&observer); 76 77 EXPECT_CALL(observer, 78 Observe(NotificationType(NotificationType::PREF_CHANGED), 79 Source<PrefService>(pref_service_.get()), 80 PrefNameDetails(prefs::kHomePageIsNewTabPage))); 81 pref_service_->SetUserPref(prefs::kHomePageIsNewTabPage, 82 Value::CreateBooleanValue(true)); 83 Mock::VerifyAndClearExpectations(&observer); 84 85 EXPECT_CALL(observer, Observe(_, _, _)).Times(0); 86 pref_service_->SetUserPref(prefs::kApplicationLocale, 87 Value::CreateStringValue("en_US.utf8")); 88 Mock::VerifyAndClearExpectations(&observer); 89 } 90