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.
6 #include "ui/base/ime/candidate_window.h"
10 #include "base/compiler_specific.h"
11 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "testing/gtest/include/gtest/gtest.h"
19 const size_t kSampleCandidateSize
= 3;
20 const char* kSampleCandidate
[] = {
25 const char* kSampleDescriptionTitle
[] = {
26 "Sample Description Title 1",
27 "Sample Description Title 2",
28 "Sample Description Title 3",
30 const char* kSampleDescriptionBody
[] = {
31 "Sample Description Body 1",
32 "Sample Description Body 2",
33 "Sample Description Body 3",
38 TEST(CandidateWindow
, IsEqualTest
) {
42 const char kSampleString1
[] = "Sample 1";
43 const char kSampleString2
[] = "Sample 2";
45 EXPECT_TRUE(cw1
.IsEqual(cw2
));
46 EXPECT_TRUE(cw2
.IsEqual(cw1
));
50 EXPECT_FALSE(cw1
.IsEqual(cw2
));
51 EXPECT_FALSE(cw2
.IsEqual(cw1
));
54 cw1
.set_cursor_position(1);
55 cw2
.set_cursor_position(2);
56 EXPECT_FALSE(cw1
.IsEqual(cw2
));
57 EXPECT_FALSE(cw2
.IsEqual(cw1
));
58 cw2
.set_cursor_position(1);
60 cw1
.set_is_cursor_visible(true);
61 cw2
.set_is_cursor_visible(false);
62 EXPECT_FALSE(cw1
.IsEqual(cw2
));
63 EXPECT_FALSE(cw2
.IsEqual(cw1
));
64 cw2
.set_is_cursor_visible(true);
66 cw1
.set_orientation(CandidateWindow::HORIZONTAL
);
67 cw2
.set_orientation(CandidateWindow::VERTICAL
);
68 EXPECT_FALSE(cw1
.IsEqual(cw2
));
69 EXPECT_FALSE(cw2
.IsEqual(cw1
));
70 cw2
.set_orientation(CandidateWindow::HORIZONTAL
);
72 cw1
.set_show_window_at_composition(true);
73 cw2
.set_show_window_at_composition(false);
74 EXPECT_FALSE(cw1
.IsEqual(cw2
));
75 EXPECT_FALSE(cw2
.IsEqual(cw1
));
76 cw2
.set_show_window_at_composition(true);
78 // Check equality for candidates member variable.
79 CandidateWindow::Entry entry1
;
80 CandidateWindow::Entry entry2
;
82 cw1
.mutable_candidates()->push_back(entry1
);
83 EXPECT_FALSE(cw1
.IsEqual(cw2
));
84 EXPECT_FALSE(cw2
.IsEqual(cw1
));
85 cw2
.mutable_candidates()->push_back(entry2
);
86 EXPECT_TRUE(cw1
.IsEqual(cw2
));
87 EXPECT_TRUE(cw2
.IsEqual(cw1
));
89 entry1
.value
= kSampleString1
;
90 entry2
.value
= kSampleString2
;
91 cw1
.mutable_candidates()->push_back(entry1
);
92 cw2
.mutable_candidates()->push_back(entry2
);
93 EXPECT_FALSE(cw1
.IsEqual(cw2
));
94 EXPECT_FALSE(cw2
.IsEqual(cw1
));
95 cw1
.mutable_candidates()->clear();
96 cw2
.mutable_candidates()->clear();
98 entry1
.label
= kSampleString1
;
99 entry2
.label
= kSampleString2
;
100 cw1
.mutable_candidates()->push_back(entry1
);
101 cw2
.mutable_candidates()->push_back(entry2
);
102 EXPECT_FALSE(cw1
.IsEqual(cw2
));
103 EXPECT_FALSE(cw2
.IsEqual(cw1
));
104 cw1
.mutable_candidates()->clear();
105 cw2
.mutable_candidates()->clear();
107 entry1
.annotation
= kSampleString1
;
108 entry2
.annotation
= kSampleString2
;
109 cw1
.mutable_candidates()->push_back(entry1
);
110 cw2
.mutable_candidates()->push_back(entry2
);
111 EXPECT_FALSE(cw1
.IsEqual(cw2
));
112 EXPECT_FALSE(cw2
.IsEqual(cw1
));
113 cw1
.mutable_candidates()->clear();
114 cw2
.mutable_candidates()->clear();
116 entry1
.description_title
= kSampleString1
;
117 entry2
.description_title
= kSampleString2
;
118 cw1
.mutable_candidates()->push_back(entry1
);
119 cw2
.mutable_candidates()->push_back(entry2
);
120 EXPECT_FALSE(cw1
.IsEqual(cw2
));
121 EXPECT_FALSE(cw2
.IsEqual(cw1
));
122 cw1
.mutable_candidates()->clear();
123 cw2
.mutable_candidates()->clear();
125 entry1
.description_body
= kSampleString1
;
126 entry2
.description_body
= kSampleString2
;
127 cw1
.mutable_candidates()->push_back(entry1
);
128 cw2
.mutable_candidates()->push_back(entry2
);
129 EXPECT_FALSE(cw1
.IsEqual(cw2
));
130 EXPECT_FALSE(cw2
.IsEqual(cw1
));
131 cw1
.mutable_candidates()->clear();
132 cw2
.mutable_candidates()->clear();
135 TEST(CandidateWindow
, CopyFromTest
) {
139 const char kSampleString
[] = "Sample";
141 cw1
.set_page_size(1);
142 cw1
.set_cursor_position(2);
143 cw1
.set_is_cursor_visible(false);
144 cw1
.set_orientation(CandidateWindow::HORIZONTAL
);
145 cw1
.set_show_window_at_composition(false);
147 CandidateWindow::Entry entry
;
148 entry
.value
= kSampleString
;
149 entry
.label
= kSampleString
;
150 entry
.annotation
= kSampleString
;
151 entry
.description_title
= kSampleString
;
152 entry
.description_body
= kSampleString
;
153 cw1
.mutable_candidates()->push_back(entry
);
156 EXPECT_TRUE(cw1
.IsEqual(cw2
));
159 TEST(CandidateWindow
, GetInfolistEntries_DenseCase
) {
160 CandidateWindow candidate_window
;
161 candidate_window
.set_page_size(10);
162 for (size_t i
= 0; i
< kSampleCandidateSize
; ++i
) {
163 CandidateWindow::Entry entry
;
164 entry
.value
= kSampleCandidate
[i
];
165 entry
.description_title
= kSampleDescriptionTitle
[i
];
166 entry
.description_body
= kSampleDescriptionBody
[i
];
167 candidate_window
.mutable_candidates()->push_back(entry
);
169 candidate_window
.set_cursor_position(1);
171 std::vector
<InfolistEntry
> infolist_entries
;
172 bool has_highlighted
= false;
174 candidate_window
.GetInfolistEntries(&infolist_entries
, &has_highlighted
);
176 EXPECT_EQ(kSampleCandidateSize
, infolist_entries
.size());
177 EXPECT_TRUE(has_highlighted
);
178 EXPECT_TRUE(infolist_entries
[1].highlighted
);
181 TEST(CandidateWindow
, GetInfolistEntries_SparseCase
) {
182 CandidateWindow candidate_window
;
183 candidate_window
.set_page_size(10);
184 for (size_t i
= 0; i
< kSampleCandidateSize
; ++i
) {
185 CandidateWindow::Entry entry
;
186 entry
.value
= kSampleCandidate
[i
];
187 candidate_window
.mutable_candidates()->push_back(entry
);
190 std::vector
<CandidateWindow::Entry
>* candidates
=
191 candidate_window
.mutable_candidates();
192 (*candidates
)[2].description_title
= kSampleDescriptionTitle
[2];
193 (*candidates
)[2].description_body
= kSampleDescriptionBody
[2];
195 candidate_window
.set_cursor_position(2);
197 std::vector
<InfolistEntry
> infolist_entries
;
198 bool has_highlighted
= false;
200 candidate_window
.GetInfolistEntries(&infolist_entries
, &has_highlighted
);
202 // Infolist entries skips empty descriptions, so expected entry size is 1.
203 EXPECT_EQ(1UL, infolist_entries
.size());
204 EXPECT_TRUE(has_highlighted
);
205 EXPECT_TRUE(infolist_entries
[0].highlighted
);
208 TEST(CandidateWindow
, GetInfolistEntries_SparseNoSelectionCase
) {
209 CandidateWindow candidate_window
;
210 candidate_window
.set_page_size(10);
212 for (size_t i
= 0; i
< kSampleCandidateSize
; ++i
) {
213 CandidateWindow::Entry entry
;
214 entry
.value
= kSampleCandidate
[i
];
215 candidate_window
.mutable_candidates()->push_back(entry
);
218 std::vector
<CandidateWindow::Entry
>* candidates
=
219 candidate_window
.mutable_candidates();
220 (*candidates
)[2].description_title
= kSampleDescriptionTitle
[2];
221 (*candidates
)[2].description_body
= kSampleDescriptionBody
[2];
223 candidate_window
.set_cursor_position(0);
225 std::vector
<InfolistEntry
> infolist_entries
;
226 bool has_highlighted
;
228 candidate_window
.GetInfolistEntries(&infolist_entries
, &has_highlighted
);
230 // Infolist entries skips empty descriptions, so expected entry size is 1 and
231 // no highlighted entries.
232 EXPECT_EQ(1UL, infolist_entries
.size());
233 EXPECT_FALSE(has_highlighted
);
234 EXPECT_FALSE(infolist_entries
[0].highlighted
);
237 TEST(CandidateWindow
, GetInfolistEntries_NoInfolistCase
) {
238 CandidateWindow candidate_window
;
239 candidate_window
.set_page_size(10);
241 for (size_t i
= 0; i
< kSampleCandidateSize
; ++i
) {
242 CandidateWindow::Entry entry
;
243 entry
.value
= kSampleCandidate
[i
];
244 candidate_window
.mutable_candidates()->push_back(entry
);
246 candidate_window
.set_cursor_position(1);
248 std::vector
<InfolistEntry
> infolist_entries
;
249 bool has_highlighted
= false;
251 candidate_window
.GetInfolistEntries(&infolist_entries
, &has_highlighted
);
253 EXPECT_TRUE(infolist_entries
.empty());
254 EXPECT_FALSE(has_highlighted
);