OLD | NEW |
---|---|
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 "chromeos/dbus/ibus/ibus_config_client.h" | 5 #include "chromeos/dbus/ibus/ibus_config_client.h" |
6 | 6 |
7 #include <vector> | |
8 | |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
8 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
9 #include "base/values.h" | 11 #include "base/values.h" |
10 #include "chromeos/dbus/ibus/ibus_constants.h" | 12 #include "chromeos/dbus/ibus/ibus_constants.h" |
11 #include "dbus/message.h" | 13 #include "dbus/message.h" |
12 #include "dbus/mock_bus.h" | 14 #include "dbus/mock_bus.h" |
13 #include "dbus/mock_object_proxy.h" | 15 #include "dbus/mock_object_proxy.h" |
14 #include "dbus/object_path.h" | 16 #include "dbus/object_path.h" |
15 #include "dbus/values_util.h" | 17 #include "dbus/values_util.h" |
16 #include "testing/gmock/include/gmock/gmock.h" | 18 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 13 matching lines...) Expand all Loading... | |
30 }; | 32 }; |
31 } // namespace | 33 } // namespace |
32 | 34 |
33 namespace chromeos { | 35 namespace chromeos { |
34 | 36 |
35 class MockErrorCallback { | 37 class MockErrorCallback { |
36 public: | 38 public: |
37 MOCK_METHOD0(Run, void()); | 39 MOCK_METHOD0(Run, void()); |
38 }; | 40 }; |
39 | 41 |
42 class MockOnIBusConfigReadyCallback { | |
43 public: | |
44 MOCK_METHOD0(Run, void()); | |
45 }; | |
46 | |
40 // The base class of each type specified SetValue function handler. This class | 47 // The base class of each type specified SetValue function handler. This class |
41 // checks "section" and "key" field in SetValue message and callback success or | 48 // checks "section" and "key" field in SetValue message and callback success or |
42 // error callback based on given |success| flag. | 49 // error callback based on given |success| flag. |
43 class SetValueVerifierBase { | 50 class SetValueVerifierBase { |
44 public: | 51 public: |
45 SetValueVerifierBase(const std::string& expected_section, | 52 SetValueVerifierBase(const std::string& expected_section, |
46 const std::string& expected_key, | 53 const std::string& expected_key, |
47 HandlerBehavior behavior) | 54 HandlerBehavior behavior) |
48 : expected_section_(expected_section), | 55 : expected_section_(expected_section), |
49 expected_key_(expected_key), | 56 expected_key_(expected_key), |
50 behavior_(behavior) {} | 57 behavior_(behavior) {} |
51 | 58 |
59 virtual ~SetValueVerifierBase() {} | |
60 | |
52 // Handles SetValue method call. This function checkes "section" and "key" | 61 // Handles SetValue method call. This function checkes "section" and "key" |
53 // field. For the "value" field, subclass checks it with over riding | 62 // field. For the "value" field, subclass checks it with over riding |
54 // VeirfyVariant member function. | 63 // VeirfyVariant member function. |
55 void Run(dbus::MethodCall* method_call, | 64 void Run(dbus::MethodCall* method_call, |
56 int timeout_ms, | 65 int timeout_ms, |
57 const dbus::ObjectProxy::ResponseCallback& callback, | 66 const dbus::ObjectProxy::ResponseCallback& callback, |
58 const dbus::ObjectProxy::ErrorCallback& error_callback) { | 67 const dbus::ObjectProxy::ErrorCallback& error_callback) { |
59 dbus::MessageReader reader(method_call); | 68 dbus::MessageReader reader(method_call); |
60 std::string section; | 69 std::string section; |
61 std::string key; | 70 std::string key; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
185 } | 194 } |
186 EXPECT_FALSE(array_reader.HasMoreData()); | 195 EXPECT_FALSE(array_reader.HasMoreData()); |
187 } | 196 } |
188 | 197 |
189 private: | 198 private: |
190 const std::vector<std::string>& expected_value_; | 199 const std::vector<std::string>& expected_value_; |
191 | 200 |
192 DISALLOW_COPY_AND_ASSIGN(SetStringListValueHandler); | 201 DISALLOW_COPY_AND_ASSIGN(SetStringListValueHandler); |
193 }; | 202 }; |
194 | 203 |
204 // The class verifies GetNameOwner method call and emits response callback | |
205 // asynchronouslly. | |
206 class MockGetNameOwnerMethodCallHandler { | |
207 public: | |
208 MockGetNameOwnerMethodCallHandler() {} | |
209 | |
210 // Handles CallMethod function. | |
211 void Run(dbus::MethodCall* method_call, | |
212 int timeout_ms, | |
213 const dbus::ObjectProxy::ResponseCallback& callback) { | |
214 dbus::MessageReader reader(method_call); | |
215 std::string target_name; | |
216 EXPECT_TRUE(reader.PopString(&target_name)); | |
217 EXPECT_EQ(ibus::config::kServiceName, target_name); | |
218 EXPECT_FALSE(reader.HasMoreData()); | |
219 | |
220 callback_ = callback; | |
221 } | |
222 | |
223 // Invokes reply with given |callback_| in Run method. | |
224 void EmitReplyCallback(const std::string& owner) { | |
225 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | |
226 dbus::MessageWriter writer(response.get()); | |
227 writer.AppendString(owner); | |
228 callback_.Run(response.get()); | |
229 } | |
230 | |
231 private: | |
232 dbus::ObjectProxy::ResponseCallback callback_; | |
233 | |
234 DISALLOW_COPY_AND_ASSIGN(MockGetNameOwnerMethodCallHandler); | |
235 }; | |
236 | |
237 | |
238 // The class emulate GetNameOwner signal. | |
239 class NameOwnerChangedHandler { | |
240 public: | |
241 NameOwnerChangedHandler() {} | |
242 | |
243 // SetNameOwnerChangedCallback mock function. | |
244 void SetNameOwnerChangedCallback( | |
245 dbus::ObjectProxy::SignalCallback callback) { | |
246 callback_ = callback; | |
247 } | |
248 | |
249 // Invokes reply with given |callback_| in Run method. | |
250 void InvokeSignal(const std::string& name, | |
251 const std::string& old_owner, | |
252 const std::string& new_owner) { | |
253 dbus::Signal signal(ibus::kDBusInterface, ibus::kGetNameOwnerMethod); | |
254 dbus::MessageWriter writer(&signal); | |
255 writer.AppendString(name); | |
256 writer.AppendString(old_owner); | |
257 writer.AppendString(new_owner); | |
258 callback_.Run(&signal); | |
259 } | |
260 | |
261 private: | |
262 dbus::ObjectProxy::SignalCallback callback_; | |
263 | |
264 DISALLOW_COPY_AND_ASSIGN(NameOwnerChangedHandler); | |
265 }; | |
266 | |
267 | |
195 class IBusConfigClientTest : public testing::Test { | 268 class IBusConfigClientTest : public testing::Test { |
196 public: | 269 public: |
197 IBusConfigClientTest() {} | 270 IBusConfigClientTest() {} |
271 | |
198 protected: | 272 protected: |
199 virtual void SetUp() OVERRIDE { | 273 virtual void SetUp() OVERRIDE { |
200 dbus::Bus::Options options; | 274 dbus::Bus::Options options; |
201 mock_bus_ = new dbus::MockBus(options); | 275 mock_bus_ = new dbus::MockBus(options); |
202 mock_proxy_ = new dbus::MockObjectProxy(mock_bus_.get(), | 276 mock_proxy_ = new dbus::MockObjectProxy(mock_bus_.get(), |
203 ibus::kServiceName, | 277 ibus::kServiceName, |
204 dbus::ObjectPath( | 278 dbus::ObjectPath( |
205 ibus::config::kServicePath)); | 279 ibus::config::kServicePath)); |
206 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName, | |
207 dbus::ObjectPath( | |
208 ibus::config::kServicePath))) | |
209 .WillOnce(Return(mock_proxy_.get())); | |
210 | |
211 EXPECT_CALL(*mock_bus_, ShutdownAndBlock()); | 280 EXPECT_CALL(*mock_bus_, ShutdownAndBlock()); |
212 client_.reset(IBusConfigClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION, | 281 client_.reset(IBusConfigClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION, |
213 mock_bus_)); | 282 mock_bus_)); |
283 | |
284 // Surpress uninteresting mock function call warning. | |
285 EXPECT_CALL(*mock_bus_.get(), AssertOnOriginThread()) | |
286 .WillRepeatedly(Return()); | |
214 } | 287 } |
215 | 288 |
216 virtual void TearDown() OVERRIDE { | 289 virtual void TearDown() OVERRIDE { |
217 mock_bus_->ShutdownAndBlock(); | 290 mock_bus_->ShutdownAndBlock(); |
218 } | 291 } |
219 | 292 |
293 // Initialize |client_| with success configuration. | |
294 void SycnhronousInitialize() { | |
satorux1
2012/11/28 06:43:12
InitializeSync() ? Please also add some comment ex
Seigo Nonaka
2012/11/28 07:00:37
Done.
| |
295 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName, | |
296 dbus::ObjectPath( | |
297 ibus::config::kServicePath))) | |
298 .WillOnce(Return(mock_proxy_.get())); | |
299 | |
300 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy | |
301 = new dbus::MockObjectProxy(mock_bus_.get(), | |
302 ibus::kServiceName, | |
303 dbus::ObjectPath(ibus::kDBusObjectPath)); | |
304 EXPECT_CALL(*mock_bus_, | |
305 GetObjectProxy(ibus::kServiceName, | |
306 dbus::ObjectPath(ibus::kDBusObjectPath))) | |
307 .WillOnce(Return(mock_dbus_proxy.get())); | |
308 | |
309 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call; | |
310 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _)) | |
311 .WillOnce(Invoke(&mock_get_name_owner_method_call, | |
312 &MockGetNameOwnerMethodCallHandler::Run)); | |
313 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_)); | |
314 client_->AsyncInitialize(base::Bind(&base::DoNothing)); | |
315 mock_get_name_owner_method_call.EmitReplyCallback(":0.1"); | |
316 } | |
317 | |
318 | |
220 // The IBus config client to be tested. | 319 // The IBus config client to be tested. |
221 scoped_ptr<IBusConfigClient> client_; | 320 scoped_ptr<IBusConfigClient> client_; |
222 | 321 |
223 // A message loop to emulate asynchronous behavior. | 322 // A message loop to emulate asynchronous behavior. |
224 MessageLoop message_loop_; | 323 MessageLoop message_loop_; |
225 scoped_refptr<dbus::MockBus> mock_bus_; | 324 scoped_refptr<dbus::MockBus> mock_bus_; |
226 scoped_refptr<dbus::MockObjectProxy> mock_proxy_; | 325 scoped_refptr<dbus::MockObjectProxy> mock_proxy_; |
227 }; | 326 }; |
228 | 327 |
229 TEST_F(IBusConfigClientTest, SetStringValueTest) { | 328 TEST_F(IBusConfigClientTest, SetStringValueTest) { |
230 // Set expectations | 329 // Set expectations |
330 SycnhronousInitialize(); | |
231 const char value[] = "value"; | 331 const char value[] = "value"; |
232 SetStringValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); | 332 SetStringValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); |
233 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 333 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
234 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 334 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
235 MockErrorCallback error_callback; | 335 MockErrorCallback error_callback; |
236 EXPECT_CALL(error_callback, Run()).Times(0); | 336 EXPECT_CALL(error_callback, Run()).Times(0); |
237 | 337 |
238 // Call SetStringValue. | 338 // Call SetStringValue. |
239 client_->SetStringValue(kKey, kSection, value, | 339 client_->SetStringValue(kKey, kSection, value, |
240 base::Bind(&MockErrorCallback::Run, | 340 base::Bind(&MockErrorCallback::Run, |
241 base::Unretained(&error_callback))); | 341 base::Unretained(&error_callback))); |
242 } | 342 } |
243 | 343 |
244 TEST_F(IBusConfigClientTest, SetStringValueTest_Fail) { | 344 TEST_F(IBusConfigClientTest, SetStringValueTest_Fail) { |
245 // Set expectations | 345 // Set expectations |
346 SycnhronousInitialize(); | |
246 const char value[] = "value"; | 347 const char value[] = "value"; |
247 SetStringValueHandler handler(kSection, kKey, value, HANDLER_FAIL); | 348 SetStringValueHandler handler(kSection, kKey, value, HANDLER_FAIL); |
248 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 349 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
249 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 350 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
250 MockErrorCallback error_callback; | 351 MockErrorCallback error_callback; |
251 EXPECT_CALL(error_callback, Run()); | 352 EXPECT_CALL(error_callback, Run()); |
252 | 353 |
253 // Call SetStringValue. | 354 // Call SetStringValue. |
254 client_->SetStringValue(kKey, kSection, value, | 355 client_->SetStringValue(kKey, kSection, value, |
255 base::Bind(&MockErrorCallback::Run, | 356 base::Bind(&MockErrorCallback::Run, |
256 base::Unretained(&error_callback))); | 357 base::Unretained(&error_callback))); |
257 } | 358 } |
258 | 359 |
259 TEST_F(IBusConfigClientTest, SetIntValueTest) { | 360 TEST_F(IBusConfigClientTest, SetIntValueTest) { |
260 // Set expectations | 361 // Set expectations |
362 SycnhronousInitialize(); | |
261 const int value = 1234; | 363 const int value = 1234; |
262 SetIntValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); | 364 SetIntValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); |
263 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 365 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
264 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 366 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
265 MockErrorCallback error_callback; | 367 MockErrorCallback error_callback; |
266 EXPECT_CALL(error_callback, Run()).Times(0); | 368 EXPECT_CALL(error_callback, Run()).Times(0); |
267 | 369 |
268 // Call SetIntValue. | 370 // Call SetIntValue. |
269 client_->SetIntValue(kKey, kSection, value, | 371 client_->SetIntValue(kKey, kSection, value, |
270 base::Bind(&MockErrorCallback::Run, | 372 base::Bind(&MockErrorCallback::Run, |
271 base::Unretained(&error_callback))); | 373 base::Unretained(&error_callback))); |
272 } | 374 } |
273 | 375 |
274 TEST_F(IBusConfigClientTest, SetIntValueTest_Fail) { | 376 TEST_F(IBusConfigClientTest, SetIntValueTest_Fail) { |
275 // Set expectations | 377 // Set expectations |
378 SycnhronousInitialize(); | |
276 const int value = 1234; | 379 const int value = 1234; |
277 SetIntValueHandler handler(kSection, kKey, value, HANDLER_FAIL); | 380 SetIntValueHandler handler(kSection, kKey, value, HANDLER_FAIL); |
278 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 381 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
279 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 382 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
280 MockErrorCallback error_callback; | 383 MockErrorCallback error_callback; |
281 EXPECT_CALL(error_callback, Run()); | 384 EXPECT_CALL(error_callback, Run()); |
282 | 385 |
283 // Call SetIntValue. | 386 // Call SetIntValue. |
284 client_->SetIntValue(kKey, kSection, value, | 387 client_->SetIntValue(kKey, kSection, value, |
285 base::Bind(&MockErrorCallback::Run, | 388 base::Bind(&MockErrorCallback::Run, |
286 base::Unretained(&error_callback))); | 389 base::Unretained(&error_callback))); |
287 } | 390 } |
288 | 391 |
289 TEST_F(IBusConfigClientTest, SetBoolValueTest) { | 392 TEST_F(IBusConfigClientTest, SetBoolValueTest) { |
290 // Set expectations | 393 // Set expectations |
394 SycnhronousInitialize(); | |
291 const bool value = true; | 395 const bool value = true; |
292 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); | 396 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); |
293 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 397 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
294 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 398 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
295 MockErrorCallback error_callback; | 399 MockErrorCallback error_callback; |
296 EXPECT_CALL(error_callback, Run()).Times(0); | 400 EXPECT_CALL(error_callback, Run()).Times(0); |
297 | 401 |
298 // Call SetBoolValue. | 402 // Call SetBoolValue. |
299 client_->SetBoolValue(kKey, kSection, value, | 403 client_->SetBoolValue(kKey, kSection, value, |
300 base::Bind(&MockErrorCallback::Run, | 404 base::Bind(&MockErrorCallback::Run, |
301 base::Unretained(&error_callback))); | 405 base::Unretained(&error_callback))); |
302 } | 406 } |
303 | 407 |
304 TEST_F(IBusConfigClientTest, SetBoolValueTest_Fail) { | 408 TEST_F(IBusConfigClientTest, SetBoolValueTest_Fail) { |
305 // Set expectations | 409 // Set expectations |
410 SycnhronousInitialize(); | |
306 const bool value = true; | 411 const bool value = true; |
307 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL); | 412 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL); |
308 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 413 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
309 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 414 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
310 MockErrorCallback error_callback; | 415 MockErrorCallback error_callback; |
311 EXPECT_CALL(error_callback, Run()); | 416 EXPECT_CALL(error_callback, Run()); |
312 | 417 |
313 // Call SetBoolValue. | 418 // Call SetBoolValue. |
314 client_->SetBoolValue(kKey, kSection, value, | 419 client_->SetBoolValue(kKey, kSection, value, |
315 base::Bind(&MockErrorCallback::Run, | 420 base::Bind(&MockErrorCallback::Run, |
316 base::Unretained(&error_callback))); | 421 base::Unretained(&error_callback))); |
317 } | 422 } |
318 | 423 |
319 TEST_F(IBusConfigClientTest, SetStringListValueTest) { | 424 TEST_F(IBusConfigClientTest, SetStringListValueTest) { |
320 // Set expectations | 425 // Set expectations |
426 SycnhronousInitialize(); | |
321 std::vector<std::string> value; | 427 std::vector<std::string> value; |
322 value.push_back("Sample value 1"); | 428 value.push_back("Sample value 1"); |
323 value.push_back("Sample value 2"); | 429 value.push_back("Sample value 2"); |
324 | 430 |
325 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); | 431 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_SUCCESS); |
326 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 432 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
327 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 433 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
328 MockErrorCallback error_callback; | 434 MockErrorCallback error_callback; |
329 EXPECT_CALL(error_callback, Run()).Times(0); | 435 EXPECT_CALL(error_callback, Run()).Times(0); |
330 | 436 |
331 // Call SetStringListValue. | 437 // Call SetStringListValue. |
332 client_->SetStringListValue(kKey, kSection, value, | 438 client_->SetStringListValue(kKey, kSection, value, |
333 base::Bind(&MockErrorCallback::Run, | 439 base::Bind(&MockErrorCallback::Run, |
334 base::Unretained(&error_callback))); | 440 base::Unretained(&error_callback))); |
335 } | 441 } |
336 | 442 |
337 TEST_F(IBusConfigClientTest, SetStringListValueTest_Fail) { | 443 TEST_F(IBusConfigClientTest, SetStringListValueTest_Fail) { |
338 // Set expectations | 444 // Set expectations |
445 SycnhronousInitialize(); | |
339 std::vector<std::string> value; | 446 std::vector<std::string> value; |
340 value.push_back("Sample value 1"); | 447 value.push_back("Sample value 1"); |
341 value.push_back("Sample value 2"); | 448 value.push_back("Sample value 2"); |
342 | 449 |
343 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_FAIL); | 450 SetStringListValueHandler handler(kSection, kKey, value, HANDLER_FAIL); |
344 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | 451 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) |
345 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | 452 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); |
346 MockErrorCallback error_callback; | 453 MockErrorCallback error_callback; |
347 EXPECT_CALL(error_callback, Run()); | 454 EXPECT_CALL(error_callback, Run()); |
348 | 455 |
349 // Call SetStringListValue. | 456 // Call SetStringListValue. |
350 client_->SetStringListValue(kKey, kSection, value, | 457 client_->SetStringListValue(kKey, kSection, value, |
351 base::Bind(&MockErrorCallback::Run, | 458 base::Bind(&MockErrorCallback::Run, |
352 base::Unretained(&error_callback))); | 459 base::Unretained(&error_callback))); |
353 } | 460 } |
354 | 461 |
462 TEST_F(IBusConfigClientTest, IBusConfigDaemon_NotAvailableTest) { | |
463 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call; | |
464 | |
465 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName, | |
466 dbus::ObjectPath( | |
467 ibus::config::kServicePath))) | |
468 .Times(0); | |
469 | |
470 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy | |
471 = new dbus::MockObjectProxy(mock_bus_.get(), | |
472 ibus::kServiceName, | |
473 dbus::ObjectPath(ibus::kDBusObjectPath)); | |
474 EXPECT_CALL(*mock_bus_, | |
475 GetObjectProxy(ibus::kServiceName, | |
476 dbus::ObjectPath(ibus::kDBusObjectPath))) | |
477 .WillOnce(Return(mock_dbus_proxy.get())); | |
478 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _)) | |
479 .WillOnce(Invoke(&mock_get_name_owner_method_call, | |
480 &MockGetNameOwnerMethodCallHandler::Run)); | |
481 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_)); | |
482 client_->AsyncInitialize(base::Bind(&base::DoNothing)); | |
483 | |
484 // Passing empty string means there is no owner, thus ibus-config daemon is | |
485 // not ready. | |
486 mock_get_name_owner_method_call.EmitReplyCallback(""); | |
487 | |
488 // Make sure not crashing by function call without initialize. | |
489 const bool value = true; | |
490 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)).Times(0); | |
491 MockErrorCallback error_callback; | |
492 EXPECT_CALL(error_callback, Run()).Times(0); | |
493 client_->SetBoolValue(kKey, kSection, value, | |
494 base::Bind(&MockErrorCallback::Run, | |
495 base::Unretained(&error_callback))); | |
496 } | |
497 | |
498 TEST_F(IBusConfigClientTest, IBusConfigDaemon_SlowInitializeTest) { | |
499 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call; | |
500 | |
501 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName, | |
502 dbus::ObjectPath( | |
503 ibus::config::kServicePath))) | |
504 .WillOnce(Return(mock_proxy_.get())); | |
505 | |
506 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy | |
507 = new dbus::MockObjectProxy(mock_bus_.get(), | |
508 ibus::kServiceName, | |
509 dbus::ObjectPath(ibus::kDBusObjectPath)); | |
510 EXPECT_CALL(*mock_bus_, | |
511 GetObjectProxy(ibus::kServiceName, | |
512 dbus::ObjectPath(ibus::kDBusObjectPath))) | |
513 .WillOnce(Return(mock_dbus_proxy.get())); | |
514 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _)) | |
515 .WillOnce(Invoke(&mock_get_name_owner_method_call, | |
516 &MockGetNameOwnerMethodCallHandler::Run)); | |
517 NameOwnerChangedHandler name_owner_changed_handler; | |
518 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_)) | |
519 .WillOnce(Invoke(&name_owner_changed_handler, | |
520 &NameOwnerChangedHandler::SetNameOwnerChangedCallback)); | |
521 | |
522 client_->AsyncInitialize(base::Bind(&base::DoNothing)); | |
523 | |
524 // Passing empty string means there is no owner, thus ibus-config daemon is | |
525 // not ready. | |
526 mock_get_name_owner_method_call.EmitReplyCallback(""); | |
527 | |
528 // Fire NameOwnerChanged signal to emulate ibus-config daemon was acquired | |
529 // well-known name. | |
530 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName, | |
531 "", | |
532 ":0.1"); | |
533 | |
534 // Make sure it is possible to emit method calls. | |
535 const bool value = true; | |
536 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL); | |
537 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | |
538 .WillOnce(Invoke(&handler, &SetValueVerifierBase::Run)); | |
539 MockErrorCallback error_callback; | |
540 EXPECT_CALL(error_callback, Run()); | |
541 | |
542 // Call SetBoolValue. | |
543 client_->SetBoolValue(kKey, kSection, value, | |
544 base::Bind(&MockErrorCallback::Run, | |
545 base::Unretained(&error_callback))); | |
546 } | |
547 | |
548 TEST_F(IBusConfigClientTest, IBusConfigDaemon_ShutdownTest) { | |
549 MockGetNameOwnerMethodCallHandler mock_get_name_owner_method_call; | |
550 | |
551 EXPECT_CALL(*mock_bus_, GetObjectProxy(ibus::kServiceName, | |
552 dbus::ObjectPath( | |
553 ibus::config::kServicePath))) | |
554 .WillRepeatedly(Return(mock_proxy_.get())); | |
555 | |
556 scoped_refptr<dbus::MockObjectProxy> mock_dbus_proxy | |
557 = new dbus::MockObjectProxy(mock_bus_.get(), | |
558 ibus::kServiceName, | |
559 dbus::ObjectPath(ibus::kDBusObjectPath)); | |
560 EXPECT_CALL(*mock_bus_, | |
561 GetObjectProxy(ibus::kServiceName, | |
562 dbus::ObjectPath(ibus::kDBusObjectPath))) | |
563 .WillOnce(Return(mock_dbus_proxy.get())); | |
564 EXPECT_CALL(*mock_dbus_proxy, CallMethod(_, _, _)) | |
565 .WillOnce(Invoke(&mock_get_name_owner_method_call, | |
566 &MockGetNameOwnerMethodCallHandler::Run)); | |
567 NameOwnerChangedHandler name_owner_changed_handler; | |
568 EXPECT_CALL(*mock_dbus_proxy, SetNameOwnerChangedCallback(_)) | |
569 .WillOnce(Invoke(&name_owner_changed_handler, | |
570 &NameOwnerChangedHandler::SetNameOwnerChangedCallback)); | |
571 | |
572 client_->AsyncInitialize(base::Bind(&base::DoNothing)); | |
573 | |
574 const bool value = true; | |
575 SetBoolValueHandler handler(kSection, kKey, value, HANDLER_FAIL); | |
576 EXPECT_CALL(*mock_proxy_, CallMethodWithErrorCallback(_, _, _, _)) | |
577 .WillRepeatedly(Invoke(&handler, &SetValueVerifierBase::Run)); | |
578 MockErrorCallback error_callback; | |
579 EXPECT_CALL(error_callback, Run()).WillRepeatedly(Return()); | |
580 | |
581 // Initialize succeeded sucessfully. | |
582 mock_get_name_owner_method_call.EmitReplyCallback(":0.2"); | |
583 | |
584 // Call SetBoolValue. | |
585 client_->SetBoolValue(kKey, kSection, value, | |
586 base::Bind(&MockErrorCallback::Run, | |
587 base::Unretained(&error_callback))); | |
588 | |
589 // Fire NameOwnerChanged signal to emulate shutting down the ibus-config | |
590 // daemon. | |
591 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName, | |
592 ":0.1", | |
593 ""); | |
594 | |
595 // Make sure not crashing on emitting method call. | |
596 client_->SetBoolValue(kKey, kSection, value, | |
597 base::Bind(&MockErrorCallback::Run, | |
598 base::Unretained(&error_callback))); | |
599 | |
600 // Fire NameOwnerChanged signal to emulate that ibus-daemon is revived. | |
601 name_owner_changed_handler.InvokeSignal(ibus::config::kServiceName, | |
602 "", | |
603 ":0.2"); | |
604 | |
605 // Make sure it is possible to emit method calls. | |
606 client_->SetBoolValue(kKey, kSection, value, | |
607 base::Bind(&MockErrorCallback::Run, | |
608 base::Unretained(&error_callback))); | |
609 } | |
610 | |
355 } // namespace chromeos | 611 } // namespace chromeos |
OLD | NEW |