Home | History | Annotate | Download | only in prefs
      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