• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 CHROME_BROWSER_PREFS_PREF_OBSERVER_MOCK_H_
6 #define CHROME_BROWSER_PREFS_PREF_OBSERVER_MOCK_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "chrome/browser/prefs/pref_service.h"
12 #include "content/common/notification_details.h"
13 #include "content/common/notification_observer.h"
14 #include "content/common/notification_source.h"
15 #include "content/common/notification_type.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 
18 using testing::Pointee;
19 using testing::Property;
20 using testing::Truly;
21 
22 // Matcher that checks whether the current value of the preference named
23 // |pref_name| in |prefs| matches |value|. If |value| is NULL, the matcher
24 // checks that the value is not set.
25 MATCHER_P3(PrefValueMatches, prefs, pref_name, value, "") {
26   const PrefService::Preference* pref =
27       prefs->FindPreference(pref_name.c_str());
28   if (!pref)
29     return false;
30 
31   const Value* actual_value = pref->GetValue();
32   if (!actual_value)
33     return value == NULL;
34   if (!value)
35     return actual_value == NULL;
36   return value->Equals(actual_value);
37 }
38 
39 // A mock for testing preference notifications and easy setup of expectations.
40 class PrefObserverMock : public NotificationObserver {
41  public:
42   PrefObserverMock();
43   virtual ~PrefObserverMock();
44 
45   MOCK_METHOD3(Observe, void(NotificationType type,
46                              const NotificationSource& source,
47                              const NotificationDetails& details));
48 
49   void Expect(const PrefService* prefs,
50               const std::string& pref_name,
51               const Value* value);
52 };
53 
54 #endif  // CHROME_BROWSER_PREFS_PREF_OBSERVER_MOCK_H_
55