diff options
author | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-22 16:51:03 +0000 |
---|---|---|
committer | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-22 16:51:03 +0000 |
commit | 59f505ddbb0c0a566a312ffaf37cfc828dc3193a (patch) | |
tree | d983ee3585fcab0c5a57c44cec0aa33e166a8a93 /chromeos/dbus | |
parent | 4e676929f1fc85affa0d655ccbf6e5a237b33e0d (diff) | |
download | chromium_src-59f505ddbb0c0a566a312ffaf37cfc828dc3193a.zip chromium_src-59f505ddbb0c0a566a312ffaf37cfc828dc3193a.tar.gz chromium_src-59f505ddbb0c0a566a312ffaf37cfc828dc3193a.tar.bz2 |
Extends IBusObject.
- Adds int32 and bool I/O into IBusObjectReader/Writer.
- Adds AppendIBusText and PopIBusText into IBusObjectReader/Writer
- Adds AppendStringAsIBusText and PopStringFromIBusText as utility function, because we frequently uses IBusText as a plain text in Chrome.
BUG=None
TEST=chromeos_unittests
Review URL: https://chromiumcodereview.appspot.com/10384141
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138280 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos/dbus')
-rw-r--r-- | chromeos/dbus/ibus/ibus_object.cc | 49 | ||||
-rw-r--r-- | chromeos/dbus/ibus/ibus_object.h | 32 | ||||
-rw-r--r-- | chromeos/dbus/ibus/ibus_object_unittest.cc | 80 |
3 files changed, 153 insertions, 8 deletions
diff --git a/chromeos/dbus/ibus/ibus_object.cc b/chromeos/dbus/ibus/ibus_object.cc index c6b97465..ebba2b3 100644 --- a/chromeos/dbus/ibus/ibus_object.cc +++ b/chromeos/dbus/ibus/ibus_object.cc @@ -5,9 +5,12 @@ #include "chromeos/dbus/ibus/ibus_object.h" #include "base/logging.h" +#include "chromeos/dbus/ibus/ibus_text.h" #include "dbus/message.h" namespace chromeos { +// TODO(nona): Remove ibus namespace after complete libibus removal. +namespace ibus { /////////////////////////////////////////////////////////////////////////////// // IBusObjectReader @@ -92,12 +95,37 @@ bool IBusObjectReader::PopUint32(uint32* out) { return IsValid() && contents_reader_->PopUint32(out); } +bool IBusObjectReader::PopInt32(int32* out) { + DCHECK_NE(IBUS_OBJECT_NOT_CHECKED, check_result_); + DCHECK(contents_reader_.get()); + return IsValid() && contents_reader_->PopInt32(out); +} + +bool IBusObjectReader::PopBool(bool* out) { + DCHECK_NE(IBUS_OBJECT_NOT_CHECKED, check_result_); + DCHECK(contents_reader_.get()); + return IsValid() && contents_reader_->PopBool(out); +} + bool IBusObjectReader::PopArray(dbus::MessageReader* reader) { DCHECK_NE(IBUS_OBJECT_NOT_CHECKED, check_result_); DCHECK(contents_reader_.get()); return IsValid() && contents_reader_->PopArray(reader); } +bool IBusObjectReader::PopIBusText(IBusText* text) { + DCHECK_NE(IBUS_OBJECT_NOT_CHECKED, check_result_); + DCHECK(contents_reader_.get()); + return IsValid() && chromeos::ibus::PopIBusText(contents_reader_.get(), text); +} + +bool IBusObjectReader::PopStringFromIBusText(std::string* text) { + DCHECK_NE(IBUS_OBJECT_NOT_CHECKED, check_result_); + DCHECK(contents_reader_.get()); + return IsValid() && chromeos::ibus::PopStringFromIBusText( + contents_reader_.get(), text); +} + bool IBusObjectReader::HasMoreData() { DCHECK_NE(IBUS_OBJECT_NOT_CHECKED, check_result_); DCHECK(contents_reader_.get()); @@ -141,12 +169,32 @@ void IBusObjectWriter::AppendUint32(uint32 input) { contents_writer_->AppendUint32(input); } +void IBusObjectWriter::AppendInt32(int32 input) { + DCHECK(IsInitialized()); + contents_writer_->AppendInt32(input); +} + +void IBusObjectWriter::AppendBool(bool input) { + DCHECK(IsInitialized()); + contents_writer_->AppendBool(input); +} + void IBusObjectWriter::OpenArray(const std::string& signature, dbus::MessageWriter* writer) { DCHECK(IsInitialized()); contents_writer_->OpenArray(signature, writer); } +void IBusObjectWriter::AppendIBusText(const IBusText& text) { + DCHECK(IsInitialized()); + chromeos::ibus::AppendIBusText(text, contents_writer_.get()); +} + +void IBusObjectWriter::AppendStringAsIBusText(const std::string& text) { + DCHECK(IsInitialized()); + chromeos::ibus::AppendStringAsIBusText(text, contents_writer_.get()); +} + void IBusObjectWriter::CloseContainer(dbus::MessageWriter* writer) { DCHECK(IsInitialized()); contents_writer_->CloseContainer(writer); @@ -198,4 +246,5 @@ bool IBusObjectWriter::IsInitialized() const { return contents_writer_.get() != NULL; } +} // namespace ibus } // namespace chromeos diff --git a/chromeos/dbus/ibus/ibus_object.h b/chromeos/dbus/ibus/ibus_object.h index 8df1d0f..d56b556 100644 --- a/chromeos/dbus/ibus/ibus_object.h +++ b/chromeos/dbus/ibus/ibus_object.h @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "chromeos/chromeos_export.h" +#include "chromeos/dbus/ibus/ibus_text.h" namespace dbus { class MessageReader; @@ -16,6 +17,8 @@ class MessageWriter; } // dbus namespace chromeos { +// TODO(nona): Remove ibus namespace after complete libibus removal. +namespace ibus { // The data structure of IBusObject is represented as variant in "(sav...)" // signatur. The IBusObject is constructed with two sections, header and @@ -25,7 +28,8 @@ namespace chromeos { // // DATA STRUCTURE OVERVIEW: // -// variant struct { +// variant // Handle with top_variant_writer_/top_variant_reader_. +// struct { // Handle with contents_writer_/contents_reader_. // // Header section // string typename // The type name of object, like "IBusText" // array [] // attachement array. @@ -91,9 +95,22 @@ class CHROMEOS_EXPORT IBusObjectReader { bool PopString(std::string* out); bool PopUint32(uint32* out); bool PopArray(dbus::MessageReader* reader); - bool PopIBusObject(IBusObjectReader* reader); + bool PopBool(bool* out); + bool PopInt32(int32* out); bool HasMoreData(); + // Sets up |reader| for reading an IBusObject entry. + bool PopIBusObject(IBusObjectReader* reader); + + // Pops a IBusText. + // Returns true on success. + bool PopIBusText(ibus::IBusText* text); + + // Pops a IBusText and store it's text field into |text|. Use PopIBusText + // instead in the case of using any attribute entries in IBusText. + // Return true on success. + bool PopStringFromIBusText(std::string* text); + private: enum CheckResult { IBUS_OBJECT_VALID, // Already checked and valid type. @@ -141,6 +158,8 @@ class CHROMEOS_EXPORT IBusObjectWriter { // The following functions delegate dbus::MessageReader's functions. void AppendString(const std::string& input); void AppendUint32(uint32 value); + void AppendInt32(int32 value); + void AppendBool(bool value); void OpenArray(const std::string& signature, dbus::MessageWriter* writer); void CloseContainer(dbus::MessageWriter* writer); @@ -154,8 +173,14 @@ class CHROMEOS_EXPORT IBusObjectWriter { // Returns true if writer is initialized. bool IsInitialized() const; + // Appends a IBusText. + void AppendIBusText(const ibus::IBusText& text); + + // Appends a string as IBusText without any attributes. Use AppendIBusText + // instead in the case of using any attribute entries. + void AppendStringAsIBusText(const std::string& text); + private: - friend class TestableIBusObjectWriter; // Appends IBusObject headers, should be called once. void Init(); @@ -168,6 +193,7 @@ class CHROMEOS_EXPORT IBusObjectWriter { DISALLOW_COPY_AND_ASSIGN(IBusObjectWriter); }; +} // namespace ibus } // namespace chromeos #endif // CHROMEOS_DBUS_IBUS_IBUS_OBJECT_H_ diff --git a/chromeos/dbus/ibus/ibus_object_unittest.cc b/chromeos/dbus/ibus/ibus_object_unittest.cc index b4cd2bb..574b61d 100644 --- a/chromeos/dbus/ibus/ibus_object_unittest.cc +++ b/chromeos/dbus/ibus/ibus_object_unittest.cc @@ -12,6 +12,8 @@ #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { +// TODO(nona): Remove ibus namespace after complete libibus removal. +namespace ibus { TEST(IBusObjectTest, WriteReadTest) { scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); @@ -22,12 +24,16 @@ TEST(IBusObjectTest, WriteReadTest) { const char kSampleText1[] = "Sample Text 1"; const char kSampleText2[] = "Sample Text 2"; const uint32 kSampleUint32 = 12345UL; + const int32 kSampleInt32 = 54321; + const bool kSampleBool = false; const uint32 kSampleArrayOfUint32Count = 10UL; // Create ibus object. - IBusObjectWriter ibus_object_writer(kSampleTypeName1, "suauv", &writer); + IBusObjectWriter ibus_object_writer(kSampleTypeName1, "suibauv", &writer); ibus_object_writer.AppendString(kSampleText1); ibus_object_writer.AppendUint32(kSampleUint32); + ibus_object_writer.AppendInt32(kSampleInt32); + ibus_object_writer.AppendBool(kSampleBool); dbus::MessageWriter array_writer(NULL); ibus_object_writer.OpenArray("u", &array_writer); for (uint32 i = 0; i < kSampleArrayOfUint32Count; ++i) @@ -47,18 +53,26 @@ TEST(IBusObjectTest, WriteReadTest) { ASSERT_TRUE(ibus_object_reader.PopString(&expected_string)); EXPECT_EQ(kSampleText1, expected_string); // Check the second uint32 value. - uint32 expected_uint32; + uint32 expected_uint32 = 0UL; ASSERT_TRUE(ibus_object_reader.PopUint32(&expected_uint32)); EXPECT_EQ(kSampleUint32, expected_uint32); - // Check the third value which is array of uint32. + // Check the third int value. + int32 expected_int32 = 0; + ASSERT_TRUE(ibus_object_reader.PopInt32(&expected_int32)); + EXPECT_EQ(kSampleInt32, expected_int32); + // Check the fourth boolean value. + bool expected_bool = true; + ASSERT_TRUE(ibus_object_reader.PopBool(&expected_bool)); + EXPECT_EQ(kSampleBool, expected_bool); + // Check the fifth value which is array of uint32. dbus::MessageReader array_reader(NULL); ASSERT_TRUE(ibus_object_reader.PopArray(&array_reader)); for (uint32 i = 0; i < kSampleArrayOfUint32Count; ++i) { - uint32 expected_uint32; + uint32 expected_uint32 = 0; ASSERT_TRUE(array_reader.PopUint32(&expected_uint32)); EXPECT_EQ(i, expected_uint32); } - // Check the fourth value which is IBusObject. + // Check the sixth value which is IBusObject. IBusObjectReader ibus_nested_object_reader(kSampleTypeName2, NULL); ibus_object_reader.PopIBusObject(&ibus_nested_object_reader); std::string expected_text2; @@ -87,4 +101,60 @@ TEST(IBusObjectTest, EmptyEntryTest) { EXPECT_FALSE(ibus_object_reader.HasMoreData()); } +TEST(IBusObjectTest, PopAppendIBusTextTest) { + const char kSampleTypeName[] = "Empty IBusObject Name"; + const char kSampleString[] = "Sapmle String"; + IBusText::SelectionAttribute selection_attribute; + selection_attribute.start_index = 0UL; + selection_attribute.end_index = 10UL; + scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); + + // Write IBusText. + dbus::MessageWriter writer(message.get()); + IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); + IBusText ibus_text; + ibus_text.mutable_selection_attributes()->push_back(selection_attribute); + ibus_text.set_text(kSampleString); + ibus_object_writer.AppendIBusText(ibus_text); + ibus_object_writer.CloseAll(); + + // Read IBusText; + dbus::MessageReader reader(message.get()); + IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); + IBusText result_text; + ASSERT_TRUE(ibus_object_reader.Init()); + ASSERT_TRUE(ibus_object_reader.PopIBusText(&result_text)); + EXPECT_FALSE(ibus_object_reader.HasMoreData()); + EXPECT_EQ(kSampleString, result_text.text()); + const std::vector<IBusText::SelectionAttribute>& selection_attributes = + result_text.selection_attributes(); + ASSERT_EQ(1UL, selection_attributes.size()); + EXPECT_EQ(selection_attribute.start_index, + selection_attributes[0].start_index); + EXPECT_EQ(selection_attribute.end_index, + selection_attributes[0].end_index); +} + +TEST(IBusObjectTest, PopAppendStringAsIBusText) { + const char kSampleTypeName[] = "Empty IBusObject Name"; + const char kSampleString[] = "Sapmle String"; + scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); + + // Write string as IBusText. + dbus::MessageWriter writer(message.get()); + IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); + ibus_object_writer.AppendStringAsIBusText(kSampleString); + ibus_object_writer.CloseAll(); + + // Read string from IBusText; + dbus::MessageReader reader(message.get()); + IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); + std::string result_str; + ASSERT_TRUE(ibus_object_reader.Init()); + ASSERT_TRUE(ibus_object_reader.PopStringFromIBusText(&result_str)); + EXPECT_FALSE(ibus_object_reader.HasMoreData()); + EXPECT_EQ(kSampleString, result_str); +} + +} // namespace ibus } // namespace chromeos |