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

Side by Side Diff: dbus/mock_unittest.cc

Issue 563763004: Add ObjectProxy::CallMethodAndBlockWithErrorDetails methods (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed review comment Created 6 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
« no previous file with comments | « dbus/mock_object_proxy.h ('k') | dbus/object_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "dbus/message.h" 11 #include "dbus/message.h"
12 #include "dbus/mock_bus.h" 12 #include "dbus/mock_bus.h"
13 #include "dbus/mock_exported_object.h" 13 #include "dbus/mock_exported_object.h"
14 #include "dbus/mock_object_proxy.h" 14 #include "dbus/mock_object_proxy.h"
15 #include "dbus/object_path.h" 15 #include "dbus/object_path.h"
16 #include "dbus/scoped_dbus_error.h"
16 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 19
19 using ::testing::_; 20 using ::testing::_;
20 using ::testing::Invoke; 21 using ::testing::Invoke;
21 using ::testing::Return; 22 using ::testing::Return;
22 using ::testing::Unused; 23 using ::testing::Unused;
23 24
24 namespace dbus { 25 namespace dbus {
25 26
(...skipping 11 matching lines...) Expand all
37 // Create a mock proxy. 38 // Create a mock proxy.
38 mock_proxy_ = new MockObjectProxy( 39 mock_proxy_ = new MockObjectProxy(
39 mock_bus_.get(), 40 mock_bus_.get(),
40 "org.chromium.TestService", 41 "org.chromium.TestService",
41 ObjectPath("/org/chromium/TestObject")); 42 ObjectPath("/org/chromium/TestObject"));
42 43
43 // Set an expectation so mock_proxy's CallMethodAndBlock() will use 44 // Set an expectation so mock_proxy's CallMethodAndBlock() will use
44 // CreateMockProxyResponse() to return responses. 45 // CreateMockProxyResponse() to return responses.
45 EXPECT_CALL(*mock_proxy_.get(), MockCallMethodAndBlock(_, _)) 46 EXPECT_CALL(*mock_proxy_.get(), MockCallMethodAndBlock(_, _))
46 .WillRepeatedly(Invoke(this, &MockTest::CreateMockProxyResponse)); 47 .WillRepeatedly(Invoke(this, &MockTest::CreateMockProxyResponse));
48 EXPECT_CALL(*mock_proxy_.get(),
49 MockCallMethodAndBlockWithErrorDetails(_, _, _))
50 .WillRepeatedly(
51 Invoke(this, &MockTest::CreateMockProxyResponseWithErrorDetails));
47 52
48 // Set an expectation so mock_proxy's CallMethod() will use 53 // Set an expectation so mock_proxy's CallMethod() will use
49 // HandleMockProxyResponseWithMessageLoop() to return responses. 54 // HandleMockProxyResponseWithMessageLoop() to return responses.
50 EXPECT_CALL(*mock_proxy_.get(), CallMethod(_, _, _)).WillRepeatedly( 55 EXPECT_CALL(*mock_proxy_.get(), CallMethod(_, _, _)).WillRepeatedly(
51 Invoke(this, &MockTest::HandleMockProxyResponseWithMessageLoop)); 56 Invoke(this, &MockTest::HandleMockProxyResponseWithMessageLoop));
52 57
53 // Set an expectation so mock_bus's GetObjectProxy() for the given 58 // Set an expectation so mock_bus's GetObjectProxy() for the given
54 // service name and the object path will return mock_proxy_. 59 // service name and the object path will return mock_proxy_.
55 EXPECT_CALL(*mock_bus_.get(), 60 EXPECT_CALL(*mock_bus_.get(),
56 GetObjectProxy("org.chromium.TestService", 61 GetObjectProxy("org.chromium.TestService",
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 MessageWriter writer(response.get()); 102 MessageWriter writer(response.get());
98 writer.AppendString(text_message); 103 writer.AppendString(text_message);
99 return response.release(); 104 return response.release();
100 } 105 }
101 } 106 }
102 107
103 LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); 108 LOG(ERROR) << "Unexpected method call: " << method_call->ToString();
104 return NULL; 109 return NULL;
105 } 110 }
106 111
112 Response* CreateMockProxyResponseWithErrorDetails(
113 MethodCall* method_call, int timeout_ms, ScopedDBusError* error) {
114 dbus_set_error(error->get(), DBUS_ERROR_NOT_SUPPORTED, "Not implemented");
115 return NULL;
116 }
117
107 // Creates a response and runs the given response callback in the 118 // Creates a response and runs the given response callback in the
108 // message loop with the response. Used to implement for |mock_proxy_|. 119 // message loop with the response. Used to implement for |mock_proxy_|.
109 void HandleMockProxyResponseWithMessageLoop( 120 void HandleMockProxyResponseWithMessageLoop(
110 MethodCall* method_call, 121 MethodCall* method_call,
111 int timeout_ms, 122 int timeout_ms,
112 ObjectProxy::ResponseCallback response_callback) { 123 ObjectProxy::ResponseCallback response_callback) {
113 Response* response = CreateMockProxyResponse(method_call, timeout_ms); 124 Response* response = CreateMockProxyResponse(method_call, timeout_ms);
114 message_loop_.PostTask(FROM_HERE, 125 message_loop_.PostTask(FROM_HERE,
115 base::Bind(&MockTest::RunResponseCallback, 126 base::Bind(&MockTest::RunResponseCallback,
116 base::Unretained(this), 127 base::Unretained(this),
117 response_callback, 128 response_callback,
118 response)); 129 response));
119 } 130 }
120 131
121 // Runs the given response callback with the given response. 132 // Runs the given response callback with the given response.
122 void RunResponseCallback( 133 void RunResponseCallback(
123 ObjectProxy::ResponseCallback response_callback, 134 ObjectProxy::ResponseCallback response_callback,
124 Response* response) { 135 Response* response) {
125 response_callback.Run(response); 136 response_callback.Run(response);
126 delete response; 137 delete response;
127 } 138 }
128 }; 139 };
129 140
130 // This test demonstrates how to mock a synchronos method call using the 141 // This test demonstrates how to mock a synchronous method call using the
131 // mock classes. 142 // mock classes.
132 TEST_F(MockTest, CallMethodAndBlock) { 143 TEST_F(MockTest, CallMethodAndBlock) {
133 const char kHello[] = "Hello"; 144 const char kHello[] = "Hello";
134 // Get an object proxy from the mock bus. 145 // Get an object proxy from the mock bus.
135 ObjectProxy* proxy = mock_bus_->GetObjectProxy( 146 ObjectProxy* proxy = mock_bus_->GetObjectProxy(
136 "org.chromium.TestService", 147 "org.chromium.TestService",
137 ObjectPath("/org/chromium/TestObject")); 148 ObjectPath("/org/chromium/TestObject"));
138 149
139 // Create a method call. 150 // Create a method call.
140 MethodCall method_call("org.chromium.TestInterface", "Echo"); 151 MethodCall method_call("org.chromium.TestInterface", "Echo");
141 MessageWriter writer(&method_call); 152 MessageWriter writer(&method_call);
142 writer.AppendString(kHello); 153 writer.AppendString(kHello);
143 154
144 // Call the method. 155 // Call the method.
145 scoped_ptr<Response> response( 156 scoped_ptr<Response> response(
146 proxy->CallMethodAndBlock(&method_call, 157 proxy->CallMethodAndBlock(&method_call,
147 ObjectProxy::TIMEOUT_USE_DEFAULT)); 158 ObjectProxy::TIMEOUT_USE_DEFAULT));
148 159
149 // Check the response. 160 // Check the response.
150 ASSERT_TRUE(response.get()); 161 ASSERT_TRUE(response.get());
151 MessageReader reader(response.get()); 162 MessageReader reader(response.get());
152 std::string text_message; 163 std::string text_message;
153 ASSERT_TRUE(reader.PopString(&text_message)); 164 ASSERT_TRUE(reader.PopString(&text_message));
154 // The text message should be echo'ed back. 165 // The text message should be echo'ed back.
155 EXPECT_EQ(kHello, text_message); 166 EXPECT_EQ(kHello, text_message);
156 } 167 }
157 168
158 // This test demonstrates how to mock an asynchronos method call using the 169 TEST_F(MockTest, CallMethodAndBlockWithErrorDetails) {
170 // Get an object proxy from the mock bus.
171 ObjectProxy* proxy = mock_bus_->GetObjectProxy(
172 "org.chromium.TestService",
173 ObjectPath("/org/chromium/TestObject"));
174
175 // Create a method call.
176 MethodCall method_call("org.chromium.TestInterface", "Echo");
177
178 ScopedDBusError error;
179 // Call the method.
180 scoped_ptr<Response> response(
181 proxy->CallMethodAndBlockWithErrorDetails(
182 &method_call, ObjectProxy::TIMEOUT_USE_DEFAULT, &error));
183
184 // Check the response.
185 ASSERT_FALSE(response.get());
186 ASSERT_TRUE(error.is_set());
187 EXPECT_STREQ(DBUS_ERROR_NOT_SUPPORTED, error.name());
188 EXPECT_STREQ("Not implemented", error.message());
189 }
190
191 // This test demonstrates how to mock an asynchronous method call using the
159 // mock classes. 192 // mock classes.
160 TEST_F(MockTest, CallMethod) { 193 TEST_F(MockTest, CallMethod) {
161 const char kHello[] = "hello"; 194 const char kHello[] = "hello";
162 195
163 // Get an object proxy from the mock bus. 196 // Get an object proxy from the mock bus.
164 ObjectProxy* proxy = mock_bus_->GetObjectProxy( 197 ObjectProxy* proxy = mock_bus_->GetObjectProxy(
165 "org.chromium.TestService", 198 "org.chromium.TestService",
166 ObjectPath("/org/chromium/TestObject")); 199 ObjectPath("/org/chromium/TestObject"));
167 200
168 // Create a method call. 201 // Create a method call.
169 MethodCall method_call("org.chromium.TestInterface", "Echo"); 202 MethodCall method_call("org.chromium.TestInterface", "Echo");
170 MessageWriter writer(&method_call); 203 MessageWriter writer(&method_call);
171 writer.AppendString(kHello); 204 writer.AppendString(kHello);
172 205
173 // Call the method. 206 // Call the method.
174 run_loop_.reset(new base::RunLoop); 207 run_loop_.reset(new base::RunLoop);
175 proxy->CallMethod(&method_call, 208 proxy->CallMethod(&method_call,
176 ObjectProxy::TIMEOUT_USE_DEFAULT, 209 ObjectProxy::TIMEOUT_USE_DEFAULT,
177 base::Bind(&MockTest::OnResponse, 210 base::Bind(&MockTest::OnResponse,
178 base::Unretained(this))); 211 base::Unretained(this)));
179 // Run the message loop to let OnResponse be called. 212 // Run the message loop to let OnResponse be called.
180 run_loop_->Run(); 213 run_loop_->Run();
181 214
182 EXPECT_EQ(kHello, response_string_); 215 EXPECT_EQ(kHello, response_string_);
183 } 216 }
184 217
185 } // namespace dbus 218 } // namespace dbus
OLDNEW
« no previous file with comments | « dbus/mock_object_proxy.h ('k') | dbus/object_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698