13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_change_registrar.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/test/testing_pref_service.h" 7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_details.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_observer_mock.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_source.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_type.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "testing/gmock/include/gmock/gmock.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "testing/gtest/include/gtest/gtest.h" 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing testing::Mock; 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing testing::Eq; 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace { 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// A mock provider that allows us to capture pref observer changes. 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass MockPrefService : public TestingPrefService { 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MockPrefService() {} 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~MockPrefService() {} 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD2(AddPrefObserver, void(const char*, NotificationObserver*)); 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD2(RemovePrefObserver, void(const char*, NotificationObserver*)); 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} // namespace 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass PrefChangeRegistrarTest : public testing::Test { 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PrefChangeRegistrarTest() {} 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~PrefChangeRegistrarTest() {} 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick protected: 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void SetUp(); 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NotificationObserver* observer() const { return observer_.get(); } 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MockPrefService* service() const { return service_.get(); } 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<MockPrefService> service_; 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<NotificationObserverMock> observer_; 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid PrefChangeRegistrarTest::SetUp() { 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick service_.reset(new MockPrefService()); 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen observer_.reset(new NotificationObserverMock()); 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(PrefChangeRegistrarTest, AddAndRemove) { 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PrefChangeRegistrar registrar; 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Init(service()); 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Test adding. 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddPrefObserver(Eq(std::string("test.pref.1")), observer())); 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddPrefObserver(Eq(std::string("test.pref.2")), observer())); 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Add("test.pref.1", observer()); 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Add("test.pref.2", observer()); 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(registrar.IsEmpty()); 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Test removing. 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Mock::VerifyAndClearExpectations(service()); 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RemovePrefObserver(Eq(std::string("test.pref.1")), observer())); 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RemovePrefObserver(Eq(std::string("test.pref.2")), observer())); 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Remove("test.pref.1", observer()); 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Remove("test.pref.2", observer()); 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(registrar.IsEmpty()); 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Explicitly check the expectations now to make sure that the Removes 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // worked (rather than the registrar destructor doing the work). 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Mock::VerifyAndClearExpectations(service()); 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(PrefChangeRegistrarTest, AutoRemove) { 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PrefChangeRegistrar registrar; 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Init(service()); 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Setup of auto-remove. 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddPrefObserver(Eq(std::string("test.pref.1")), observer())); 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Add("test.pref.1", observer()); 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Mock::VerifyAndClearExpectations(service()); 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(registrar.IsEmpty()); 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Test auto-removing. 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RemovePrefObserver(Eq(std::string("test.pref.1")), observer())); 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(PrefChangeRegistrarTest, RemoveAll) { 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PrefChangeRegistrar registrar; 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Init(service()); 993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddPrefObserver(Eq(std::string("test.pref.1")), observer())); 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddPrefObserver(Eq(std::string("test.pref.2")), observer())); 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Add("test.pref.1", observer()); 1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.Add("test.pref.2", observer()); 1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Mock::VerifyAndClearExpectations(service()); 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RemovePrefObserver(Eq(std::string("test.pref.1")), observer())); 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(*service(), 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RemovePrefObserver(Eq(std::string("test.pref.2")), observer())); 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick registrar.RemoveAll(); 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(registrar.IsEmpty()); 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Explicitly check the expectations now to make sure that the RemoveAll 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // worked (rather than the registrar destructor doing the work). 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Mock::VerifyAndClearExpectations(service()); 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 119