summaryrefslogtreecommitdiffstats
path: root/chromeos/dbus
diff options
context:
space:
mode:
authornona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-22 16:51:03 +0000
committernona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-22 16:51:03 +0000
commit59f505ddbb0c0a566a312ffaf37cfc828dc3193a (patch)
treed983ee3585fcab0c5a57c44cec0aa33e166a8a93 /chromeos/dbus
parent4e676929f1fc85affa0d655ccbf6e5a237b33e0d (diff)
downloadchromium_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.cc49
-rw-r--r--chromeos/dbus/ibus/ibus_object.h32
-rw-r--r--chromeos/dbus/ibus/ibus_object_unittest.cc80
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