15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// TODO(nona): Add more tests.
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ime/candidate_window.h"
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ui {
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const size_t kSampleCandidateSize = 3;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* kSampleCandidate[] = {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Candidate 1",
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Candidate 2",
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Candidate 3",
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* kSampleDescriptionTitle[] = {
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Description Title 1",
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Description Title 2",
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Description Title 3",
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* kSampleDescriptionBody[] = {
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Description Body 1",
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Description Body 2",
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  "Sample Description Body 3",
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(CandidateWindow, IsEqualTest) {
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow cw1;
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow cw2;
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16 kSampleString1 = base::UTF8ToUTF16("Sample 1");
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16 kSampleString2 = base::UTF8ToUTF16("Sample 2");
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(cw1.IsEqual(cw2));
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(cw2.IsEqual(cw1));
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_page_size(1);
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_page_size(2);
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_page_size(1);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_cursor_position(1);
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_cursor_position(2);
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_cursor_position(1);
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_is_cursor_visible(true);
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_is_cursor_visible(false);
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_is_cursor_visible(true);
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_orientation(CandidateWindow::HORIZONTAL);
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_orientation(CandidateWindow::VERTICAL);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_orientation(CandidateWindow::HORIZONTAL);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_show_window_at_composition(true);
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_show_window_at_composition(false);
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.set_show_window_at_composition(true);
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Check equality for candidates member variable.
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow::Entry entry1;
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow::Entry entry2;
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry1);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->push_back(entry2);
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(cw1.IsEqual(cw2));
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(cw2.IsEqual(cw1));
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry1.value = kSampleString1;
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry2.value = kSampleString2;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry1);
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->push_back(entry2);
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->clear();
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->clear();
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry1.label = kSampleString1;
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry2.label = kSampleString2;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry1);
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->push_back(entry2);
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->clear();
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->clear();
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry1.annotation = kSampleString1;
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry2.annotation = kSampleString2;
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry1);
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->push_back(entry2);
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->clear();
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->clear();
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry1.description_title = kSampleString1;
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry2.description_title = kSampleString2;
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry1);
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->push_back(entry2);
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->clear();
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->clear();
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry1.description_body = kSampleString1;
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry2.description_body = kSampleString2;
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry1);
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->push_back(entry2);
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw1.IsEqual(cw2));
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(cw2.IsEqual(cw1));
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->clear();
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.mutable_candidates()->clear();
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(CandidateWindow, CopyFromTest) {
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow cw1;
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow cw2;
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16 kSampleString = base::UTF8ToUTF16("Sample");
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_page_size(1);
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_cursor_position(2);
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_is_cursor_visible(false);
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_orientation(CandidateWindow::HORIZONTAL);
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.set_show_window_at_composition(false);
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow::Entry entry;
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry.value = kSampleString;
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry.label = kSampleString;
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry.annotation = kSampleString;
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry.description_title = kSampleString;
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  entry.description_body = kSampleString;
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw1.mutable_candidates()->push_back(entry);
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cw2.CopyFrom(cw1);
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(cw1.IsEqual(cw2));
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(CandidateWindow, GetInfolistEntries_DenseCase) {
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow candidate_window;
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_page_size(10);
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < kSampleCandidateSize; ++i) {
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    CandidateWindow::Entry entry;
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.description_title = base::UTF8ToUTF16(kSampleDescriptionTitle[i]);
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.description_body = base::UTF8ToUTF16(kSampleDescriptionBody[i]);
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    candidate_window.mutable_candidates()->push_back(entry);
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_cursor_position(1);
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<InfolistEntry> infolist_entries;
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool has_highlighted = false;
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(kSampleCandidateSize, infolist_entries.size());
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(has_highlighted);
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(infolist_entries[1].highlighted);
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(CandidateWindow, GetInfolistEntries_SparseCase) {
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow candidate_window;
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_page_size(10);
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < kSampleCandidateSize; ++i) {
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    CandidateWindow::Entry entry;
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    candidate_window.mutable_candidates()->push_back(entry);
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<CandidateWindow::Entry>* candidates =
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      candidate_window.mutable_candidates();
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  (*candidates)[2].description_title =
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16(kSampleDescriptionTitle[2]);
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  (*candidates)[2].description_body =
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16(kSampleDescriptionBody[2]);
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_cursor_position(2);
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<InfolistEntry> infolist_entries;
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool has_highlighted = false;
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Infolist entries skips empty descriptions, so expected entry size is 1.
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(1UL, infolist_entries.size());
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(has_highlighted);
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(infolist_entries[0].highlighted);
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(CandidateWindow, GetInfolistEntries_SparseNoSelectionCase) {
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow candidate_window;
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_page_size(10);
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < kSampleCandidateSize; ++i) {
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    CandidateWindow::Entry entry;
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    candidate_window.mutable_candidates()->push_back(entry);
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<CandidateWindow::Entry>* candidates =
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      candidate_window.mutable_candidates();
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  (*candidates)[2].description_title =
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16(kSampleDescriptionTitle[2]);
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  (*candidates)[2].description_body =
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UTF8ToUTF16(kSampleDescriptionBody[2]);
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_cursor_position(0);
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<InfolistEntry> infolist_entries;
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool has_highlighted;
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Infolist entries skips empty descriptions, so expected entry size is 1 and
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // no highlighted entries.
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(1UL, infolist_entries.size());
2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(has_highlighted);
2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(infolist_entries[0].highlighted);
2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST(CandidateWindow, GetInfolistEntries_NoInfolistCase) {
2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CandidateWindow candidate_window;
2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_page_size(10);
2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < kSampleCandidateSize; ++i) {
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    CandidateWindow::Entry entry;
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.value = base::UTF8ToUTF16(kSampleCandidate[i]);
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    candidate_window.mutable_candidates()->push_back(entry);
2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.set_cursor_position(1);
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<InfolistEntry> infolist_entries;
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool has_highlighted = false;
2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  candidate_window.GetInfolistEntries(&infolist_entries, &has_highlighted);
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(infolist_entries.empty());
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(has_highlighted);
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ui
263