Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc

Issue 10534134: Fix candidate window position issue. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix braces Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 4
5 #include "chrome/browser/chromeos/input_method/candidate_window_view.h" 5 #include "chrome/browser/chromeos/input_method/candidate_window_view.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/chromeos/input_method/candidate_view.h" 10 #include "chrome/browser/chromeos/input_method/candidate_view.h"
(...skipping 17 matching lines...) Expand all
28 table->annotations.clear(); 28 table->annotations.clear();
29 table->mozc_candidates.Clear(); 29 table->mozc_candidates.Clear();
30 } 30 }
31 31
32 void InitializeMozcCandidates(InputMethodLookupTable* table) { 32 void InitializeMozcCandidates(InputMethodLookupTable* table) {
33 table->mozc_candidates.Clear(); 33 table->mozc_candidates.Clear();
34 table->mozc_candidates.set_position(0); 34 table->mozc_candidates.set_position(0);
35 table->mozc_candidates.set_size(0); 35 table->mozc_candidates.set_size(0);
36 } 36 }
37 37
38 void SetCaretRectIntoMozcCandidates( 38 void AppendCandidateIntoLookupTable(InputMethodLookupTable* table,
39 InputMethodLookupTable* table, 39 const std::string& value) {
40 mozc::commands::Candidates::CandidateWindowLocation location,
41 int x,
42 int y,
43 int width,
44 int height) {
45 table->mozc_candidates.set_window_location(location);
46 mozc::commands::Rectangle *rect =
47 table->mozc_candidates.mutable_composition_rectangle();
48 rect->set_x(x);
49 rect->set_y(y);
50 rect->set_width(width);
51 rect->set_height(height);
52 }
53
54 void AppendCandidateIntoMozcCandidates(InputMethodLookupTable* table,
55 std::string value) {
56 mozc::commands::Candidates::Candidate *candidate = 40 mozc::commands::Candidates::Candidate *candidate =
57 table->mozc_candidates.add_candidate(); 41 table->mozc_candidates.add_candidate();
58 42
59 int current_entry_count = table->mozc_candidates.candidate_size(); 43 int current_entry_count = table->mozc_candidates.candidate_size();
44 table->candidates.push_back(value);
60 candidate->set_index(current_entry_count); 45 candidate->set_index(current_entry_count);
61 candidate->set_value(value); 46 candidate->set_value(value);
62 candidate->set_id(current_entry_count); 47 candidate->set_id(current_entry_count);
63 candidate->set_information_id(current_entry_count); 48 candidate->set_information_id(current_entry_count);
64 } 49 }
65 50
66 } // namespace 51 } // namespace
67 52
68 class CandidateWindowViewTest : public views::ViewsTestBase { 53 class CandidateWindowViewTest : public views::ViewsTestBase {
69 protected: 54 protected:
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, 176 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
192 new_table)); 177 new_table));
193 } 178 }
194 179
195 TEST_F(CandidateWindowViewTest, MozcSuggestWindowShouldUpdateTest) { 180 TEST_F(CandidateWindowViewTest, MozcSuggestWindowShouldUpdateTest) {
196 // ShouldUpdateCandidateViews method should also judge with consideration of 181 // ShouldUpdateCandidateViews method should also judge with consideration of
197 // the mozc specific candidate information. Following tests verify them. 182 // the mozc specific candidate information. Following tests verify them.
198 const char* kSampleCandidate1 = "Sample Candidate 1"; 183 const char* kSampleCandidate1 = "Sample Candidate 1";
199 const char* kSampleCandidate2 = "Sample Candidate 2"; 184 const char* kSampleCandidate2 = "Sample Candidate 2";
200 185
201 const int kCaretPositionX1 = 10;
202 const int kCaretPositionY1 = 20;
203 const int kCaretPositionWidth1 = 30;
204 const int kCaretPositionHeight1 = 40;
205
206 const int kCaretPositionX2 = 15;
207 const int kCaretPositionY2 = 25;
208 const int kCaretPositionWidth2 = 35;
209 const int kCaretPositionHeight2 = 45;
210
211 const size_t kPageSize = 10; 186 const size_t kPageSize = 10;
212 187
213 InputMethodLookupTable old_table; 188 InputMethodLookupTable old_table;
214 InputMethodLookupTable new_table; 189 InputMethodLookupTable new_table;
215 190
216 // State chagne from using non-mozc candidate to mozc candidate. 191 // State chagne from using non-mozc candidate to mozc candidate.
217 ClearInputMethodLookupTable(kPageSize, &old_table); 192 ClearInputMethodLookupTable(kPageSize, &old_table);
218 ClearInputMethodLookupTable(kPageSize, &new_table); 193 ClearInputMethodLookupTable(kPageSize, &new_table);
219 194
220 old_table.candidates.push_back(kSampleCandidate1); 195 old_table.candidates.push_back(kSampleCandidate1);
221 InitializeMozcCandidates(&new_table); 196 InitializeMozcCandidates(&new_table);
222 AppendCandidateIntoMozcCandidates(&new_table, kSampleCandidate1); 197 AppendCandidateIntoLookupTable(&new_table, kSampleCandidate2);
223 SetCaretRectIntoMozcCandidates(&new_table,
224 mozc::commands::Candidates::COMPOSITION,
225 kCaretPositionX1,
226 kCaretPositionY1,
227 kCaretPositionWidth1,
228 kCaretPositionHeight1);
229 198
230 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, 199 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
231 new_table)); 200 new_table));
232 201
233 // State change from using mozc candidate to non-mozc candidate 202 // State change from using mozc candidate to non-mozc candidate
234 ClearInputMethodLookupTable(kPageSize, &old_table); 203 ClearInputMethodLookupTable(kPageSize, &old_table);
235 ClearInputMethodLookupTable(kPageSize, &new_table); 204 ClearInputMethodLookupTable(kPageSize, &new_table);
236 205
237 InitializeMozcCandidates(&old_table); 206 InitializeMozcCandidates(&old_table);
238 AppendCandidateIntoMozcCandidates(&old_table, kSampleCandidate1); 207 AppendCandidateIntoLookupTable(&old_table, kSampleCandidate1);
239 SetCaretRectIntoMozcCandidates(&old_table,
240 mozc::commands::Candidates::COMPOSITION,
241 kCaretPositionX1,
242 kCaretPositionY1,
243 kCaretPositionWidth1,
244 kCaretPositionHeight1);
245 208
246 new_table.candidates.push_back(kSampleCandidate1); 209 new_table.candidates.push_back(kSampleCandidate2);
247 210
248 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, 211 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
249 new_table)); 212 new_table));
250 213
251 // State change from using mozc candidate to mozc candidate 214 // State change from using mozc candidate to mozc candidate
252 215
253 // No change 216 // No change
254 ClearInputMethodLookupTable(kPageSize, &old_table); 217 ClearInputMethodLookupTable(kPageSize, &old_table);
255 ClearInputMethodLookupTable(kPageSize, &new_table); 218 ClearInputMethodLookupTable(kPageSize, &new_table);
256 219
257 InitializeMozcCandidates(&old_table); 220 InitializeMozcCandidates(&old_table);
258 AppendCandidateIntoMozcCandidates(&old_table, kSampleCandidate1); 221 AppendCandidateIntoLookupTable(&old_table, kSampleCandidate1);
259 SetCaretRectIntoMozcCandidates(&old_table,
260 mozc::commands::Candidates::COMPOSITION,
261 kCaretPositionX1,
262 kCaretPositionY1,
263 kCaretPositionWidth1,
264 kCaretPositionHeight1);
265 222
266 InitializeMozcCandidates(&new_table); 223 InitializeMozcCandidates(&new_table);
267 AppendCandidateIntoMozcCandidates(&new_table, kSampleCandidate1); 224 AppendCandidateIntoLookupTable(&new_table, kSampleCandidate1);
268 SetCaretRectIntoMozcCandidates(&new_table,
269 mozc::commands::Candidates::COMPOSITION,
270 kCaretPositionX1,
271 kCaretPositionY1,
272 kCaretPositionWidth1,
273 kCaretPositionHeight1);
274 225
275 EXPECT_FALSE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, 226 EXPECT_FALSE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
276 new_table)); 227 new_table));
277 // Position change only 228 // Candidate contents
278 ClearInputMethodLookupTable(kPageSize, &old_table); 229 ClearInputMethodLookupTable(kPageSize, &old_table);
279 ClearInputMethodLookupTable(kPageSize, &new_table); 230 ClearInputMethodLookupTable(kPageSize, &new_table);
280 231
281 InitializeMozcCandidates(&old_table); 232 InitializeMozcCandidates(&old_table);
282 AppendCandidateIntoMozcCandidates(&old_table, kSampleCandidate1); 233 AppendCandidateIntoLookupTable(&old_table, kSampleCandidate1);
283 SetCaretRectIntoMozcCandidates(&old_table,
284 mozc::commands::Candidates::COMPOSITION,
285 kCaretPositionX1,
286 kCaretPositionY1,
287 kCaretPositionWidth1,
288 kCaretPositionHeight1);
289 234
290 InitializeMozcCandidates(&new_table); 235 InitializeMozcCandidates(&new_table);
291 AppendCandidateIntoMozcCandidates(&new_table, kSampleCandidate1); 236 AppendCandidateIntoLookupTable(&new_table, kSampleCandidate2);
292 SetCaretRectIntoMozcCandidates(&new_table,
293 mozc::commands::Candidates::COMPOSITION,
294 kCaretPositionX2,
295 kCaretPositionY2,
296 kCaretPositionWidth2,
297 kCaretPositionHeight2);
298 237
299 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, 238 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
300 new_table)); 239 new_table));
301 // Candidate contents only
302 ClearInputMethodLookupTable(kPageSize, &old_table);
303 ClearInputMethodLookupTable(kPageSize, &new_table);
304
305 InitializeMozcCandidates(&old_table);
306 AppendCandidateIntoMozcCandidates(&old_table, kSampleCandidate1);
307 SetCaretRectIntoMozcCandidates(&old_table,
308 mozc::commands::Candidates::COMPOSITION,
309 kCaretPositionX1,
310 kCaretPositionY1,
311 kCaretPositionWidth1,
312 kCaretPositionHeight1);
313
314 InitializeMozcCandidates(&new_table);
315 AppendCandidateIntoMozcCandidates(&new_table, kSampleCandidate2);
316 SetCaretRectIntoMozcCandidates(&new_table,
317 mozc::commands::Candidates::COMPOSITION,
318 kCaretPositionX1,
319 kCaretPositionY1,
320 kCaretPositionWidth1,
321 kCaretPositionHeight1);
322
323 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
324 new_table));
325
326 // Both candidate and position
327 ClearInputMethodLookupTable(kPageSize, &old_table);
328 ClearInputMethodLookupTable(kPageSize, &new_table);
329
330 InitializeMozcCandidates(&old_table);
331 AppendCandidateIntoMozcCandidates(&old_table, kSampleCandidate1);
332 SetCaretRectIntoMozcCandidates(&old_table,
333 mozc::commands::Candidates::COMPOSITION,
334 kCaretPositionX1,
335 kCaretPositionY1,
336 kCaretPositionWidth1,
337 kCaretPositionHeight1);
338
339 InitializeMozcCandidates(&new_table);
340 AppendCandidateIntoMozcCandidates(&new_table, kSampleCandidate2);
341 SetCaretRectIntoMozcCandidates(&new_table,
342 mozc::commands::Candidates::COMPOSITION,
343 kCaretPositionX2,
344 kCaretPositionY2,
345 kCaretPositionWidth2,
346 kCaretPositionHeight2);
347
348 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table,
349 new_table));
350 } 240 }
351 241
352 TEST_F(CandidateWindowViewTest, MozcUpdateCandidateTest) { 242 TEST_F(CandidateWindowViewTest, MozcUpdateCandidateTest) {
353 // This test verifies whether UpdateCandidates function updates window mozc 243 // This test verifies whether UpdateCandidates function updates window mozc
354 // specific candidate position correctly on the correct condition. 244 // specific candidate position correctly on the correct condition.
355 245
356 // For testing, we have to prepare empty widget. 246 // For testing, we have to prepare empty widget.
357 // We should NOT manually free widget by default, otherwise double free will 247 // We should NOT manually free widget by default, otherwise double free will
358 // be occurred. So, we should instantiate widget class with "new" operation. 248 // be occurred. So, we should instantiate widget class with "new" operation.
359 views::Widget* widget = new views::Widget; 249 views::Widget* widget = new views::Widget;
360 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); 250 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
361 widget->Init(params); 251 widget->Init(params);
362 252
363 CandidateWindowView candidate_window_view(widget); 253 CandidateWindowView candidate_window_view(widget);
364 candidate_window_view.Init(); 254 candidate_window_view.Init();
365 255
366 const int kCaretPositionX1 = 10;
367 const int kCaretPositionY1 = 20;
368 const int kCaretPositionWidth1 = 30;
369 const int kCaretPositionHeight1 = 40;
370
371 const int kCaretPositionX2 = 15;
372 const int kCaretPositionY2 = 25;
373 const int kCaretPositionWidth2 = 35;
374 const int kCaretPositionHeight2 = 45;
375
376 const size_t kPageSize = 10; 256 const size_t kPageSize = 10;
377 257
378 InputMethodLookupTable new_table; 258 InputMethodLookupTable new_table;
379 ClearInputMethodLookupTable(kPageSize, &new_table); 259 ClearInputMethodLookupTable(kPageSize, &new_table);
380 InitializeMozcCandidates(&new_table); 260 InitializeMozcCandidates(&new_table);
381 261
382 // If window location is CARET, use default position. So 262 // If candidate category is SUGGESTION, should not show at composition head.
383 // is_suggestion_window_location_available_ should be false. 263 new_table.mozc_candidates.set_category(mozc::commands::CONVERSION);
384 SetCaretRectIntoMozcCandidates(&new_table,
385 mozc::commands::Candidates::CARET,
386 kCaretPositionX1,
387 kCaretPositionY1,
388 kCaretPositionWidth1,
389 kCaretPositionHeight1);
390 candidate_window_view.UpdateCandidates(new_table); 264 candidate_window_view.UpdateCandidates(new_table);
391 EXPECT_FALSE(candidate_window_view.is_suggestion_window_location_available_); 265 EXPECT_FALSE(candidate_window_view.should_show_at_composition_head_);
392 266
393 // If window location is COMPOSITION, update position and set 267 // If candidate category is SUGGESTION, should show at composition head.
394 // is_suggestion_window_location_available_ as true. 268 new_table.mozc_candidates.set_category(mozc::commands::SUGGESTION);
395 SetCaretRectIntoMozcCandidates(&new_table,
396 mozc::commands::Candidates::COMPOSITION,
397 kCaretPositionX1,
398 kCaretPositionY1,
399 kCaretPositionWidth1,
400 kCaretPositionHeight1);
401 candidate_window_view.UpdateCandidates(new_table); 269 candidate_window_view.UpdateCandidates(new_table);
402 EXPECT_TRUE(candidate_window_view.is_suggestion_window_location_available_); 270 EXPECT_TRUE(candidate_window_view.should_show_at_composition_head_);
403 EXPECT_EQ(kCaretPositionX1,
404 candidate_window_view.suggestion_window_location_.x());
405 EXPECT_EQ(kCaretPositionY1,
406 candidate_window_view.suggestion_window_location_.y());
407 EXPECT_EQ(kCaretPositionWidth1,
408 candidate_window_view.suggestion_window_location_.width());
409 EXPECT_EQ(kCaretPositionHeight1,
410 candidate_window_view.suggestion_window_location_.height());
411
412 SetCaretRectIntoMozcCandidates(&new_table,
413 mozc::commands::Candidates::COMPOSITION,
414 kCaretPositionX2,
415 kCaretPositionY2,
416 kCaretPositionWidth2,
417 kCaretPositionHeight2);
418 candidate_window_view.UpdateCandidates(new_table);
419 EXPECT_TRUE(candidate_window_view.is_suggestion_window_location_available_);
420 EXPECT_EQ(kCaretPositionX2,
421 candidate_window_view.suggestion_window_location_.x());
422 EXPECT_EQ(kCaretPositionY2,
423 candidate_window_view.suggestion_window_location_.y());
424 EXPECT_EQ(kCaretPositionWidth2,
425 candidate_window_view.suggestion_window_location_.width());
426 EXPECT_EQ(kCaretPositionHeight2,
427 candidate_window_view.suggestion_window_location_.height());
428 271
429 // We should call CloseNow method, otherwise this test will leak memory. 272 // We should call CloseNow method, otherwise this test will leak memory.
430 widget->CloseNow(); 273 widget->CloseNow();
431 } 274 }
432 275
433 TEST_F(CandidateWindowViewTest, ShortcutSettingTest) { 276 TEST_F(CandidateWindowViewTest, ShortcutSettingTest) {
434 const char* kSampleCandidate[] = { 277 const char* kSampleCandidate[] = {
435 "Sample Candidate 1", 278 "Sample Candidate 1",
436 "Sample Candidate 2", 279 "Sample Candidate 2",
437 "Sample Candidate 3" 280 "Sample Candidate 3"
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 for (size_t i = 1; i < candidate_window_view.candidate_views_.size(); ++i) { 616 for (size_t i = 1; i < candidate_window_view.candidate_views_.size(); ++i) {
774 const CandidateView* view = candidate_window_view.candidate_views_[i]; 617 const CandidateView* view = candidate_window_view.candidate_views_[i];
775 EXPECT_EQ(before_height, view->GetContentsBounds().height()); 618 EXPECT_EQ(before_height, view->GetContentsBounds().height());
776 } 619 }
777 620
778 // We should call CloseNow method, otherwise this test will leak memory. 621 // We should call CloseNow method, otherwise this test will leak memory.
779 widget->CloseNow(); 622 widget->CloseNow();
780 } 623 }
781 } // namespace input_method 624 } // namespace input_method
782 } // namespace chromeos 625 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698