OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chromeos/dbus/ibus/ibus_panel_service.h" | |
6 | |
7 #include <map> | |
8 #include "base/bind.h" | |
9 #include "base/message_loop/message_loop.h" | |
10 #include "base/values.h" | |
11 #include "chromeos/dbus/ibus/ibus_constants.h" | |
12 #include "chromeos/dbus/ibus/ibus_input_context_client.h" | |
13 #include "chromeos/dbus/ibus/ibus_lookup_table.h" | |
14 #include "chromeos/dbus/ibus/ibus_property.h" | |
15 #include "chromeos/dbus/ibus/ibus_text.h" | |
16 #include "dbus/message.h" | |
17 #include "dbus/mock_bus.h" | |
18 #include "dbus/mock_exported_object.h" | |
19 #include "dbus/object_path.h" | |
20 #include "dbus/values_util.h" | |
21 #include "testing/gmock/include/gmock/gmock.h" | |
22 #include "testing/gtest/include/gtest/gtest.h" | |
23 | |
24 using testing::Invoke; | |
25 using testing::Return; | |
26 using testing::_; | |
27 | |
28 namespace chromeos { | |
29 | |
30 namespace { | |
31 | |
32 class MockIBusPanelCandidateWindowHandler | |
33 : public IBusPanelCandidateWindowHandlerInterface { | |
34 public: | |
35 MockIBusPanelCandidateWindowHandler() {} | |
36 MOCK_METHOD2(UpdateLookupTable, void(const IBusLookupTable& table, | |
37 bool visible)); | |
38 MOCK_METHOD0(HideLookupTable, void()); | |
39 MOCK_METHOD2(UpdateAuxiliaryText, void(const std::string& text, | |
40 bool visible)); | |
41 MOCK_METHOD0(HideAuxiliaryText, void()); | |
42 MOCK_METHOD3(UpdatePreeditText, void(const std::string& text, | |
43 uint32 cursor_pos, | |
44 bool visible) ); | |
45 MOCK_METHOD0(HidePreeditText, void()); | |
46 MOCK_METHOD2(SetCursorLocation, void(const ibus::Rect& cursor_location, | |
47 const ibus::Rect& composition_head)); | |
48 | |
49 private: | |
50 DISALLOW_COPY_AND_ASSIGN(MockIBusPanelCandidateWindowHandler); | |
51 }; | |
52 | |
53 class MockIBusPanelPropertyHandler : public IBusPanelPropertyHandlerInterface { | |
54 public: | |
55 MockIBusPanelPropertyHandler() {} | |
56 MOCK_METHOD1(RegisterProperties, | |
57 void(const IBusPropertyList& properties)); | |
58 MOCK_METHOD1(UpdateProperty, void(const IBusProperty& property)); | |
59 | |
60 private: | |
61 DISALLOW_COPY_AND_ASSIGN(MockIBusPanelPropertyHandler); | |
62 }; | |
63 | |
64 class MockResponseSender { | |
65 public: | |
66 // GMock doesn't support mocking methods which take scoped_ptr<>. | |
67 MOCK_METHOD1(MockRun, void(dbus::Response* reponse)); | |
68 void Run(scoped_ptr<dbus::Response> response) { | |
69 MockRun(response.get()); | |
70 } | |
71 }; | |
72 | |
73 // This class is used to verify that a method call response is empty. This class | |
74 // verifies the response has correct message serial number and has no entry in | |
75 // response. | |
76 class EmptyResponseVerifier { | |
77 public: | |
78 explicit EmptyResponseVerifier(uint32 expected_serial_number) | |
79 : expected_serial_number_(expected_serial_number) {} | |
80 | |
81 // Verifies the given |response| has no argument. | |
82 void Verify(dbus::Response* response) { | |
83 EXPECT_EQ(expected_serial_number_, response->GetReplySerial()); | |
84 dbus::MessageReader reader(response); | |
85 EXPECT_FALSE(reader.HasMoreData()); | |
86 } | |
87 | |
88 private: | |
89 const uint32 expected_serial_number_; | |
90 | |
91 DISALLOW_COPY_AND_ASSIGN(EmptyResponseVerifier); | |
92 }; | |
93 | |
94 // This class is used to verify the CandidateClicked method call arguments. | |
95 class CandidateClickedVerifier { | |
96 public: | |
97 CandidateClickedVerifier(uint32 expected_index, | |
98 ibus::IBusMouseButton expected_button, | |
99 uint32 expected_state) | |
100 : expected_index_(expected_index), | |
101 expected_button_(expected_button), | |
102 expected_state_(expected_state) {} | |
103 | |
104 // Verifies the given |signal| is a valid message. | |
105 void Verify(dbus::Signal* signal) { | |
106 uint32 index = 0; | |
107 uint32 button = 0; | |
108 uint32 state = 0; | |
109 | |
110 // Read signal arguments. | |
111 dbus::MessageReader reader(signal); | |
112 EXPECT_TRUE(reader.PopUint32(&index)); | |
113 EXPECT_TRUE(reader.PopUint32(&button)); | |
114 EXPECT_TRUE(reader.PopUint32(&state)); | |
115 EXPECT_FALSE(reader.HasMoreData()); | |
116 | |
117 // Check arguments. | |
118 EXPECT_EQ(expected_index_, index); | |
119 EXPECT_EQ(expected_button_, static_cast<ibus::IBusMouseButton>(button)); | |
120 EXPECT_EQ(expected_state_, state); | |
121 } | |
122 | |
123 private: | |
124 uint32 expected_index_; | |
125 ibus::IBusMouseButton expected_button_; | |
126 uint32 expected_state_; | |
127 | |
128 DISALLOW_COPY_AND_ASSIGN(CandidateClickedVerifier); | |
129 }; | |
130 | |
131 // This class is used to verify that a method call has empty argument. | |
132 class NullArgumentVerifier { | |
133 public: | |
134 explicit NullArgumentVerifier(const std::string& expected_signal_name) | |
135 : expected_signal_name_(expected_signal_name) {} | |
136 | |
137 // Verifies the given |signal| is a valid message. | |
138 void Verify(dbus::Signal* signal) { | |
139 EXPECT_EQ(expected_signal_name_, signal->GetMember()); | |
140 dbus::MessageReader reader(signal); | |
141 EXPECT_FALSE(reader.HasMoreData()); | |
142 } | |
143 | |
144 private: | |
145 std::string expected_signal_name_; | |
146 DISALLOW_COPY_AND_ASSIGN(NullArgumentVerifier); | |
147 }; | |
148 | |
149 class UpdateLookupTableVerifier { | |
150 public: | |
151 UpdateLookupTableVerifier(const IBusLookupTable& table, bool visible) | |
152 : table_(table), | |
153 visible_(visible) {} | |
154 | |
155 void Verify(const IBusLookupTable& table, bool visible) { | |
156 EXPECT_EQ(table_.page_size(), table.page_size()); | |
157 EXPECT_EQ(table_.cursor_position(), table.cursor_position()); | |
158 EXPECT_EQ(visible_, visible); | |
159 } | |
160 | |
161 private: | |
162 const IBusLookupTable& table_; | |
163 const bool visible_; | |
164 | |
165 DISALLOW_COPY_AND_ASSIGN(UpdateLookupTableVerifier); | |
166 }; | |
167 | |
168 // This class is used to verify that a method call which has a PropertyList | |
169 // object. This class verifies a method call has correct arguments based on | |
170 // checking given |keys|. | |
171 class PropertyListVerifier { | |
172 public: | |
173 explicit PropertyListVerifier(const std::vector<std::string>& expected_keys) | |
174 : expected_keys_(expected_keys) { | |
175 } | |
176 | |
177 // Verifies the given |resposne| has IBusPropertyList. | |
178 void Verify(const IBusPropertyList& properties) { | |
179 ASSERT_EQ(expected_keys_.size(), properties.size()); | |
180 for (size_t i = 0; i < properties.size(); ++i) { | |
181 EXPECT_EQ(expected_keys_[i], properties[i]->key()); | |
182 } | |
183 } | |
184 | |
185 private: | |
186 const std::vector<std::string> expected_keys_; | |
187 }; | |
188 | |
189 // This class is used to verify that a method call which has a Property object. | |
190 // This class verifies a method call has correct argument based on |key|. | |
191 class PropertyVerifier { | |
192 public: | |
193 explicit PropertyVerifier(const std::string& key) : key_(key) {} | |
194 | |
195 // Verifies the given |resposne| has IBusPropertyList. | |
196 void Verify(const IBusProperty& property) { | |
197 EXPECT_EQ(key_, property.key()); | |
198 } | |
199 | |
200 private: | |
201 const std::string key_; | |
202 }; | |
203 | |
204 } // namespace | |
205 | |
206 class IBusPanelServiceTest : public testing::Test { | |
207 public: | |
208 IBusPanelServiceTest() {} | |
209 | |
210 virtual void SetUp() OVERRIDE { | |
211 // Create a mock bus. | |
212 dbus::Bus::Options options; | |
213 options.bus_type = dbus::Bus::SYSTEM; | |
214 mock_bus_ = new dbus::MockBus(options); | |
215 | |
216 // Create a mock exported object. | |
217 mock_exported_object_ = new dbus::MockExportedObject( | |
218 mock_bus_.get(), | |
219 dbus::ObjectPath(ibus::panel::kServicePath)); | |
220 | |
221 EXPECT_CALL(*mock_bus_.get(), | |
222 GetExportedObject(dbus::ObjectPath( | |
223 ibus::panel::kServicePath))) | |
224 .WillOnce(Return(mock_exported_object_.get())); | |
225 | |
226 EXPECT_CALL(*mock_exported_object_.get(), | |
227 ExportMethod(ibus::panel::kServiceInterface, | |
228 ibus::panel::kUpdateLookupTableMethod, | |
229 _, | |
230 _)) | |
231 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
232 | |
233 EXPECT_CALL(*mock_exported_object_.get(), | |
234 ExportMethod(ibus::panel::kServiceInterface, | |
235 ibus::panel::kHideLookupTableMethod, | |
236 _, | |
237 _)) | |
238 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
239 | |
240 EXPECT_CALL(*mock_exported_object_.get(), | |
241 ExportMethod(ibus::panel::kServiceInterface, | |
242 ibus::panel::kUpdateAuxiliaryTextMethod, | |
243 _, | |
244 _)) | |
245 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
246 | |
247 EXPECT_CALL(*mock_exported_object_.get(), | |
248 ExportMethod(ibus::panel::kServiceInterface, | |
249 ibus::panel::kHideAuxiliaryTextMethod, | |
250 _, | |
251 _)) | |
252 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
253 | |
254 EXPECT_CALL(*mock_exported_object_.get(), | |
255 ExportMethod(ibus::panel::kServiceInterface, | |
256 ibus::panel::kUpdatePreeditTextMethod, | |
257 _, | |
258 _)) | |
259 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
260 | |
261 EXPECT_CALL(*mock_exported_object_.get(), | |
262 ExportMethod(ibus::panel::kServiceInterface, | |
263 ibus::panel::kHidePreeditTextMethod, | |
264 _, | |
265 _)) | |
266 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
267 | |
268 EXPECT_CALL(*mock_exported_object_.get(), | |
269 ExportMethod(ibus::panel::kServiceInterface, | |
270 ibus::panel::kRegisterPropertiesMethod, | |
271 _, | |
272 _)) | |
273 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
274 | |
275 EXPECT_CALL(*mock_exported_object_.get(), | |
276 ExportMethod(ibus::panel::kServiceInterface, | |
277 ibus::panel::kUpdatePropertyMethod, | |
278 _, | |
279 _)) | |
280 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
281 | |
282 EXPECT_CALL( | |
283 *mock_exported_object_.get(), | |
284 ExportMethod( | |
285 ibus::panel::kServiceInterface, ibus::panel::kFocusInMethod, _, _)) | |
286 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
287 | |
288 EXPECT_CALL( | |
289 *mock_exported_object_.get(), | |
290 ExportMethod( | |
291 ibus::panel::kServiceInterface, ibus::panel::kFocusOutMethod, _, _)) | |
292 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
293 | |
294 EXPECT_CALL(*mock_exported_object_.get(), | |
295 ExportMethod(ibus::panel::kServiceInterface, | |
296 ibus::panel::kStateChangedMethod, | |
297 _, | |
298 _)) | |
299 .WillRepeatedly(Invoke(this, &IBusPanelServiceTest::OnMethodExported)); | |
300 | |
301 // Suppress uninteresting mock function call warning. | |
302 EXPECT_CALL(*mock_bus_.get(), | |
303 AssertOnOriginThread()) | |
304 .WillRepeatedly(Return()); | |
305 | |
306 stub_input_context_client_.reset(IBusInputContextClient::Create( | |
307 STUB_DBUS_CLIENT_IMPLEMENTATION)); | |
308 | |
309 // Create a service | |
310 service_.reset(IBusPanelService::Create( | |
311 REAL_DBUS_CLIENT_IMPLEMENTATION, | |
312 mock_bus_.get(), | |
313 stub_input_context_client_.get())); | |
314 | |
315 // Set panel handler. | |
316 candidate_window_handler_.reset(new MockIBusPanelCandidateWindowHandler()); | |
317 service_->SetUpCandidateWindowHandler(candidate_window_handler_.get()); | |
318 property_handler_.reset(new MockIBusPanelPropertyHandler()); | |
319 service_->SetUpPropertyHandler(property_handler_.get()); | |
320 } | |
321 | |
322 protected: | |
323 // The service to be tested. | |
324 scoped_ptr<IBusPanelService> service_; | |
325 // The mock candidate window panel handler. Do not free, this is owned by | |
326 // IBusPanelService. | |
327 scoped_ptr<MockIBusPanelCandidateWindowHandler> candidate_window_handler_; | |
328 // The mock property handler. Do not free, this is owned by IBusPanelService. | |
329 scoped_ptr<MockIBusPanelPropertyHandler> property_handler_; | |
330 // The stub input context client. | |
331 scoped_ptr<IBusInputContextClient> stub_input_context_client_; | |
332 // The mock bus. | |
333 scoped_refptr<dbus::MockBus> mock_bus_; | |
334 // The mock exported object. | |
335 scoped_refptr<dbus::MockExportedObject> mock_exported_object_; | |
336 // A message loop to emulate asynchronous behavior. | |
337 base::MessageLoop message_loop_; | |
338 // The map from method call to method call handler. | |
339 std::map<std::string, dbus::ExportedObject::MethodCallCallback> | |
340 method_callback_map_; | |
341 | |
342 private: | |
343 // Used to implement the mock method call. | |
344 void OnMethodExported( | |
345 const std::string& interface_name, | |
346 const std::string& method_name, | |
347 const dbus::ExportedObject::MethodCallCallback& method_callback, | |
348 const dbus::ExportedObject::OnExportedCallback& on_exported_callback) { | |
349 method_callback_map_[method_name] = method_callback; | |
350 const bool success = true; | |
351 message_loop_.PostTask(FROM_HERE, base::Bind(on_exported_callback, | |
352 interface_name, | |
353 method_name, | |
354 success)); | |
355 } | |
356 }; | |
357 | |
358 TEST_F(IBusPanelServiceTest, HideLookupTableTest) { | |
359 // Set expectations. | |
360 const uint32 kSerialNo = 1; | |
361 EXPECT_CALL(*candidate_window_handler_, HideLookupTable()); | |
362 MockResponseSender response_sender; | |
363 EmptyResponseVerifier response_expectation(kSerialNo); | |
364 EXPECT_CALL(response_sender, MockRun(_)) | |
365 .WillOnce(Invoke(&response_expectation, | |
366 &EmptyResponseVerifier::Verify)); | |
367 | |
368 // Create method call; | |
369 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
370 ibus::panel::kHideLookupTableMethod); | |
371 method_call.SetSerial(kSerialNo); | |
372 | |
373 // Call exported function. | |
374 EXPECT_NE(method_callback_map_.find(ibus::panel::kHideLookupTableMethod), | |
375 method_callback_map_.end()); | |
376 method_callback_map_[ibus::panel::kHideLookupTableMethod].Run( | |
377 &method_call, | |
378 base::Bind(&MockResponseSender::Run, | |
379 base::Unretained(&response_sender))); | |
380 } | |
381 | |
382 TEST_F(IBusPanelServiceTest, HideAuxiliaryTextTest) { | |
383 // Set expectations. | |
384 const uint32 kSerialNo = 1; | |
385 EXPECT_CALL(*candidate_window_handler_, HideAuxiliaryText()); | |
386 MockResponseSender response_sender; | |
387 EmptyResponseVerifier response_expectation(kSerialNo); | |
388 EXPECT_CALL(response_sender, MockRun(_)) | |
389 .WillOnce(Invoke(&response_expectation, | |
390 &EmptyResponseVerifier::Verify)); | |
391 | |
392 // Create method call; | |
393 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
394 ibus::panel::kHideAuxiliaryTextMethod); | |
395 method_call.SetSerial(kSerialNo); | |
396 | |
397 // Call exported function. | |
398 EXPECT_NE(method_callback_map_.find(ibus::panel::kHideAuxiliaryTextMethod), | |
399 method_callback_map_.end()); | |
400 method_callback_map_[ibus::panel::kHideAuxiliaryTextMethod].Run( | |
401 &method_call, | |
402 base::Bind(&MockResponseSender::Run, | |
403 base::Unretained(&response_sender))); | |
404 } | |
405 | |
406 TEST_F(IBusPanelServiceTest, HidePreeditTextTest) { | |
407 // Set expectations. | |
408 const uint32 kSerialNo = 1; | |
409 EXPECT_CALL(*candidate_window_handler_, HidePreeditText()); | |
410 MockResponseSender response_sender; | |
411 EmptyResponseVerifier response_expectation(kSerialNo); | |
412 EXPECT_CALL(response_sender, MockRun(_)) | |
413 .WillOnce(Invoke(&response_expectation, | |
414 &EmptyResponseVerifier::Verify)); | |
415 | |
416 // Create method call; | |
417 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
418 ibus::panel::kHidePreeditTextMethod); | |
419 method_call.SetSerial(kSerialNo); | |
420 | |
421 // Call exported function. | |
422 EXPECT_NE(method_callback_map_.find(ibus::panel::kHidePreeditTextMethod), | |
423 method_callback_map_.end()); | |
424 method_callback_map_[ibus::panel::kHidePreeditTextMethod].Run( | |
425 &method_call, | |
426 base::Bind(&MockResponseSender::Run, | |
427 base::Unretained(&response_sender))); | |
428 } | |
429 | |
430 TEST_F(IBusPanelServiceTest, UpdateLookupTableTest) { | |
431 // Set expectations. | |
432 const uint32 kSerialNo = 1; | |
433 IBusLookupTable table; | |
434 table.set_page_size(3); | |
435 table.set_cursor_position(4); | |
436 const bool kVisible = false; | |
437 | |
438 | |
439 UpdateLookupTableVerifier evaluator(table, kVisible); | |
440 EXPECT_CALL(*candidate_window_handler_, UpdateLookupTable(_, _)) | |
441 .WillOnce(Invoke(&evaluator, | |
442 &UpdateLookupTableVerifier::Verify)); | |
443 MockResponseSender response_sender; | |
444 EmptyResponseVerifier response_expectation(kSerialNo); | |
445 EXPECT_CALL(response_sender, MockRun(_)) | |
446 .WillOnce(Invoke(&response_expectation, | |
447 &EmptyResponseVerifier::Verify)); | |
448 | |
449 // Create method call; | |
450 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
451 ibus::panel::kUpdateLookupTableMethod); | |
452 method_call.SetSerial(kSerialNo); | |
453 dbus::MessageWriter writer(&method_call); | |
454 AppendIBusLookupTable(table, &writer); | |
455 writer.AppendBool(kVisible); | |
456 | |
457 // Call exported function. | |
458 EXPECT_NE(method_callback_map_.find(ibus::panel::kUpdateLookupTableMethod), | |
459 method_callback_map_.end()); | |
460 method_callback_map_[ibus::panel::kUpdateLookupTableMethod].Run( | |
461 &method_call, | |
462 base::Bind(&MockResponseSender::Run, | |
463 base::Unretained(&response_sender))); | |
464 } | |
465 | |
466 TEST_F(IBusPanelServiceTest, UpdateAuxiliaryTextTest) { | |
467 // Set expectations. | |
468 const uint32 kSerialNo = 1; | |
469 const std::string text = "Sample text"; | |
470 const bool kVisible = false; | |
471 | |
472 EXPECT_CALL(*candidate_window_handler_, UpdateAuxiliaryText(text, kVisible)); | |
473 MockResponseSender response_sender; | |
474 EmptyResponseVerifier response_expectation(kSerialNo); | |
475 EXPECT_CALL(response_sender, MockRun(_)) | |
476 .WillOnce(Invoke(&response_expectation, | |
477 &EmptyResponseVerifier::Verify)); | |
478 | |
479 // Create method call; | |
480 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
481 ibus::panel::kUpdateAuxiliaryTextMethod); | |
482 method_call.SetSerial(kSerialNo); | |
483 dbus::MessageWriter writer(&method_call); | |
484 AppendStringAsIBusText(text, &writer); | |
485 writer.AppendBool(kVisible); | |
486 | |
487 // Call exported function. | |
488 EXPECT_NE(method_callback_map_.find(ibus::panel::kUpdateAuxiliaryTextMethod), | |
489 method_callback_map_.end()); | |
490 method_callback_map_[ibus::panel::kUpdateAuxiliaryTextMethod].Run( | |
491 &method_call, | |
492 base::Bind(&MockResponseSender::Run, | |
493 base::Unretained(&response_sender))); | |
494 } | |
495 | |
496 TEST_F(IBusPanelServiceTest, UpdatePreeditTextTest) { | |
497 // Set expectations. | |
498 const uint32 kSerialNo = 1; | |
499 const std::string text = "Sample text"; | |
500 const uint32 kCursorPos = 4; | |
501 const bool kVisible = false; | |
502 | |
503 EXPECT_CALL(*candidate_window_handler_, | |
504 UpdatePreeditText(text, kCursorPos, kVisible)); | |
505 MockResponseSender response_sender; | |
506 EmptyResponseVerifier response_expectation(kSerialNo); | |
507 EXPECT_CALL(response_sender, MockRun(_)) | |
508 .WillOnce(Invoke(&response_expectation, | |
509 &EmptyResponseVerifier::Verify)); | |
510 | |
511 // Create method call; | |
512 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
513 ibus::panel::kUpdatePreeditTextMethod); | |
514 method_call.SetSerial(kSerialNo); | |
515 dbus::MessageWriter writer(&method_call); | |
516 AppendStringAsIBusText(text, &writer); | |
517 writer.AppendUint32(kCursorPos); | |
518 writer.AppendBool(kVisible); | |
519 | |
520 // Call exported function. | |
521 EXPECT_NE(method_callback_map_.find(ibus::panel::kUpdatePreeditTextMethod), | |
522 method_callback_map_.end()); | |
523 method_callback_map_[ibus::panel::kUpdatePreeditTextMethod].Run( | |
524 &method_call, | |
525 base::Bind(&MockResponseSender::Run, | |
526 base::Unretained(&response_sender))); | |
527 } | |
528 | |
529 TEST_F(IBusPanelServiceTest, CursorUpTest) { | |
530 // Set expectations. | |
531 NullArgumentVerifier evaluator(ibus::panel::kCursorUpSignal); | |
532 EXPECT_CALL(*mock_exported_object_.get(), SendSignal(_)) | |
533 .WillOnce(Invoke(&evaluator, &NullArgumentVerifier::Verify)); | |
534 | |
535 // Emit signal. | |
536 service_->CursorUp(); | |
537 } | |
538 | |
539 TEST_F(IBusPanelServiceTest, CursorDownTest) { | |
540 // Set expectations. | |
541 NullArgumentVerifier evaluator(ibus::panel::kCursorDownSignal); | |
542 EXPECT_CALL(*mock_exported_object_.get(), SendSignal(_)) | |
543 .WillOnce(Invoke(&evaluator, &NullArgumentVerifier::Verify)); | |
544 | |
545 // Emit signal. | |
546 service_->CursorDown(); | |
547 } | |
548 | |
549 TEST_F(IBusPanelServiceTest, PageUpTest) { | |
550 // Set expectations. | |
551 NullArgumentVerifier evaluator(ibus::panel::kPageUpSignal); | |
552 EXPECT_CALL(*mock_exported_object_.get(), SendSignal(_)) | |
553 .WillOnce(Invoke(&evaluator, &NullArgumentVerifier::Verify)); | |
554 | |
555 // Emit signal. | |
556 service_->PageUp(); | |
557 } | |
558 | |
559 TEST_F(IBusPanelServiceTest, PageDownTest) { | |
560 // Set expectations. | |
561 NullArgumentVerifier evaluator(ibus::panel::kPageDownSignal); | |
562 EXPECT_CALL(*mock_exported_object_.get(), SendSignal(_)) | |
563 .WillOnce(Invoke(&evaluator, &NullArgumentVerifier::Verify)); | |
564 | |
565 // Emit signal. | |
566 service_->PageDown(); | |
567 } | |
568 | |
569 TEST_F(IBusPanelServiceTest, RegisterPropertiesTest) { | |
570 // Set expectations. | |
571 std::vector<std::string> keys; | |
572 keys.push_back("key1"); | |
573 keys.push_back("key2"); | |
574 keys.push_back("key3"); | |
575 IBusPropertyList properties; | |
576 for (size_t i = 0; i < keys.size(); ++i) { | |
577 IBusProperty* property = new IBusProperty; | |
578 property->set_key(keys[i]); | |
579 properties.push_back(property); | |
580 } | |
581 | |
582 PropertyListVerifier response_expectation(keys); | |
583 EXPECT_CALL(*property_handler_, RegisterProperties(_)) | |
584 .WillOnce(Invoke(&response_expectation, | |
585 &PropertyListVerifier::Verify)); | |
586 | |
587 MockResponseSender response_sender; | |
588 EXPECT_CALL(response_sender, MockRun(_)); | |
589 | |
590 // Create method call; | |
591 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
592 ibus::panel::kRegisterPropertiesMethod); | |
593 method_call.SetSerial(1UL); | |
594 dbus::MessageWriter writer(&method_call); | |
595 AppendIBusPropertyList(properties, &writer); | |
596 | |
597 // Call exported function. | |
598 EXPECT_NE(method_callback_map_.find(ibus::panel::kRegisterPropertiesMethod), | |
599 method_callback_map_.end()); | |
600 method_callback_map_[ibus::panel::kRegisterPropertiesMethod].Run( | |
601 &method_call, | |
602 base::Bind(&MockResponseSender::Run, base::Unretained(&response_sender))); | |
603 } | |
604 | |
605 TEST_F(IBusPanelServiceTest, UpdatePropertyTest) { | |
606 // Set expectations. | |
607 const char kKey[] = "key"; | |
608 IBusProperty property; | |
609 property.set_key(kKey); | |
610 | |
611 PropertyVerifier response_expectation(kKey); | |
612 EXPECT_CALL(*property_handler_, UpdateProperty(_)) | |
613 .WillOnce(Invoke(&response_expectation, &PropertyVerifier::Verify)); | |
614 | |
615 MockResponseSender response_sender; | |
616 EXPECT_CALL(response_sender, MockRun(_)); | |
617 | |
618 // Create method call; | |
619 dbus::MethodCall method_call(ibus::panel::kServiceInterface, | |
620 ibus::panel::kUpdatePropertyMethod); | |
621 method_call.SetSerial(1UL); | |
622 dbus::MessageWriter writer(&method_call); | |
623 AppendIBusProperty(property, &writer); | |
624 | |
625 // Call exported function. | |
626 EXPECT_NE(method_callback_map_.find(ibus::panel::kUpdatePropertyMethod), | |
627 method_callback_map_.end()); | |
628 method_callback_map_[ibus::panel::kUpdatePropertyMethod].Run( | |
629 &method_call, | |
630 base::Bind(&MockResponseSender::Run, | |
631 base::Unretained(&response_sender))); | |
632 } | |
633 | |
634 } // namespace chromeos | |
OLD | NEW |