Home | History | Annotate | Download | only in prefs
      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 #ifndef BASE_PREFS_MOCK_PREF_CHANGE_CALLBACK_H_
      6 #define BASE_PREFS_MOCK_PREF_CHANGE_CALLBACK_H_
      7 
      8 #include <string>
      9 
     10 #include "base/prefs/pref_change_registrar.h"
     11 #include "base/prefs/pref_service.h"
     12 #include "testing/gmock/include/gmock/gmock.h"
     13 
     14 using testing::Pointee;
     15 using testing::Property;
     16 using testing::Truly;
     17 
     18 // Matcher that checks whether the current value of the preference named
     19 // |pref_name| in |prefs| matches |value|. If |value| is NULL, the matcher
     20 // checks that the value is not set.
     21 MATCHER_P3(PrefValueMatches, prefs, pref_name, value, "") {
     22   const PrefService::Preference* pref =
     23       prefs->FindPreference(pref_name.c_str());
     24   if (!pref)
     25     return false;
     26 
     27   const base::Value* actual_value = pref->GetValue();
     28   if (!actual_value)
     29     return value == NULL;
     30   if (!value)
     31     return actual_value == NULL;
     32   return value->Equals(actual_value);
     33 }
     34 
     35 // A mock for testing preference notifications and easy setup of expectations.
     36 class MockPrefChangeCallback {
     37  public:
     38   explicit MockPrefChangeCallback(PrefService* prefs);
     39   virtual ~MockPrefChangeCallback();
     40 
     41   PrefChangeRegistrar::NamedChangeCallback GetCallback();
     42 
     43   MOCK_METHOD1(OnPreferenceChanged, void(const std::string&));
     44 
     45   void Expect(const std::string& pref_name,
     46               const base::Value* value);
     47 
     48  private:
     49   PrefService* prefs_;
     50 };
     51 
     52 #endif  // BASE_PREFS_MOCK_PREF_CHANGE_CALLBACK_H_
     53