| 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 // TODO(nona): Add more test case, especially fail case. | 4 // TODO(nona): Add more test case, especially fail case. | 
| 5 | 5 | 
| 6 #include "chromeos/dbus/ibus/ibus_object.h" | 6 #include "chromeos/dbus/ibus/ibus_object.h" | 
| 7 | 7 | 
| 8 #include <string> | 8 #include <string> | 
| 9 #include <vector> | 9 #include <vector> | 
| 10 #include "base/logging.h" | 10 #include "base/logging.h" | 
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" | 
|  | 12 #include "base/values.h" | 
| 12 #include "dbus/message.h" | 13 #include "dbus/message.h" | 
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" | 
| 14 | 15 | 
| 15 namespace chromeos { | 16 namespace chromeos { | 
| 16 // TODO(nona): Remove ibus namespace after complete libibus removal. | 17 // TODO(nona): Remove ibus namespace after complete libibus removal. | 
| 17 namespace ibus { | 18 namespace ibus { | 
| 18 | 19 | 
| 19 TEST(IBusObjectTest, WriteReadTest) { | 20 TEST(IBusObjectTest, WriteReadTest) { | 
| 20   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 21   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 
| 21   dbus::MessageWriter writer(message.get()); | 22   dbus::MessageWriter writer(message.get()); | 
| 22 | 23 | 
| 23   const char kSampleTypeName1[] = "Sample Type Name 1"; | 24   const char kSampleTypeName1[] = "Sample Type Name 1"; | 
| 24   const char kSampleTypeName2[] = "Sample Type Name 2"; | 25   const char kSampleTypeName2[] = "Sample Type Name 2"; | 
| 25   const char kSampleText1[] = "Sample Text 1"; | 26   const char kSampleText1[] = "Sample Text 1"; | 
| 26   const char kSampleText2[] = "Sample Text 2"; | 27   const char kSampleText2[] = "Sample Text 2"; | 
| 27   const uint32 kSampleUint32 = 12345UL; | 28   const uint32 kSampleUint32 = 12345UL; | 
| 28   const int32 kSampleInt32 = 54321; | 29   const int32 kSampleInt32 = 54321; | 
| 29   const bool kSampleBool = false; | 30   const bool kSampleBool = false; | 
| 30   const uint32 kSampleArrayOfUint32Count = 10UL; | 31   const uint32 kSampleArrayOfUint32Count = 10UL; | 
|  | 32   const char kAttachmentKey[] = "key"; | 
|  | 33   const char kStringAttachment[] = "Attachment String Value"; | 
| 31 | 34 | 
| 32   // Create ibus object. | 35   // Create ibus object. | 
| 33   IBusObjectWriter ibus_object_writer(kSampleTypeName1, "suibauv", &writer); | 36   IBusObjectWriter ibus_object_writer(kSampleTypeName1, "suibauv", &writer); | 
|  | 37 | 
|  | 38   // Write attachment field. | 
|  | 39   scoped_ptr<base::Value> write_value( | 
|  | 40       base::Value::CreateStringValue(kStringAttachment)); | 
|  | 41   ibus_object_writer.AddAttachment(kAttachmentKey, *write_value.get()); | 
|  | 42   ibus_object_writer.CloseHeader(); | 
|  | 43 | 
|  | 44   // Write contents values. | 
| 34   ibus_object_writer.AppendString(kSampleText1); | 45   ibus_object_writer.AppendString(kSampleText1); | 
| 35   ibus_object_writer.AppendUint32(kSampleUint32); | 46   ibus_object_writer.AppendUint32(kSampleUint32); | 
| 36   ibus_object_writer.AppendInt32(kSampleInt32); | 47   ibus_object_writer.AppendInt32(kSampleInt32); | 
| 37   ibus_object_writer.AppendBool(kSampleBool); | 48   ibus_object_writer.AppendBool(kSampleBool); | 
| 38   dbus::MessageWriter array_writer(NULL); | 49   dbus::MessageWriter array_writer(NULL); | 
| 39   ibus_object_writer.OpenArray("u", &array_writer); | 50   ibus_object_writer.OpenArray("u", &array_writer); | 
| 40   for (uint32 i = 0; i < kSampleArrayOfUint32Count; ++i) | 51   for (uint32 i = 0; i < kSampleArrayOfUint32Count; ++i) | 
| 41     array_writer.AppendUint32(i); | 52     array_writer.AppendUint32(i); | 
| 42   ibus_object_writer.CloseContainer(&array_writer); | 53   ibus_object_writer.CloseContainer(&array_writer); | 
| 43   IBusObjectWriter ibus_nested_object_writer(kSampleTypeName2, "s", NULL); | 54   IBusObjectWriter ibus_nested_object_writer(kSampleTypeName2, "s", NULL); | 
| 44   ibus_object_writer.AppendIBusObject(&ibus_nested_object_writer); | 55   ibus_object_writer.AppendIBusObject(&ibus_nested_object_writer); | 
|  | 56   ibus_nested_object_writer.CloseHeader(); | 
| 45   ibus_nested_object_writer.AppendString(kSampleText2); | 57   ibus_nested_object_writer.AppendString(kSampleText2); | 
| 46   ibus_object_writer.CloseAll(); | 58   ibus_object_writer.CloseAll(); | 
| 47 | 59 | 
| 48   // Read ibus_object. | 60   // Read ibus_object. | 
| 49   dbus::MessageReader reader(message.get()); | 61   dbus::MessageReader reader(message.get()); | 
| 50   IBusObjectReader ibus_object_reader(kSampleTypeName1, &reader); | 62   IBusObjectReader ibus_object_reader(kSampleTypeName1, &reader); | 
| 51   ASSERT_TRUE(ibus_object_reader.Init()); | 63   ASSERT_TRUE(ibus_object_reader.Init()); | 
|  | 64   // Check the attachment value; | 
|  | 65   const base::Value* read_value = | 
|  | 66       ibus_object_reader.GetAttachment(kAttachmentKey); | 
|  | 67   ASSERT_TRUE(read_value); | 
|  | 68   std::string attachment_value; | 
|  | 69   ASSERT_TRUE(read_value->GetAsString(&attachment_value)); | 
|  | 70   EXPECT_EQ(kStringAttachment, attachment_value); | 
| 52   // Check the first string value. | 71   // Check the first string value. | 
| 53   std::string expected_string; | 72   std::string expected_string; | 
| 54   ASSERT_TRUE(ibus_object_reader.PopString(&expected_string)); | 73   ASSERT_TRUE(ibus_object_reader.PopString(&expected_string)); | 
| 55   EXPECT_EQ(kSampleText1, expected_string); | 74   EXPECT_EQ(kSampleText1, expected_string); | 
| 56   // Check the second uint32 value. | 75   // Check the second uint32 value. | 
| 57   uint32 expected_uint32 = 0UL; | 76   uint32 expected_uint32 = 0UL; | 
| 58   ASSERT_TRUE(ibus_object_reader.PopUint32(&expected_uint32)); | 77   ASSERT_TRUE(ibus_object_reader.PopUint32(&expected_uint32)); | 
| 59   EXPECT_EQ(kSampleUint32, expected_uint32); | 78   EXPECT_EQ(kSampleUint32, expected_uint32); | 
| 60   // Check the third int value. | 79   // Check the third int value. | 
| 61   int32 expected_int32 = 0; | 80   int32 expected_int32 = 0; | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 86   EXPECT_FALSE(reader.HasMoreData()); | 105   EXPECT_FALSE(reader.HasMoreData()); | 
| 87 } | 106 } | 
| 88 | 107 | 
| 89 TEST(IBusObjectTest, EmptyEntryTest) { | 108 TEST(IBusObjectTest, EmptyEntryTest) { | 
| 90   const char kSampleTypeName[] = "Empty IBusObject Name"; | 109   const char kSampleTypeName[] = "Empty IBusObject Name"; | 
| 91   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 110   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 
| 92 | 111 | 
| 93   // Write empty IBusObject. | 112   // Write empty IBusObject. | 
| 94   dbus::MessageWriter writer(message.get()); | 113   dbus::MessageWriter writer(message.get()); | 
| 95   IBusObjectWriter ibus_object_writer(kSampleTypeName, "", &writer); | 114   IBusObjectWriter ibus_object_writer(kSampleTypeName, "", &writer); | 
|  | 115   ibus_object_writer.CloseHeader(); | 
| 96   ibus_object_writer.CloseAll(); | 116   ibus_object_writer.CloseAll(); | 
| 97 | 117 | 
| 98   // Read empty IBusObject. | 118   // Read empty IBusObject. | 
| 99   dbus::MessageReader reader(message.get()); | 119   dbus::MessageReader reader(message.get()); | 
| 100   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 120   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 
| 101   ASSERT_TRUE(ibus_object_reader.Init()); | 121   ASSERT_TRUE(ibus_object_reader.Init()); | 
| 102   EXPECT_FALSE(ibus_object_reader.HasMoreData()); | 122   EXPECT_FALSE(ibus_object_reader.HasMoreData()); | 
| 103 } | 123 } | 
| 104 | 124 | 
| 105 TEST(IBusObjectTest, PopAppendIBusTextTest) { | 125 TEST(IBusObjectTest, PopAppendIBusTextTest) { | 
| 106   const char kSampleTypeName[] = "Empty IBusObject Name"; | 126   const char kSampleTypeName[] = "Empty IBusObject Name"; | 
| 107   const char kSampleString[] = "Sapmle String"; | 127   const char kSampleString[] = "Sapmle String"; | 
| 108   IBusText::SelectionAttribute selection_attribute; | 128   IBusText::SelectionAttribute selection_attribute; | 
| 109   selection_attribute.start_index = 0UL; | 129   selection_attribute.start_index = 0UL; | 
| 110   selection_attribute.end_index = 10UL; | 130   selection_attribute.end_index = 10UL; | 
| 111   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 131   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 
| 112 | 132 | 
| 113   // Write IBusText. | 133   // Write IBusText. | 
| 114   dbus::MessageWriter writer(message.get()); | 134   dbus::MessageWriter writer(message.get()); | 
| 115   IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); | 135   IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); | 
|  | 136   ibus_object_writer.CloseHeader(); | 
| 116   IBusText ibus_text; | 137   IBusText ibus_text; | 
| 117   ibus_text.mutable_selection_attributes()->push_back(selection_attribute); | 138   ibus_text.mutable_selection_attributes()->push_back(selection_attribute); | 
| 118   ibus_text.set_text(kSampleString); | 139   ibus_text.set_text(kSampleString); | 
| 119   ibus_object_writer.AppendIBusText(ibus_text); | 140   ibus_object_writer.AppendIBusText(ibus_text); | 
| 120   ibus_object_writer.CloseAll(); | 141   ibus_object_writer.CloseAll(); | 
| 121 | 142 | 
| 122   // Read IBusText; | 143   // Read IBusText; | 
| 123   dbus::MessageReader reader(message.get()); | 144   dbus::MessageReader reader(message.get()); | 
| 124   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 145   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 
| 125   IBusText result_text; | 146   IBusText result_text; | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 137 } | 158 } | 
| 138 | 159 | 
| 139 TEST(IBusObjectTest, PopAppendStringAsIBusText) { | 160 TEST(IBusObjectTest, PopAppendStringAsIBusText) { | 
| 140   const char kSampleTypeName[] = "Empty IBusObject Name"; | 161   const char kSampleTypeName[] = "Empty IBusObject Name"; | 
| 141   const char kSampleString[] = "Sapmle String"; | 162   const char kSampleString[] = "Sapmle String"; | 
| 142   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 163   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 
| 143 | 164 | 
| 144   // Write string as IBusText. | 165   // Write string as IBusText. | 
| 145   dbus::MessageWriter writer(message.get()); | 166   dbus::MessageWriter writer(message.get()); | 
| 146   IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); | 167   IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); | 
|  | 168   ibus_object_writer.CloseHeader(); | 
| 147   ibus_object_writer.AppendStringAsIBusText(kSampleString); | 169   ibus_object_writer.AppendStringAsIBusText(kSampleString); | 
| 148   ibus_object_writer.CloseAll(); | 170   ibus_object_writer.CloseAll(); | 
| 149 | 171 | 
| 150   // Read string from IBusText. | 172   // Read string from IBusText. | 
| 151   dbus::MessageReader reader(message.get()); | 173   dbus::MessageReader reader(message.get()); | 
| 152   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 174   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 
| 153   std::string result_str; | 175   std::string result_str; | 
| 154   ASSERT_TRUE(ibus_object_reader.Init()); | 176   ASSERT_TRUE(ibus_object_reader.Init()); | 
| 155   ASSERT_TRUE(ibus_object_reader.PopStringFromIBusText(&result_str)); | 177   ASSERT_TRUE(ibus_object_reader.PopStringFromIBusText(&result_str)); | 
| 156   EXPECT_FALSE(ibus_object_reader.HasMoreData()); | 178   EXPECT_FALSE(ibus_object_reader.HasMoreData()); | 
| 157   EXPECT_EQ(kSampleString, result_str); | 179   EXPECT_EQ(kSampleString, result_str); | 
| 158 } | 180 } | 
| 159 | 181 | 
| 160 TEST(IBusObjectTest, AttachmentTest) { |  | 
| 161   // The IBusObjectWriter does not support attachment field writing, so crate |  | 
| 162   // IBusObject with attachment field manually. |  | 
| 163   const char kSampleTypeName[] = "IBusObject Name"; |  | 
| 164   const char kSampleDictKey[] = "Sample Key"; |  | 
| 165   const char kSampleText[] = "SampleText"; |  | 
| 166   scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); |  | 
| 167   dbus::MessageWriter writer(message.get()); |  | 
| 168 |  | 
| 169   // Create IBusObject header. |  | 
| 170   dbus::MessageWriter top_variant_writer(NULL); |  | 
| 171   writer.OpenVariant("(sa{sv})", &top_variant_writer); |  | 
| 172   dbus::MessageWriter contents_writer(NULL); |  | 
| 173   top_variant_writer.OpenStruct(&contents_writer); |  | 
| 174   contents_writer.AppendString(kSampleTypeName); |  | 
| 175 |  | 
| 176   // Write values into attachment field. |  | 
| 177   dbus::MessageWriter attachment_array_writer(NULL); |  | 
| 178   contents_writer.OpenArray("{sv}", &attachment_array_writer); |  | 
| 179   dbus::MessageWriter entry_writer(NULL); |  | 
| 180   attachment_array_writer.OpenDictEntry(&entry_writer); |  | 
| 181   entry_writer.AppendString(kSampleDictKey); |  | 
| 182   dbus::MessageWriter variant_writer(NULL); |  | 
| 183   entry_writer.OpenVariant("s",&variant_writer); |  | 
| 184   variant_writer.AppendString(kSampleText); |  | 
| 185 |  | 
| 186   // Close all containers. |  | 
| 187   entry_writer.CloseContainer(&variant_writer); |  | 
| 188   attachment_array_writer.CloseContainer(&entry_writer); |  | 
| 189   contents_writer.CloseContainer(&attachment_array_writer); |  | 
| 190   top_variant_writer.CloseContainer(&contents_writer); |  | 
| 191   writer.CloseContainer(&top_variant_writer); |  | 
| 192 |  | 
| 193   // Read with IBusObjectReader. |  | 
| 194   dbus::MessageReader reader(message.get()); |  | 
| 195   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); |  | 
| 196   dbus::MessageReader attr_reader(NULL); |  | 
| 197   ASSERT_TRUE(ibus_object_reader.InitWithAttachmentReader(&attr_reader)); |  | 
| 198   dbus::MessageReader dict_reader(NULL); |  | 
| 199 |  | 
| 200   // Check the values. |  | 
| 201   ASSERT_TRUE(attr_reader.PopDictEntry(&dict_reader)); |  | 
| 202   std::string key; |  | 
| 203   std::string value; |  | 
| 204 |  | 
| 205   ASSERT_TRUE(dict_reader.PopString(&key)); |  | 
| 206   EXPECT_EQ(kSampleDictKey, key); |  | 
| 207 |  | 
| 208   dbus::MessageReader variant_reader(NULL); |  | 
| 209   ASSERT_TRUE(dict_reader.PopVariant(&variant_reader)); |  | 
| 210   ASSERT_TRUE(variant_reader.PopString(&value)); |  | 
| 211   EXPECT_EQ(kSampleText, value); |  | 
| 212 } |  | 
| 213 |  | 
| 214 TEST(IBusObjectTest, PopAppendIBusPropertyTest) { | 182 TEST(IBusObjectTest, PopAppendIBusPropertyTest) { | 
| 215   const char kSampleTypeName[] = "Empty IBusObject Name"; | 183   const char kSampleTypeName[] = "Empty IBusObject Name"; | 
| 216   const char kSampleKey[] = "Key"; | 184   const char kSampleKey[] = "Key"; | 
| 217   const IBusProperty::IBusPropertyType kSampleType = | 185   const IBusProperty::IBusPropertyType kSampleType = | 
| 218       IBusProperty::IBUS_PROPERTY_TYPE_MENU; | 186       IBusProperty::IBUS_PROPERTY_TYPE_MENU; | 
| 219   const char kSampleLabel[] = "Label"; | 187   const char kSampleLabel[] = "Label"; | 
| 220   const char kSampleTooltip[] = "Tooltip"; | 188   const char kSampleTooltip[] = "Tooltip"; | 
| 221   const bool kSampleVisible = true; | 189   const bool kSampleVisible = true; | 
| 222   const bool kSampleChecked = false; | 190   const bool kSampleChecked = false; | 
| 223   scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | 191   scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | 
| 224 | 192 | 
| 225   // Create IBusProperty. | 193   // Create IBusProperty. | 
| 226   ibus::IBusProperty property; | 194   ibus::IBusProperty property; | 
| 227   property.set_key(kSampleKey); | 195   property.set_key(kSampleKey); | 
| 228   property.set_type(kSampleType); | 196   property.set_type(kSampleType); | 
| 229   property.set_label(kSampleLabel); | 197   property.set_label(kSampleLabel); | 
| 230   property.set_tooltip(kSampleTooltip); | 198   property.set_tooltip(kSampleTooltip); | 
| 231   property.set_visible(kSampleVisible); | 199   property.set_visible(kSampleVisible); | 
| 232   property.set_checked(kSampleChecked); | 200   property.set_checked(kSampleChecked); | 
| 233 | 201 | 
| 234   // Write a IBusProperty. | 202   // Write a IBusProperty. | 
| 235   dbus::MessageWriter writer(response.get()); | 203   dbus::MessageWriter writer(response.get()); | 
| 236   IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); | 204   IBusObjectWriter ibus_object_writer(kSampleTypeName, "v", &writer); | 
|  | 205   ibus_object_writer.CloseHeader(); | 
| 237   ibus_object_writer.AppendIBusProperty(property); | 206   ibus_object_writer.AppendIBusProperty(property); | 
| 238   ibus_object_writer.CloseAll(); | 207   ibus_object_writer.CloseAll(); | 
| 239 | 208 | 
| 240   // Read string from IBusText. | 209   // Read string from IBusText. | 
| 241   dbus::MessageReader reader(response.get()); | 210   dbus::MessageReader reader(response.get()); | 
| 242   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 211   IBusObjectReader ibus_object_reader(kSampleTypeName, &reader); | 
| 243   ibus::IBusProperty result_property; | 212   ibus::IBusProperty result_property; | 
| 244   ASSERT_TRUE(ibus_object_reader.Init()); | 213   ASSERT_TRUE(ibus_object_reader.Init()); | 
| 245   ASSERT_TRUE(ibus_object_reader.PopIBusProperty(&result_property)); | 214   ASSERT_TRUE(ibus_object_reader.PopIBusProperty(&result_property)); | 
| 246   EXPECT_EQ(kSampleKey, result_property.key()); | 215   EXPECT_EQ(kSampleKey, result_property.key()); | 
| 247   EXPECT_EQ(kSampleType, result_property.type()); | 216   EXPECT_EQ(kSampleType, result_property.type()); | 
| 248   EXPECT_EQ(kSampleLabel, result_property.label()); | 217   EXPECT_EQ(kSampleLabel, result_property.label()); | 
| 249   EXPECT_EQ(kSampleTooltip, result_property.tooltip()); | 218   EXPECT_EQ(kSampleTooltip, result_property.tooltip()); | 
| 250   EXPECT_EQ(kSampleVisible, result_property.visible()); | 219   EXPECT_EQ(kSampleVisible, result_property.visible()); | 
| 251   EXPECT_EQ(kSampleChecked, result_property.checked()); | 220   EXPECT_EQ(kSampleChecked, result_property.checked()); | 
| 252 } | 221 } | 
| 253 | 222 | 
| 254 }  // namespace ibus | 223 }  // namespace ibus | 
| 255 }  // namespace chromeos | 224 }  // namespace chromeos | 
| OLD | NEW | 
|---|