Home | History | Annotate | Download | only in ibus
      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 // TODO(nona): Add more tests.
      5 
      6 #include "chromeos/dbus/ibus/ibus_lookup_table.h"
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/logging.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "chromeos/dbus/ibus/ibus_object.h"
     14 #include "chromeos/dbus/ibus/ibus_text.h"
     15 #include "dbus/message.h"
     16 #include "testing/gmock/include/gmock/gmock.h"
     17 #include "testing/gtest/include/gtest/gtest.h"
     18 
     19 namespace chromeos {
     20 
     21 TEST(IBusLookupTable, WriteReadTest) {
     22   const char kSampleText1[] = "Sample Text 1";
     23   const char kSampleText2[] = "Sample Text 2";
     24   const char kSampleLabel1[] = "Sample Label 1";
     25   const char kSampleLabel2[] = "Sample Label 2";
     26   const uint32 kPageSize = 11;
     27   const uint32 kCursorPosition = 12;
     28   const bool kIsCursorVisible = true;
     29   const IBusLookupTable::Orientation kOrientation =
     30       IBusLookupTable::VERTICAL;
     31 
     32   // Create IBusLookupTable.
     33   IBusLookupTable lookup_table;
     34   lookup_table.set_page_size(kPageSize);
     35   lookup_table.set_cursor_position(kCursorPosition);
     36   lookup_table.set_is_cursor_visible(kIsCursorVisible);
     37   lookup_table.set_orientation(kOrientation);
     38   std::vector<IBusLookupTable::Entry>* candidates =
     39       lookup_table.mutable_candidates();
     40   IBusLookupTable::Entry entry1;
     41   entry1.value = kSampleText1;
     42   entry1.label = kSampleLabel1;
     43   candidates->push_back(entry1);
     44 
     45   IBusLookupTable::Entry entry2;
     46   entry2.value = kSampleText2;
     47   entry2.label = kSampleLabel2;
     48   candidates->push_back(entry2);
     49 
     50   // Write IBusLookupTable.
     51   scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
     52   dbus::MessageWriter writer(response.get());
     53   AppendIBusLookupTable(lookup_table, &writer);
     54 
     55   // Read IBusLookupTable.
     56   IBusLookupTable target_lookup_table;
     57   dbus::MessageReader reader(response.get());
     58   PopIBusLookupTable(&reader, &target_lookup_table);
     59 
     60   // Check values.
     61   EXPECT_EQ(kPageSize, target_lookup_table.page_size());
     62   EXPECT_EQ(kCursorPosition, target_lookup_table.cursor_position());
     63   EXPECT_TRUE(kIsCursorVisible == target_lookup_table.is_cursor_visible());
     64   EXPECT_EQ(kOrientation, target_lookup_table.orientation());
     65   ASSERT_EQ(2UL, target_lookup_table.candidates().size());
     66   EXPECT_EQ(kSampleText1, target_lookup_table.candidates().at(0).value);
     67   EXPECT_EQ(kSampleText2, target_lookup_table.candidates().at(1).value);
     68   EXPECT_EQ(kSampleLabel1, target_lookup_table.candidates().at(0).label);
     69   EXPECT_EQ(kSampleLabel2, target_lookup_table.candidates().at(1).label);
     70 }
     71 
     72 TEST(IBusLookupTable, WriteReadWithoutLableTest) {
     73   const char kSampleText1[] = "Sample Text 1";
     74   const char kSampleText2[] = "Sample Text 2";
     75   const uint32 kPageSize = 11;
     76   const uint32 kCursorPosition = 12;
     77   const bool kIsCursorVisible = true;
     78   const IBusLookupTable::Orientation kOrientation =
     79       IBusLookupTable::VERTICAL;
     80 
     81   // Create IBusLookupTable.
     82   IBusLookupTable lookup_table;
     83   lookup_table.set_page_size(kPageSize);
     84   lookup_table.set_cursor_position(kCursorPosition);
     85   lookup_table.set_is_cursor_visible(kIsCursorVisible);
     86   lookup_table.set_orientation(kOrientation);
     87   std::vector<IBusLookupTable::Entry>* candidates =
     88       lookup_table.mutable_candidates();
     89   IBusLookupTable::Entry entry1;
     90   entry1.value = kSampleText1;
     91   candidates->push_back(entry1);
     92 
     93   IBusLookupTable::Entry entry2;
     94   entry2.value = kSampleText2;
     95   candidates->push_back(entry2);
     96 
     97   // Write IBusLookupTable.
     98   scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
     99   dbus::MessageWriter writer(response.get());
    100   AppendIBusLookupTable(lookup_table, &writer);
    101 
    102   // Read IBusLookupTable.
    103   IBusLookupTable target_lookup_table;
    104   dbus::MessageReader reader(response.get());
    105   PopIBusLookupTable(&reader, &target_lookup_table);
    106 
    107   // Check values.
    108   EXPECT_EQ(kPageSize, target_lookup_table.page_size());
    109   EXPECT_EQ(kCursorPosition, target_lookup_table.cursor_position());
    110   EXPECT_EQ(kIsCursorVisible, target_lookup_table.is_cursor_visible());
    111   EXPECT_EQ(kOrientation, target_lookup_table.orientation());
    112   ASSERT_EQ(2UL, target_lookup_table.candidates().size());
    113   EXPECT_EQ(kSampleText1, target_lookup_table.candidates().at(0).value);
    114   EXPECT_EQ(kSampleText2, target_lookup_table.candidates().at(1).value);
    115   EXPECT_TRUE(target_lookup_table.candidates().at(0).label.empty());
    116   EXPECT_TRUE(target_lookup_table.candidates().at(1).label.empty());
    117 }
    118 
    119 TEST(IBusLookupTable, ReadMozcCandidateTest) {
    120   // IBusObjectWriter does not support attachment field handling, so manually
    121   // create IBusLookupTable with mozc.candidates attachment.
    122   const char kSampleText1[] = "Sample Text 1";
    123   const char kSampleText2[] = "Sample Text 2";
    124   const char kSampleLabel1[] = "Sample Label 1";
    125   const char kSampleLabel2[] = "Sample Label 2";
    126   const uint32 kPageSize = 11;
    127   const uint32 kCursorPosition = 12;
    128   const bool kIsCursorVisible = true;
    129   const IBusLookupTable::Orientation kOrientation =
    130       IBusLookupTable::VERTICAL;
    131   const bool kShowWindowAtComposition = false;
    132 
    133   // Create IBusLookupTable.
    134   scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
    135   dbus::MessageWriter writer(response.get());
    136   dbus::MessageWriter top_variant_writer(NULL);
    137   writer.OpenVariant("(sa{sv}uubbiavav)", &top_variant_writer);
    138   dbus::MessageWriter contents_writer(NULL);
    139   top_variant_writer.OpenStruct(&contents_writer);
    140   contents_writer.AppendString("IBusLookupTable");
    141 
    142   // Write attachment field.
    143   dbus::MessageWriter attachment_array_writer(NULL);
    144   contents_writer.OpenArray("{sv}", &attachment_array_writer);
    145   dbus::MessageWriter entry_writer(NULL);
    146   attachment_array_writer.OpenDictEntry(&entry_writer);
    147   entry_writer.AppendString("show_window_at_composition");
    148   dbus::MessageWriter variant_writer(NULL);
    149   entry_writer.OpenVariant("v", &variant_writer);
    150   dbus::MessageWriter sub_variant_writer(NULL);
    151   variant_writer.OpenVariant("b", &sub_variant_writer);
    152   sub_variant_writer.AppendBool(kShowWindowAtComposition);
    153 
    154   // Close attachment field container.
    155   variant_writer.CloseContainer(&sub_variant_writer);
    156   entry_writer.CloseContainer(&variant_writer);
    157   attachment_array_writer.CloseContainer(&entry_writer);
    158   contents_writer.CloseContainer(&attachment_array_writer);
    159 
    160   // Write IBusLookupTable contents.
    161   contents_writer.AppendUint32(kPageSize);
    162   contents_writer.AppendUint32(kCursorPosition);
    163   contents_writer.AppendBool(kIsCursorVisible);
    164   contents_writer.AppendBool(false);
    165   contents_writer.AppendInt32(static_cast<int32>(kOrientation));
    166 
    167   // Write entries
    168   dbus::MessageWriter text_writer(NULL);
    169   contents_writer.OpenArray("v", &text_writer);
    170   AppendStringAsIBusText(kSampleText1, &text_writer);
    171   AppendStringAsIBusText(kSampleText2, &text_writer);
    172   contents_writer.CloseContainer(&text_writer);
    173   dbus::MessageWriter label_writer(NULL);
    174   contents_writer.OpenArray("v", &label_writer);
    175   AppendStringAsIBusText(kSampleLabel1, &label_writer);
    176   AppendStringAsIBusText(kSampleLabel2, &label_writer);
    177   contents_writer.CloseContainer(&label_writer);
    178 
    179   // Close all containers.
    180   top_variant_writer.CloseContainer(&contents_writer);
    181   writer.CloseContainer(&top_variant_writer);
    182 
    183   // Read IBusLookupTable.
    184   IBusLookupTable target_lookup_table;
    185   dbus::MessageReader reader(response.get());
    186   PopIBusLookupTable(&reader, &target_lookup_table);
    187 
    188   // Check values.
    189   EXPECT_EQ(kPageSize, target_lookup_table.page_size());
    190   EXPECT_EQ(kCursorPosition, target_lookup_table.cursor_position());
    191   EXPECT_EQ(kIsCursorVisible, target_lookup_table.is_cursor_visible());
    192   EXPECT_EQ(kOrientation, target_lookup_table.orientation());
    193   ASSERT_EQ(2UL, target_lookup_table.candidates().size());
    194   EXPECT_EQ(kSampleText1, target_lookup_table.candidates().at(0).value);
    195   EXPECT_EQ(kSampleText2, target_lookup_table.candidates().at(1).value);
    196   EXPECT_EQ(kSampleLabel1, target_lookup_table.candidates().at(0).label);
    197   EXPECT_EQ(kSampleLabel2, target_lookup_table.candidates().at(1).label);
    198   EXPECT_TRUE(kShowWindowAtComposition ==
    199               target_lookup_table.show_window_at_composition());
    200 }
    201 
    202 TEST(IBusLookupTable, IsEqualTest) {
    203   IBusLookupTable table1;
    204   IBusLookupTable table2;
    205 
    206   const char kSampleString1[] = "Sample 1";
    207   const char kSampleString2[] = "Sample 2";
    208 
    209   EXPECT_TRUE(table1.IsEqual(table2));
    210   EXPECT_TRUE(table2.IsEqual(table1));
    211 
    212   table1.set_page_size(1);
    213   table2.set_page_size(2);
    214   EXPECT_FALSE(table1.IsEqual(table2));
    215   EXPECT_FALSE(table2.IsEqual(table1));
    216   table2.set_page_size(1);
    217 
    218   table1.set_cursor_position(1);
    219   table2.set_cursor_position(2);
    220   EXPECT_FALSE(table1.IsEqual(table2));
    221   EXPECT_FALSE(table2.IsEqual(table1));
    222   table2.set_cursor_position(1);
    223 
    224   table1.set_is_cursor_visible(true);
    225   table2.set_is_cursor_visible(false);
    226   EXPECT_FALSE(table1.IsEqual(table2));
    227   EXPECT_FALSE(table2.IsEqual(table1));
    228   table2.set_is_cursor_visible(true);
    229 
    230   table1.set_orientation(IBusLookupTable::HORIZONTAL);
    231   table2.set_orientation(IBusLookupTable::VERTICAL);
    232   EXPECT_FALSE(table1.IsEqual(table2));
    233   EXPECT_FALSE(table2.IsEqual(table1));
    234   table2.set_orientation(IBusLookupTable::HORIZONTAL);
    235 
    236   table1.set_show_window_at_composition(true);
    237   table2.set_show_window_at_composition(false);
    238   EXPECT_FALSE(table1.IsEqual(table2));
    239   EXPECT_FALSE(table2.IsEqual(table1));
    240   table2.set_show_window_at_composition(true);
    241 
    242   // Check equality for candidates member variable.
    243   IBusLookupTable::Entry entry1;
    244   IBusLookupTable::Entry entry2;
    245 
    246   table1.mutable_candidates()->push_back(entry1);
    247   EXPECT_FALSE(table1.IsEqual(table2));
    248   EXPECT_FALSE(table2.IsEqual(table1));
    249   table2.mutable_candidates()->push_back(entry2);
    250   EXPECT_TRUE(table1.IsEqual(table2));
    251   EXPECT_TRUE(table2.IsEqual(table1));
    252 
    253   entry1.value = kSampleString1;
    254   entry2.value = kSampleString2;
    255   table1.mutable_candidates()->push_back(entry1);
    256   table2.mutable_candidates()->push_back(entry2);
    257   EXPECT_FALSE(table1.IsEqual(table2));
    258   EXPECT_FALSE(table2.IsEqual(table1));
    259   table1.mutable_candidates()->clear();
    260   table2.mutable_candidates()->clear();
    261 
    262   entry1.label = kSampleString1;
    263   entry2.label = kSampleString2;
    264   table1.mutable_candidates()->push_back(entry1);
    265   table2.mutable_candidates()->push_back(entry2);
    266   EXPECT_FALSE(table1.IsEqual(table2));
    267   EXPECT_FALSE(table2.IsEqual(table1));
    268   table1.mutable_candidates()->clear();
    269   table2.mutable_candidates()->clear();
    270 
    271   entry1.annotation = kSampleString1;
    272   entry2.annotation = kSampleString2;
    273   table1.mutable_candidates()->push_back(entry1);
    274   table2.mutable_candidates()->push_back(entry2);
    275   EXPECT_FALSE(table1.IsEqual(table2));
    276   EXPECT_FALSE(table2.IsEqual(table1));
    277   table1.mutable_candidates()->clear();
    278   table2.mutable_candidates()->clear();
    279 
    280   entry1.description_title = kSampleString1;
    281   entry2.description_title = kSampleString2;
    282   table1.mutable_candidates()->push_back(entry1);
    283   table2.mutable_candidates()->push_back(entry2);
    284   EXPECT_FALSE(table1.IsEqual(table2));
    285   EXPECT_FALSE(table2.IsEqual(table1));
    286   table1.mutable_candidates()->clear();
    287   table2.mutable_candidates()->clear();
    288 
    289   entry1.description_body = kSampleString1;
    290   entry2.description_body = kSampleString2;
    291   table1.mutable_candidates()->push_back(entry1);
    292   table2.mutable_candidates()->push_back(entry2);
    293   EXPECT_FALSE(table1.IsEqual(table2));
    294   EXPECT_FALSE(table2.IsEqual(table1));
    295   table1.mutable_candidates()->clear();
    296   table2.mutable_candidates()->clear();
    297 }
    298 
    299 TEST(IBusLookupTable, CopyFromTest) {
    300   IBusLookupTable table1;
    301   IBusLookupTable table2;
    302 
    303   const char kSampleString[] = "Sample";
    304 
    305   table1.set_page_size(1);
    306   table1.set_cursor_position(2);
    307   table1.set_is_cursor_visible(false);
    308   table1.set_orientation(IBusLookupTable::HORIZONTAL);
    309   table1.set_show_window_at_composition(false);
    310 
    311   IBusLookupTable::Entry entry;
    312   entry.value = kSampleString;
    313   entry.label = kSampleString;
    314   entry.annotation = kSampleString;
    315   entry.description_title = kSampleString;
    316   entry.description_body = kSampleString;
    317   table1.mutable_candidates()->push_back(entry);
    318 
    319   table2.CopyFrom(table1);
    320   EXPECT_TRUE(table1.IsEqual(table2));
    321 }
    322 }  // namespace chromeos
    323