Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1075)

Side by Side Diff: chromeos/dbus/shill_client_unittest_base.h

Issue 10949030: This converts the Shill clients to allow propagation of shill errors (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROMEOS_DBUS_SHILL_CLIENT_UNITTEST_BASE_H_ 5 #ifndef CHROMEOS_DBUS_SHILL_CLIENT_UNITTEST_BASE_H_
6 #define CHROMEOS_DBUS_SHILL_CLIENT_UNITTEST_BASE_H_ 6 #define CHROMEOS_DBUS_SHILL_CLIENT_UNITTEST_BASE_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/json/json_writer.h"
10 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/values.h"
13 #include "chromeos/dbus/dbus_method_call_status.h" 15 #include "chromeos/dbus/dbus_method_call_status.h"
14 #include "chromeos/dbus/shill_client_helper.h" 16 #include "chromeos/dbus/shill_client_helper.h"
15 #include "dbus/mock_bus.h" 17 #include "dbus/mock_bus.h"
16 #include "dbus/mock_object_proxy.h" 18 #include "dbus/mock_object_proxy.h"
17 #include "dbus/object_proxy.h" 19 #include "dbus/object_proxy.h"
18 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
19 21
22 using ::testing::MatcherInterface;
23 using ::testing::MatchResultListener;
24 using ::testing::Matcher;
25 using ::testing::MakeMatcher;
26
20 namespace base { 27 namespace base {
21 28
22 class Value; 29 class Value;
23 class DictionaryValue; 30 class DictionaryValue;
24 31
25 } // namespace base 32 } // namespace base
26 33
27 namespace dbus { 34 namespace dbus {
28 35
29 class MessageReader; 36 class MessageReader;
30 37
31 } // namespace dbus 38 } // namespace dbus
32 39
33 namespace chromeos { 40 namespace chromeos {
34 41
42 // A gmock matcher for base::Value types, so we can match them in expectations.
43 class ValueMatcher
44 : public MatcherInterface<const base::Value&> {
45 public:
46 explicit ValueMatcher(const base::Value& value)
47 : expected_value_(value.DeepCopy()) {}
48
49 virtual bool MatchAndExplain(const base::Value& value,
50 MatchResultListener* listener) const {
hashimoto 2012/09/21 11:52:01 Could you move these method definitions to .cc fil
Greg Spencer (Chromium) 2012/09/21 22:03:47 Done.
51 return expected_value_->Equals(&value);
52 }
53
54 virtual void DescribeTo(::std::ostream* os) const {
55 std::string expected_value_str;
56 base::JSONWriter::WriteWithOptions(expected_value_.get(),
57 base::JSONWriter::OPTIONS_PRETTY_PRINT,
58 &expected_value_str);
59 *os << "value equals " << expected_value_str;
60 }
61
62 virtual void DescribeNegationTo(::std::ostream* os) const {
63 std::string expected_value_str;
64 base::JSONWriter::WriteWithOptions(expected_value_.get(),
65 base::JSONWriter::OPTIONS_PRETTY_PRINT,
66 &expected_value_str);
67 *os << "value does not equal " << expected_value_str;
68 }
69 private:
70 scoped_ptr<base::Value> expected_value_;
71 };
72
73 inline Matcher<const base::Value&> ValueEq(const base::Value& expected_value) {
74 return MakeMatcher(new ValueMatcher(expected_value));
75 }
76
35 // A class to provide functionalities needed for testing Shill D-Bus clients. 77 // A class to provide functionalities needed for testing Shill D-Bus clients.
36 class ShillClientUnittestBase : public testing::Test { 78 class ShillClientUnittestBase : public testing::Test {
37 public: 79 public:
38 // A mock Closure. 80 // A mock Closure.
39 class MockClosure { 81 class MockClosure {
40 public: 82 public:
41 MockClosure(); 83 MockClosure();
42 ~MockClosure(); 84 ~MockClosure();
43 MOCK_METHOD0(Run, void()); 85 MOCK_METHOD0(Run, void());
44 base::Closure GetCallback(); 86 base::Closure GetCallback();
45 }; 87 };
46 88
47 // A mock ErrorCallback. 89 // A mock ErrorCallback.
48 class MockErrorCallback { 90 class MockErrorCallback {
49 public: 91 public:
50 MockErrorCallback(); 92 MockErrorCallback();
51 ~MockErrorCallback(); 93 ~MockErrorCallback();
52 MOCK_METHOD2(Run, void(const std::string& error_name, 94 MOCK_METHOD2(Run, void(const std::string& error_name,
53 const std::string& error_mesage)); 95 const std::string& error_mesage));
54 ShillClientHelper::ErrorCallback GetCallback(); 96 ShillClientHelper::ErrorCallback GetCallback();
55 }; 97 };
56 98
99 // A mock PropertyChangedObserver that can be used to check expected values.
100 class MockPropertyChangeObserver
101 : public ShillClientHelper::PropertyChangedObserver {
102 public:
103 MockPropertyChangeObserver();
104 ~MockPropertyChangeObserver();
105 MOCK_METHOD2(OnPropertyChanged, void(const std::string& name,
106 const base::Value& value));
107 };
108
57 explicit ShillClientUnittestBase(const std::string& interface_name, 109 explicit ShillClientUnittestBase(const std::string& interface_name,
58 const dbus::ObjectPath& object_path); 110 const dbus::ObjectPath& object_path);
59 virtual ~ShillClientUnittestBase(); 111 virtual ~ShillClientUnittestBase();
60 112
61 virtual void SetUp() OVERRIDE; 113 virtual void SetUp() OVERRIDE;
62 virtual void TearDown() OVERRIDE; 114 virtual void TearDown() OVERRIDE;
63 115
64 protected: 116 protected:
65 // A callback to intercept and check the method call arguments. 117 // A callback to intercept and check the method call arguments.
66 typedef base::Callback<void( 118 typedef base::Callback<void(
67 dbus::MessageReader* reader)> ArgumentCheckCallback; 119 dbus::MessageReader* reader)> ArgumentCheckCallback;
68 120
69 // Sets expectations for called method name and arguments, and sets response. 121 // Sets expectations for called method name and arguments, and sets response.
70 void PrepareForMethodCall(const std::string& method_name, 122 void PrepareForMethodCall(const std::string& method_name,
71 const ArgumentCheckCallback& argument_checker, 123 const ArgumentCheckCallback& argument_checker,
72 dbus::Response* response); 124 dbus::Response* response);
73 125
74 // Sends property changed signal to the tested client. 126 // Sends property changed signal to the tested client.
75 void SendPropertyChangedSignal(dbus::Signal* signal); 127 void SendPropertyChangedSignal(dbus::Signal* signal);
76 128
77 // Checks the name and the value which are sent by PropertyChanged signal.
78 static void ExpectPropertyChanged(const std::string& expected_name,
79 const base::Value* expected_value,
80 const std::string& name,
81 const base::Value& value);
82
83 // Expects the reader to be empty. 129 // Expects the reader to be empty.
84 static void ExpectNoArgument(dbus::MessageReader* reader); 130 static void ExpectNoArgument(dbus::MessageReader* reader);
85 131
86 // Expects the reader to have a string. 132 // Expects the reader to have a string.
87 static void ExpectStringArgument(const std::string& expected_string, 133 static void ExpectStringArgument(const std::string& expected_string,
88 dbus::MessageReader* reader); 134 dbus::MessageReader* reader);
89 135
90 // Expects the reader to have a Value. 136 // Expects the reader to have a Value.
91 static void ExpectValueArgument(const base::Value* expected_value, 137 static void ExpectValueArgument(const base::Value* expected_value,
92 dbus::MessageReader* reader); 138 dbus::MessageReader* reader);
93 139
94 // Expects the reader to have a string and a Value. 140 // Expects the reader to have a string and a Value.
95 static void ExpectStringAndValueArguments(const std::string& expected_string, 141 static void ExpectStringAndValueArguments(const std::string& expected_string,
96 const base::Value* expected_value, 142 const base::Value* expected_value,
97 dbus::MessageReader* reader); 143 dbus::MessageReader* reader);
98 144
99 // Expects the call status to be SUCCESS. 145 // Expects the call status to be SUCCESS.
100 static void ExpectNoResultValue(DBusMethodCallStatus call_status); 146 static void ExpectNoResultValue(DBusMethodCallStatus call_status);
101 147
102 // Checks the result and expects the call status to be SUCCESS. 148 // Checks the result and expects the call status to be SUCCESS.
103 static void ExpectObjectPathResult(const dbus::ObjectPath& expected_result, 149 static void ExpectObjectPathResult(const dbus::ObjectPath& expected_result,
104 DBusMethodCallStatus call_status, 150 DBusMethodCallStatus call_status,
105 const dbus::ObjectPath& result); 151 const dbus::ObjectPath& result);
106 152
107 // Checks the result and expects the call status to be SUCCESS. 153 // Checks the result and expects the call status to be SUCCESS.
108 static void ExpectDictionaryValueResult( 154 static void ExpectDictionaryValueResult(
109 const base::DictionaryValue* expected_result, 155 const base::DictionaryValue* expected_result,
110 DBusMethodCallStatus call_status, 156 DBusMethodCallStatus call_status,
111 const base::DictionaryValue& result); 157 const base::DictionaryValue& result);
158 static void ExpectDictionaryValueResultWithoutStatus(
159 const base::DictionaryValue* expected_result,
160 const base::DictionaryValue& result);
112 161
113 // A message loop to emulate asynchronous behavior. 162 // A message loop to emulate asynchronous behavior.
114 MessageLoop message_loop_; 163 MessageLoop message_loop_;
115 // The mock bus. 164 // The mock bus.
116 scoped_refptr<dbus::MockBus> mock_bus_; 165 scoped_refptr<dbus::MockBus> mock_bus_;
117 166
118 private: 167 private:
119 // Checks the requested interface name and signal name. 168 // Checks the requested interface name and signal name.
120 // Used to implement the mock proxy. 169 // Used to implement the mock proxy.
121 void OnConnectToSignal( 170 void OnConnectToSignal(
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 std::string expected_method_name_; 205 std::string expected_method_name_;
157 // The response which the mock object proxy returns. 206 // The response which the mock object proxy returns.
158 dbus::Response* response_; 207 dbus::Response* response_;
159 // A callback to intercept and check the method call arguments. 208 // A callback to intercept and check the method call arguments.
160 ArgumentCheckCallback argument_checker_; 209 ArgumentCheckCallback argument_checker_;
161 }; 210 };
162 211
163 } // namespace chromeos 212 } // namespace chromeos
164 213
165 #endif // CHROMEOS_DBUS_SHILL_CLIENT_UNITTEST_BASE_H_ 214 #endif // CHROMEOS_DBUS_SHILL_CLIENT_UNITTEST_BASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698