// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/prefs/pref_set_observer.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_pref_service.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" #include "content/test/notification_observer_mock.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" // Unit tests for PrefSetObserver. class PrefSetObserverTest : public testing::Test { public: virtual void SetUp() { pref_service_.reset(new TestingPrefService); pref_service_->RegisterStringPref(prefs::kHomePage, "http://google.com", PrefService::UNSYNCABLE_PREF); pref_service_->RegisterBooleanPref(prefs::kHomePageIsNewTabPage, false, PrefService::UNSYNCABLE_PREF); pref_service_->RegisterStringPref(prefs::kApplicationLocale, "", PrefService::UNSYNCABLE_PREF); } PrefSetObserver* CreatePrefSetObserver( content::NotificationObserver* observer) { PrefSetObserver* pref_set = new PrefSetObserver(pref_service_.get(), observer); pref_set->AddPref(prefs::kHomePage); pref_set->AddPref(prefs::kHomePageIsNewTabPage); return pref_set; } scoped_ptr pref_service_; }; TEST_F(PrefSetObserverTest, IsObserved) { scoped_ptr pref_set(CreatePrefSetObserver(NULL)); EXPECT_TRUE(pref_set->IsObserved(prefs::kHomePage)); EXPECT_TRUE(pref_set->IsObserved(prefs::kHomePageIsNewTabPage)); EXPECT_FALSE(pref_set->IsObserved(prefs::kApplicationLocale)); } TEST_F(PrefSetObserverTest, IsManaged) { scoped_ptr pref_set(CreatePrefSetObserver(NULL)); EXPECT_FALSE(pref_set->IsManaged()); pref_service_->SetManagedPref(prefs::kHomePage, Value::CreateStringValue("http://crbug.com")); EXPECT_TRUE(pref_set->IsManaged()); pref_service_->SetManagedPref(prefs::kHomePageIsNewTabPage, Value::CreateBooleanValue(true)); EXPECT_TRUE(pref_set->IsManaged()); pref_service_->RemoveManagedPref(prefs::kHomePage); EXPECT_TRUE(pref_set->IsManaged()); pref_service_->RemoveManagedPref(prefs::kHomePageIsNewTabPage); EXPECT_FALSE(pref_set->IsManaged()); } MATCHER_P(PrefNameDetails, name, "details references named preference") { std::string* pstr = reinterpret_cast&>(arg).ptr(); return pstr && *pstr == name; } TEST_F(PrefSetObserverTest, Observe) { using testing::_; using testing::Mock; content::NotificationObserverMock observer; scoped_ptr pref_set(CreatePrefSetObserver(&observer)); EXPECT_CALL(observer, Observe(int(chrome::NOTIFICATION_PREF_CHANGED), content::Source(pref_service_.get()), PrefNameDetails(prefs::kHomePage))); pref_service_->SetUserPref(prefs::kHomePage, Value::CreateStringValue("http://crbug.com")); Mock::VerifyAndClearExpectations(&observer); EXPECT_CALL(observer, Observe(int(chrome::NOTIFICATION_PREF_CHANGED), content::Source(pref_service_.get()), PrefNameDetails(prefs::kHomePageIsNewTabPage))); pref_service_->SetUserPref(prefs::kHomePageIsNewTabPage, Value::CreateBooleanValue(true)); Mock::VerifyAndClearExpectations(&observer); EXPECT_CALL(observer, Observe(_, _, _)).Times(0); pref_service_->SetUserPref(prefs::kApplicationLocale, Value::CreateStringValue("en_US.utf8")); Mock::VerifyAndClearExpectations(&observer); }