diff options
author | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-24 09:00:28 +0000 |
---|---|---|
committer | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-24 09:00:28 +0000 |
commit | 2f2f005ff66ca3c875bbb36772e81c75be181d9a (patch) | |
tree | 43bfae589bd44b663f83ae935c9f4de6d5731bf9 /chromeos | |
parent | 91ce11732f0d6aec110309a95d68cecc06f64d57 (diff) | |
download | chromium_src-2f2f005ff66ca3c875bbb36772e81c75be181d9a.zip chromium_src-2f2f005ff66ca3c875bbb36772e81c75be181d9a.tar.gz chromium_src-2f2f005ff66ca3c875bbb36772e81c75be181d9a.tar.bz2 |
Implement unittests for IBusEngineService
BUG=126947
TEST=chromeos_unittests and try bots
Review URL: https://chromiumcodereview.appspot.com/10806028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148068 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/chromeos.gyp | 3 | ||||
-rw-r--r-- | chromeos/dbus/ibus/ibus_engine_service_unittest.cc | 907 |
2 files changed, 909 insertions, 1 deletions
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index ce37e2e..f174b0f 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp @@ -236,11 +236,12 @@ 'dbus/ibus/ibus_client_unittest.cc', 'dbus/ibus/ibus_component_unittest.cc', 'dbus/ibus/ibus_engine_factory_service_unittest.cc', + 'dbus/ibus/ibus_engine_service_unittest.cc', + 'dbus/ibus/ibus_input_context_client_unittest.cc', 'dbus/ibus/ibus_lookup_table_unittest.cc', 'dbus/ibus/ibus_object_unittest.cc', 'dbus/ibus/ibus_property_unittest.cc', 'dbus/ibus/ibus_text_unittest.cc', - 'dbus/ibus/ibus_input_context_client_unittest.cc', 'dbus/introspectable_client_unittest.cc', 'dbus/modem_messaging_client_unittest.cc', 'network/network_sms_handler_unittest.cc', diff --git a/chromeos/dbus/ibus/ibus_engine_service_unittest.cc b/chromeos/dbus/ibus/ibus_engine_service_unittest.cc new file mode 100644 index 0000000..c80cae9 --- /dev/null +++ b/chromeos/dbus/ibus/ibus_engine_service_unittest.cc @@ -0,0 +1,907 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/dbus/ibus/ibus_engine_service.h" + +#include <map> +#include "base/bind.h" +#include "base/message_loop.h" +#include "base/values.h" +#include "chromeos/dbus/ibus/ibus_constants.h" +#include "chromeos/dbus/ibus/ibus_lookup_table.h" +#include "chromeos/dbus/ibus/ibus_property.h" +#include "chromeos/dbus/ibus/ibus_text.h" +#include "dbus/message.h" +#include "dbus/mock_bus.h" +#include "dbus/mock_exported_object.h" +#include "dbus/object_path.h" +#include "dbus/values_util.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using testing::Invoke; +using testing::Return; +using testing::_; + +namespace chromeos { + +namespace { +const std::string kObjectPath = "/org/freedesktop/IBus/Engine/1"; + +class MockIBusEngineHandler : public IBusEngineHandlerInterface { + public: + MOCK_METHOD0(FocusIn, void()); + MOCK_METHOD0(FocusOut, void()); + MOCK_METHOD0(Enable, void()); + MOCK_METHOD0(Disable, void()); + MOCK_METHOD2(PropertyActivate, void(const std::string& property_name, + IBusPropertyState property_state)); + MOCK_METHOD1(PropertyShow, void(const std::string& property_name)); + MOCK_METHOD1(PropertyHide, void(const std::string& property_name)); + MOCK_METHOD1(SetCapability, void(IBusCapability capability)); + MOCK_METHOD0(Reset, void()); + MOCK_METHOD3(ProcessKeyEvent, bool(uint32 keysym, uint32 keycode, + uint32 state)); + MOCK_METHOD3(CandidateClicked, void(uint32 index, IBusMouseButton button, + uint32 state)); + MOCK_METHOD3(SetSurroundingText, void(const std::string& text, + uint32 cursor_pos, + uint32 anchor_pos)); +}; + +class MockResponseSender { + public: + MOCK_METHOD1(Run, void(dbus::Response* reponse)); +}; + +// Used for method call empty response evaluation. +class EmptyResponseExpectation { + public: + explicit EmptyResponseExpectation(const uint32 serial_no) + : serial_no_(serial_no) {} + + // Evaluates the given |resposne| has no argument. + void Evaluate(dbus::Response* response) { + EXPECT_EQ(serial_no_, response->GetReplySerial()); + dbus::MessageReader reader(response); + EXPECT_FALSE(reader.HasMoreData()); + } + + private: + const uint32 serial_no_; + + DISALLOW_COPY_AND_ASSIGN(EmptyResponseExpectation); +}; + +// Used for method call a boolean response evaluation. +class BoolResponseExpectation { + public: + explicit BoolResponseExpectation(uint32 serial_no, bool result) + : serial_no_(serial_no), + result_(result) {} + + // Evaluates the given |resposne| has only one boolean and which is equals to + // |result_| which is given in ctor. + void Evaluate(dbus::Response* response) { + EXPECT_EQ(serial_no_, response->GetReplySerial()); + dbus::MessageReader reader(response); + bool result = false; + EXPECT_TRUE(reader.PopBool(&result)); + EXPECT_EQ(result_, result); + EXPECT_FALSE(reader.HasMoreData()); + } + + private: + uint32 serial_no_; + bool result_; + + DISALLOW_COPY_AND_ASSIGN(BoolResponseExpectation); +}; + +// Used for RegisterProperties signal message evaluation. +class RegisterPropertiesExpectation { + public: + explicit RegisterPropertiesExpectation( + const ibus::IBusPropertyList& property_list) + : property_list_(property_list) {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + ibus::IBusPropertyList property_list; + + // Read a signal argument. + dbus::MessageReader reader(signal); + EXPECT_TRUE(ibus::PopIBusPropertyList(&reader, &property_list)); + EXPECT_FALSE(reader.HasMoreData()); + + // Check an argument. + EXPECT_EQ(property_list_.size(), property_list.size()); + for (size_t i = 0; i < property_list_.size(); ++i) { + EXPECT_EQ(property_list_[i]->key(), property_list[i]->key()); + EXPECT_EQ(property_list_[i]->type(), property_list[i]->type()); + EXPECT_EQ(property_list_[i]->label(), property_list[i]->label()); + EXPECT_EQ(property_list_[i]->tooltip(), property_list[i]->tooltip()); + EXPECT_EQ(property_list_[i]->visible(), property_list[i]->visible()); + EXPECT_EQ(property_list_[i]->checked(), property_list[i]->checked()); + } + } + + private: + const ibus::IBusPropertyList& property_list_; + + DISALLOW_COPY_AND_ASSIGN(RegisterPropertiesExpectation); +}; + +// Used for UpdatePreedit signal message evaluation. +class UpdatePreeditExpectation { + public: + UpdatePreeditExpectation( + const ibus::IBusText& ibus_text, + uint32 cursor_pos, + bool is_visible, + IBusEngineService::IBusEnginePreeditFocusOutMode mode) + : ibus_text_(ibus_text), + cursor_pos_(cursor_pos), + is_visible_(is_visible), + mode_(mode) {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + ibus::IBusText ibus_text; + uint32 cursor_pos = 0; + bool is_visible = false; + uint32 preedit_mode = 0; + + // Read signal arguments. + dbus::MessageReader reader(signal); + EXPECT_TRUE(ibus::PopIBusText(&reader, &ibus_text)); + EXPECT_TRUE(reader.PopUint32(&cursor_pos)); + EXPECT_TRUE(reader.PopBool(&is_visible)); + EXPECT_TRUE(reader.PopUint32(&preedit_mode)); + EXPECT_FALSE(reader.HasMoreData()); + + // Check arguments. + EXPECT_EQ(ibus_text_.text(), ibus_text.text()); + EXPECT_EQ(cursor_pos_, cursor_pos); + EXPECT_EQ(is_visible_, is_visible); + EXPECT_EQ(mode_, + static_cast<IBusEngineService::IBusEnginePreeditFocusOutMode>( + preedit_mode)); + } + + private: + const ibus::IBusText& ibus_text_; + uint32 cursor_pos_; + bool is_visible_; + IBusEngineService::IBusEnginePreeditFocusOutMode mode_; + + DISALLOW_COPY_AND_ASSIGN(UpdatePreeditExpectation); +}; + +// Used for UpdateAuxiliaryText signal message evaluation. +class UpdateAuxiliaryTextExpectation { + public: + UpdateAuxiliaryTextExpectation(const ibus::IBusText& ibus_text, + bool is_visible) + : ibus_text_(ibus_text), is_visible_(is_visible) {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + ibus::IBusText ibus_text; + bool is_visible = false; + + // Read signal arguments. + dbus::MessageReader reader(signal); + EXPECT_TRUE(ibus::PopIBusText(&reader, &ibus_text)); + EXPECT_TRUE(reader.PopBool(&is_visible)); + EXPECT_FALSE(reader.HasMoreData()); + + // Check arguments. + EXPECT_EQ(ibus_text_.text(), ibus_text.text()); + EXPECT_EQ(is_visible_, is_visible); + } + + private: + const ibus::IBusText& ibus_text_; + bool is_visible_; + + DISALLOW_COPY_AND_ASSIGN(UpdateAuxiliaryTextExpectation); +}; + +// Used for UpdateLookupTable signal message evaluation. +class UpdateLookupTableExpectation { + public: + UpdateLookupTableExpectation(const ibus::IBusLookupTable& lookup_table, + bool is_visible) + : lookup_table_(lookup_table), is_visible_(is_visible) {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + ibus::IBusLookupTable lookup_table; + bool is_visible = false; + + // Read signal arguments. + dbus::MessageReader reader(signal); + EXPECT_TRUE(PopIBusLookupTable(&reader, &lookup_table)); + EXPECT_TRUE(reader.PopBool(&is_visible)); + EXPECT_FALSE(reader.HasMoreData()); + + // Check arguments. + EXPECT_EQ(lookup_table_.page_size(), lookup_table.page_size()); + EXPECT_EQ(lookup_table_.cursor_position(), lookup_table.cursor_position()); + EXPECT_EQ(lookup_table_.is_cursor_visible(), + lookup_table.is_cursor_visible()); + EXPECT_EQ(is_visible_, is_visible); + } + + private: + const ibus::IBusLookupTable& lookup_table_; + bool is_visible_; + + DISALLOW_COPY_AND_ASSIGN(UpdateLookupTableExpectation); +}; + +// Used for UpdateProperty signal message evaluation. +class UpdatePropertyExpectation { + public: + explicit UpdatePropertyExpectation(const ibus::IBusProperty& property) + : property_(property) {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + ibus::IBusProperty property; + + // Read a signal argument. + dbus::MessageReader reader(signal); + EXPECT_TRUE(PopIBusProperty(&reader, &property)); + EXPECT_FALSE(reader.HasMoreData()); + + // Check the argument. + EXPECT_EQ(property_.key(), property.key()); + EXPECT_EQ(property_.type(), property.type()); + EXPECT_EQ(property_.label(), property.label()); + EXPECT_EQ(property_.tooltip(), property.tooltip()); + EXPECT_EQ(property_.visible(), property.visible()); + EXPECT_EQ(property_.checked(), property.checked()); + } + + private: + const ibus::IBusProperty& property_; + + DISALLOW_COPY_AND_ASSIGN(UpdatePropertyExpectation); +}; + +// Used for ForwardKeyEvent signal message evaluation. +class ForwardKeyEventExpectation { + public: + ForwardKeyEventExpectation(uint32 keyval, uint32 keycode, uint32 state) + : keyval_(keyval), + keycode_(keycode), + state_(state) {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + uint32 keyval = 0; + uint32 keycode = 0; + uint32 state = 0; + + // Read signal arguments. + dbus::MessageReader reader(signal); + EXPECT_TRUE(reader.PopUint32(&keyval)); + EXPECT_TRUE(reader.PopUint32(&keycode)); + EXPECT_TRUE(reader.PopUint32(&state)); + EXPECT_FALSE(reader.HasMoreData()); + + // Check arguments. + EXPECT_EQ(keyval_, keyval); + EXPECT_EQ(keycode_, keycode); + EXPECT_EQ(state_, state); + } + + private: + uint32 keyval_; + uint32 keycode_; + uint32 state_; + + DISALLOW_COPY_AND_ASSIGN(ForwardKeyEventExpectation); +}; + +// Used for RequireSurroundingText signal message evaluation. +class RequireSurroundingTextExpectation { + public: + RequireSurroundingTextExpectation() {} + + // Evaluates the given |signal| is a valid message. + void Evaluate(dbus::Signal* signal) { + dbus::MessageReader reader(signal); + EXPECT_FALSE(reader.HasMoreData()); + } + + private: + DISALLOW_COPY_AND_ASSIGN(RequireSurroundingTextExpectation); +}; + +} // namespace + +class IBusEngineServiceTest : public testing::Test { + public: + IBusEngineServiceTest() {} + + virtual void SetUp() OVERRIDE { + // Create a mock bus. + dbus::Bus::Options options; + options.bus_type = dbus::Bus::SYSTEM; + mock_bus_ = new dbus::MockBus(options); + + // Create a mock exported object. + mock_exported_object_ = new dbus::MockExportedObject( + mock_bus_.get(), + dbus::ObjectPath(kObjectPath)); + + EXPECT_CALL(*mock_bus_.get(), + GetExportedObject(dbus::ObjectPath(kObjectPath))) + .WillOnce(Return(mock_exported_object_.get())); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kFocusInMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kFocusOutMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kEnableMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kDisableMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kPropertyActivateMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kPropertyShowMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kPropertyHideMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kSetCapabilityMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kResetMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kProcessKeyEventMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kCandidateClickedMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + EXPECT_CALL(*mock_exported_object_, ExportMethod( + ibus::engine::kServiceInterface, + ibus::engine::kSetSurroundingTextMethod , _, _)) + .WillRepeatedly( + Invoke(this, &IBusEngineServiceTest::OnMethodExported)); + + // Surpress uninteresting mock function call warning. + EXPECT_CALL(*mock_bus_.get(), + AssertOnOriginThread()) + .WillRepeatedly(Return()); + + // Create a service + service_.reset(IBusEngineService::Create( + REAL_DBUS_CLIENT_IMPLEMENTATION, + mock_bus_.get(), + dbus::ObjectPath(kObjectPath))); + + // Call Initialize to set engine handler. + engine_handler_ = new MockIBusEngineHandler(); + service_->Initialize(engine_handler_); + } + + protected: + // The service to be tested. + scoped_ptr<IBusEngineService> service_; + // The mock engine handler. Do not free, this is owned by IBusEngineService. + MockIBusEngineHandler* engine_handler_; + // The mock bus. + scoped_refptr<dbus::MockBus> mock_bus_; + // The mock exported object. + scoped_refptr<dbus::MockExportedObject> mock_exported_object_; + // A message loop to emulate asynchronous behavior. + MessageLoop message_loop_; + // The map from method call to method call handler. + std::map<std::string, dbus::ExportedObject::MethodCallCallback> + method_callback_map_; + + private: + // Used to implement the mock method call. + void OnMethodExported( + const std::string& interface_name, + const std::string& method_name, + const dbus::ExportedObject::MethodCallCallback& method_callback, + const dbus::ExportedObject::OnExportedCallback& on_exported_callback) { + method_callback_map_[method_name] = method_callback; + const bool success = true; + message_loop_.PostTask(FROM_HERE, base::Bind(on_exported_callback, + interface_name, + method_name, + success)); + } +}; + +TEST_F(IBusEngineServiceTest, FocusInTest) { + // Set expectations. + const uint32 kSerialNo = 1; + EXPECT_CALL(*engine_handler_, FocusIn()); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kFocusInMethod); + method_call.SetSerial(kSerialNo); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kFocusInMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kFocusInMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, FocusOutTest) { + // Set expectations. + const uint32 kSerialNo = 1; + EXPECT_CALL(*engine_handler_, FocusOut()); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kFocusOutMethod); + method_call.SetSerial(kSerialNo); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kFocusOutMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kFocusOutMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, EnableTest) { + // Set expectations. + const uint32 kSerialNo = 1; + EXPECT_CALL(*engine_handler_, Enable()); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kEnableMethod); + method_call.SetSerial(kSerialNo); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kEnableMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kEnableMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, DisableTest) { + // Set expectations. + const uint32 kSerialNo = 1; + EXPECT_CALL(*engine_handler_, Disable()); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kDisableMethod); + method_call.SetSerial(kSerialNo); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kDisableMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kDisableMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, PropertyActivateTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const std::string kPropertyName = "Property Name"; + const IBusEngineHandlerInterface::IBusPropertyState kIBusPropertyState = + IBusEngineHandlerInterface::IBUS_PROPERTY_STATE_UNCHECKED; + EXPECT_CALL(*engine_handler_, PropertyActivate(kPropertyName, + kIBusPropertyState)); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kPropertyActivateMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendString(kPropertyName); + writer.AppendUint32(static_cast<uint32>(kIBusPropertyState)); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kPropertyActivateMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kPropertyActivateMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, ResetTest) { + // Set expectations. + const uint32 kSerialNo = 1; + EXPECT_CALL(*engine_handler_, Reset()); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kResetMethod); + method_call.SetSerial(kSerialNo); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kResetMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kResetMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, PropertyShowTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const std::string kPropertyName = "Property Name"; + EXPECT_CALL(*engine_handler_, PropertyShow(kPropertyName)); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kPropertyShowMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendString(kPropertyName); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kPropertyShowMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kPropertyShowMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, PropertyHideTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const std::string kPropertyName = "Property Name"; + EXPECT_CALL(*engine_handler_, PropertyHide(kPropertyName)); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kPropertyHideMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendString(kPropertyName); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kPropertyHideMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kPropertyHideMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, SetCapabilityTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const IBusEngineHandlerInterface::IBusCapability kIBusCapability = + IBusEngineHandlerInterface::IBUS_CAPABILITY_PREEDIT_TEXT; + EXPECT_CALL(*engine_handler_, SetCapability(kIBusCapability)); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kSetCapabilityMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendUint32(static_cast<uint32>(kIBusCapability)); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kSetCapabilityMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kSetCapabilityMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, ProcessKeyEventTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const uint32 kKeySym = 0x64; + const uint32 kKeyCode = 0x20; + const uint32 kState = 0x00; + const bool kResult = true; + + EXPECT_CALL(*engine_handler_, ProcessKeyEvent(kKeySym, kKeyCode, kState)) + .WillOnce(Return(kResult)); + MockResponseSender response_sender; + BoolResponseExpectation response_expectation(kSerialNo, kResult); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &BoolResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kProcessKeyEventMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendUint32(kKeySym); + writer.AppendUint32(kKeyCode); + writer.AppendUint32(kState); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kProcessKeyEventMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kProcessKeyEventMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, CandidateClickedTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const uint32 kIndex = 4; + const IBusEngineHandlerInterface::IBusMouseButton kIBusMouseButton = + IBusEngineHandlerInterface::IBUS_MOUSE_BUTTON_MIDDLE; + const uint32 kState = 3; + EXPECT_CALL(*engine_handler_, CandidateClicked(kIndex, kIBusMouseButton, + kState)); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kCandidateClickedMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendUint32(kIndex); + writer.AppendUint32(static_cast<uint32>(kIBusMouseButton)); + writer.AppendUint32(kState); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kCandidateClickedMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kCandidateClickedMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, SetSurroundingTextTest) { + // Set expectations. + const uint32 kSerialNo = 1; + const std::string kText = "Sample Text"; + const uint32 kCursorPos = 3; + const uint32 kAnchorPos = 4; + EXPECT_CALL(*engine_handler_, SetSurroundingText(kText, kCursorPos, + kAnchorPos)); + MockResponseSender response_sender; + EmptyResponseExpectation response_expectation(kSerialNo); + EXPECT_CALL(response_sender, Run(_)) + .WillOnce(Invoke(&response_expectation, + &EmptyResponseExpectation::Evaluate)); + + // Create method call; + dbus::MethodCall method_call(ibus::engine::kServiceInterface, + ibus::engine::kSetSurroundingTextMethod); + method_call.SetSerial(kSerialNo); + dbus::MessageWriter writer(&method_call); + writer.AppendString(kText); + writer.AppendUint32(kCursorPos); + writer.AppendUint32(kAnchorPos); + + // Call exported function. + EXPECT_NE(method_callback_map_.find(ibus::engine::kSetSurroundingTextMethod), + method_callback_map_.end()); + method_callback_map_[ibus::engine::kSetSurroundingTextMethod].Run( + &method_call, + base::Bind(&MockResponseSender::Run, + base::Unretained(&response_sender))); +} + +TEST_F(IBusEngineServiceTest, RegisterProperties) { + // Set expetations. + ibus::IBusPropertyList property_list; + property_list.push_back(new ibus::IBusProperty()); + property_list[0]->set_key("Sample Key"); + property_list[0]->set_type(ibus::IBusProperty::IBUS_PROPERTY_TYPE_MENU); + property_list[0]->set_label("Sample Label"); + property_list[0]->set_tooltip("Sample Tooltip"); + property_list[0]->set_visible(true); + property_list[0]->set_checked(true); + + RegisterPropertiesExpectation expectation(property_list); + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, + &RegisterPropertiesExpectation::Evaluate)); + // Emit signal. + service_->RegisterProperties(property_list); +} + +TEST_F(IBusEngineServiceTest, UpdatePreeditTest) { + // Set expetations. + ibus::IBusText ibus_text; + ibus_text.set_text("Sample Text"); + const uint32 kCursorPos = 9; + const bool kIsVisible = false; + const IBusEngineService::IBusEnginePreeditFocusOutMode kPreeditMode = + IBusEngineService::IBUS_ENGINE_PREEEDIT_FOCUS_OUT_MODE_CLEAR; + UpdatePreeditExpectation expectation(ibus_text, kCursorPos, kIsVisible, + kPreeditMode); + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, &UpdatePreeditExpectation::Evaluate)); + + // Emit signal. + service_->UpdatePreedit(ibus_text, kCursorPos, kIsVisible, kPreeditMode); +} + +TEST_F(IBusEngineServiceTest, UpdateAuxiliaryText) { + ibus::IBusText ibus_text; + ibus_text.set_text("Sample Text"); + const bool kIsVisible = false; + UpdateAuxiliaryTextExpectation expectation(ibus_text, kIsVisible); + + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, + &UpdateAuxiliaryTextExpectation::Evaluate)); + + // Emit signal. + service_->UpdateAuxiliaryText(ibus_text, kIsVisible); +} + +TEST_F(IBusEngineServiceTest, UpdateLookupTableTest) { + ibus::IBusLookupTable lookup_table; + lookup_table.set_page_size(10); + lookup_table.set_cursor_position(2); + lookup_table.set_is_cursor_visible(false); + const bool kIsVisible = true; + + UpdateLookupTableExpectation expectation(lookup_table, kIsVisible); + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, + &UpdateLookupTableExpectation::Evaluate)); + + // Emit signal. + service_->UpdateLookupTable(lookup_table, kIsVisible); +} + +TEST_F(IBusEngineServiceTest, UpdatePropertyTest) { + ibus::IBusProperty property; + property.set_key("Sample Key"); + property.set_type(ibus::IBusProperty::IBUS_PROPERTY_TYPE_MENU); + property.set_label("Sample Label"); + property.set_tooltip("Sample Tooltip"); + property.set_visible(true); + property.set_checked(true); + + UpdatePropertyExpectation expectation(property); + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, + &UpdatePropertyExpectation::Evaluate)); + + // Emit signal. + service_->UpdateProperty(property); +} + +TEST_F(IBusEngineServiceTest, ForwardKeyEventTest) { + uint32 keyval = 0x20; + uint32 keycode = 0x64; + uint32 state = 0x00; + + ForwardKeyEventExpectation expectation(keyval, keycode, state); + + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, + &ForwardKeyEventExpectation::Evaluate)); + + // Emit signal. + service_->ForwardKeyEvent(keyval, keycode, state); +} + +TEST_F(IBusEngineServiceTest, RequireSurroundingTextTest) { + RequireSurroundingTextExpectation expectation; + EXPECT_CALL(*mock_exported_object_, SendSignal(_)) + .WillOnce(Invoke(&expectation, + &RequireSurroundingTextExpectation::Evaluate)); + + // Emit signal. + service_->RequireSurroundingText(); +} + + +} // namespace chromeos |