Home | History | Annotate | Download | only in ime
      1 // Copyright 2014 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 "ui/base/ime/candidate_window.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 "base/strings/utf_string_conversions.h"
     14 #include "testing/gtest/include/gtest/gtest.h"
     15 
     16 namespace ui {
     17 
     18 namespace {
     19 
     20 const size_t kSampleCandidateSize = 3;
     21 const char* kSampleCandidate[] = {
     22   "Sample Candidate 1",
     23   "Sample Candidate 2",
     24   "Sample Candidate 3",
     25 };
     26 const char* kSampleDescriptionTitle[] = {
     27   "Sample Description Title 1",
     28   "Sample Description Title 2",
     29   "Sample Description Title 3",
     30 };
     31 const char* kSampleDescriptionBody[] = {
     32   "Sample Description Body 1",
     33   "Sample Description Body 2",
     34   "Sample Description Body 3",
     35 };
     36 
     37 }
     38 
     39 TEST(CandidateWindow, IsEqualTest) {
     40   CandidateWindow cw1;
     41   CandidateWindow cw2;
     42 
     43   const base::string16 kSampleString1 = base::UTF8ToUTF16("Sample 1");
     44   const base::string16 kSampleString2 = base::UTF8ToUTF16("Sample 2");
     45 
     46   EXPECT_TRUE(cw1.IsEqual(cw2));
     47   EXPECT_TRUE(cw2.IsEqual(cw1));
     48 
     49   cw1.set_page_size(1);
     50   cw2.set_page_size(2);
     51   EXPECT_FALSE(cw1.IsEqual(cw2));
     52   EXPECT_FALSE(cw2.IsEqual(cw1));
     53   cw2.set_page_size(1);
     54 
     55   cw1.set_cursor_position(1);
     56   cw2.set_cursor_position(2);
     57   EXPECT_FALSE(cw1.IsEqual(cw2));
     58   EXPECT_FALSE(cw2.IsEqual(cw1));
     59   cw2.set_cursor_position(1);
     60 
     61   cw1.set_is_cursor_visible(true);
     62   cw2.set_is_cursor_visible(false);
     63   EXPECT_FALSE(cw1.IsEqual(cw2));
     64   EXPECT_FALSE(cw2.IsEqual(cw1));
     65   cw2.set_is_cursor_visible(true);
     66 
     67   cw1.set_orientation(CandidateWindow::HORIZONTAL);
     68   cw2.set_orientation(CandidateWindow::VERTICAL);
     69   EXPECT_FALSE(cw1.IsEqual(cw2));
     70   EXPECT_FALSE(cw2.IsEqual(cw1));
     71   cw2.set_orientation(CandidateWindow::HORIZONTAL);
     72 
     73   cw1.set_show_window_at_composition(true);
     74   cw2.set_show_window_at_composition(false);
     75   EXPECT_FALSE(cw1.IsEqual(cw2));
     76   EXPECT_FALSE(cw2.IsEqual(cw1));
     77   cw2.set_show_window_at_composition(true);
     78 
     79   // Check equality for candidates member variable.
     80   CandidateWindow::Entry entry1;
     81   CandidateWindow::Entry entry2;
     82 
     83   cw1.mutable_candidates()->push_back(entry1);
     84   EXPECT_FALSE(cw1.IsEqual(cw2));
     85   EXPECT_FALSE(cw2.IsEqual(cw1));
     86   cw2.mutable_candidates()->push_back(entry2);
     87   EXPECT_TRUE(cw1.IsEqual(cw2));
     88   EXPECT_TRUE(cw2.IsEqual(cw1));
     89 
     90   entry1.value = kSampleString1;
     91   entry2.value = kSampleString2;
     92   cw1.mutable_candidates()->push_back(entry1);
     93   cw2.mutable_candidates()->push_back(entry2);
     94   EXPECT_FALSE(cw1.IsEqual(cw2));
     95   EXPECT_FALSE(cw2.IsEqual(cw1));
     96   cw1.mutable_candidates()->clear();
     97   cw2.mutable_candidates()->clear();
     98 
     99   entry1.label = kSampleString1;
    100   entry2.label = kSampleString2;
    101   cw1.mutable_candidates()->push_back(entry1);
    102   cw2.mutable_candidates()->push_back(entry2);
    103   EXPECT_FALSE(cw1.IsEqual(cw2));
    104   EXPECT_FALSE(cw2.IsEqual(cw1));
    105   cw1.mutable_candidates()->clear();
    106   cw2.mutable_candidates()->clear();
    107 
    108   entry1.annotation = kSampleString1;
    109   entry2.annotation = kSampleString2;
    110   cw1.mutable_candidates()->push_back(entry1);
    111   cw2.mutable_candidates()->push_back(entry2);
    112   EXPECT_FALSE(cw1.IsEqual(cw2));
    113   EXPECT_FALSE(cw2.IsEqual(cw1));
    114   cw1.mutable_candidates()->clear();
    115   cw2.mutable_candidates()->clear();
    116 
    117   entry1.description_title = kSampleString1;
    118   entry2.description_title = kSampleString2;
    119   cw1.mutable_candidates()->push_back(entry1);
    120   cw2.mutable_candidates()->push_back(entry2);
    121   EXPECT_FALSE(cw1.IsEqual(cw2));
    122   EXPECT_FALSE(cw2.IsEqual(cw1));
    123   cw1.mutable_candidates()->clear();
    124   cw2.mutable_candidates()->clear();
    125 
    126   entry1.description_body = kSampleString1;
    127   entry2.description_body = kSampleString2;
    128   cw1.mutable_candidates()->push_back(entry1);
    129   cw2.mutable_candidates()->push_back(entry2);
    130   EXPECT_FALSE(cw1.IsEqual(cw2));
    131   EXPECT_FALSE(cw2.IsEqual(cw1));
    132   cw1.mutable_candidates()->clear();
    133   cw2.mutable_candidates()->clear();
    134 }
    135 
    136 TEST(CandidateWindow, CopyFromTest) {
    137   CandidateWindow cw1;
    138   CandidateWindow cw2;
    139 
    140   const base::string16 kSampleString = base::UTF8ToUTF16("Sample");
    141 
    142   cw1.set_page_size(1);
    143   cw1.set_cursor_position(2);
    144   cw1.set_is_cursor_visible(false);
    145   cw1.set_orientation(CandidateWindow::HORIZONTAL);
    146   cw1.set_show_window_at_composition(false);
    147 
    148   CandidateWindow::Entry entry;
    149   entry.value = kSampleString;
    150   entry.label = kSampleString;
    151   entry.annotation = kSampleString;
    152   entry.description_title = kSampleString;
    153   entry.description_body = kSampleString;
    154   cw1.mutable_candidates()->push_back(entry);
    155 
    156   cw2.CopyFrom(cw1);
    157   EXPECT_TRUE(cw1.IsEqual(cw2));
    158 }
    159 
    160 TEST(CandidateWindow, GetInfolistEntries_DenseCase) {
    161   CandidateWindow candidate_window;
    162   candidate_window.set_page_size(10);
    163   for (size_t i = 0; i < kSampleCandidateSize; ++i) {
    164     CandidateWindow::Entry entry;
    165     entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
    166     entry.description_title = base::UTF8ToUTF16(kSampleDescriptionTitle[i]);
    167     entry.description_body = base::UTF8ToUTF16(kSampleDescriptionBody[i]);
    168     candidate_window.mutable_candidates()->push_back(entry);
    169   }
    170   candidate_window.set_cursor_position(1);
    171 
    172   std::vector<InfolistEntry> infolist_entries;
    173   bool has_highlighted = false;
    174 
    175   candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
    176 
    177   EXPECT_EQ(kSampleCandidateSize, infolist_entries.size());
    178   EXPECT_TRUE(has_highlighted);
    179   EXPECT_TRUE(infolist_entries[1].highlighted);
    180 }
    181 
    182 TEST(CandidateWindow, GetInfolistEntries_SparseCase) {
    183   CandidateWindow candidate_window;
    184   candidate_window.set_page_size(10);
    185   for (size_t i = 0; i < kSampleCandidateSize; ++i) {
    186     CandidateWindow::Entry entry;
    187     entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
    188     candidate_window.mutable_candidates()->push_back(entry);
    189   }
    190 
    191   std::vector<CandidateWindow::Entry>* candidates =
    192       candidate_window.mutable_candidates();
    193   (*candidates)[2].description_title =
    194       base::UTF8ToUTF16(kSampleDescriptionTitle[2]);
    195   (*candidates)[2].description_body =
    196       base::UTF8ToUTF16(kSampleDescriptionBody[2]);
    197 
    198   candidate_window.set_cursor_position(2);
    199 
    200   std::vector<InfolistEntry> infolist_entries;
    201   bool has_highlighted = false;
    202 
    203   candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
    204 
    205   // Infolist entries skips empty descriptions, so expected entry size is 1.
    206   EXPECT_EQ(1UL, infolist_entries.size());
    207   EXPECT_TRUE(has_highlighted);
    208   EXPECT_TRUE(infolist_entries[0].highlighted);
    209 }
    210 
    211 TEST(CandidateWindow, GetInfolistEntries_SparseNoSelectionCase) {
    212   CandidateWindow candidate_window;
    213   candidate_window.set_page_size(10);
    214 
    215   for (size_t i = 0; i < kSampleCandidateSize; ++i) {
    216     CandidateWindow::Entry entry;
    217     entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
    218     candidate_window.mutable_candidates()->push_back(entry);
    219   }
    220 
    221   std::vector<CandidateWindow::Entry>* candidates =
    222       candidate_window.mutable_candidates();
    223   (*candidates)[2].description_title =
    224       base::UTF8ToUTF16(kSampleDescriptionTitle[2]);
    225   (*candidates)[2].description_body =
    226       base::UTF8ToUTF16(kSampleDescriptionBody[2]);
    227 
    228   candidate_window.set_cursor_position(0);
    229 
    230   std::vector<InfolistEntry> infolist_entries;
    231   bool has_highlighted;
    232 
    233   candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
    234 
    235   // Infolist entries skips empty descriptions, so expected entry size is 1 and
    236   // no highlighted entries.
    237   EXPECT_EQ(1UL, infolist_entries.size());
    238   EXPECT_FALSE(has_highlighted);
    239   EXPECT_FALSE(infolist_entries[0].highlighted);
    240 }
    241 
    242 TEST(CandidateWindow, GetInfolistEntries_NoInfolistCase) {
    243   CandidateWindow candidate_window;
    244   candidate_window.set_page_size(10);
    245 
    246   for (size_t i = 0; i < kSampleCandidateSize; ++i) {
    247     CandidateWindow::Entry entry;
    248     entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
    249     candidate_window.mutable_candidates()->push_back(entry);
    250   }
    251   candidate_window.set_cursor_position(1);
    252 
    253   std::vector<InfolistEntry> infolist_entries;
    254   bool has_highlighted = false;
    255 
    256   candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
    257 
    258   EXPECT_TRUE(infolist_entries.empty());
    259   EXPECT_FALSE(has_highlighted);
    260 }
    261 
    262 }  // namespace ui
    263