| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // TODO(nona): Add unittests for UpdateCandidates. |
| 4 | 5 |
| 5 #include "chrome/browser/chromeos/input_method/candidate_window_view.h" | 6 #include "chrome/browser/chromeos/input_method/candidate_window_view.h" |
| 6 | 7 |
| 7 #include <string> | 8 #include <string> |
| 8 | 9 |
| 9 #include "base/message_loop.h" | |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "ui/views/widget/widget.h" | |
| 12 | 11 |
| 13 namespace chromeos { | 12 namespace chromeos { |
| 14 namespace input_method { | 13 namespace input_method { |
| 15 | 14 |
| 16 namespace { | 15 namespace { |
| 17 | 16 |
| 18 void ClearInputMethodLookupTable(InputMethodLookupTable* table) { | 17 void ClearInputMethodLookupTable(InputMethodLookupTable* table) { |
| 19 table->visible = false; | 18 table->visible = false; |
| 20 table->cursor_absolute_index = 0; | 19 table->cursor_absolute_index = 0; |
| 21 table->page_size = 10; | 20 table->page_size = 10; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 51 void AppendCandidateIntoMozcCandidates(InputMethodLookupTable* table, | 50 void AppendCandidateIntoMozcCandidates(InputMethodLookupTable* table, |
| 52 std::string value) { | 51 std::string value) { |
| 53 mozc::commands::Candidates::Candidate *candidate = | 52 mozc::commands::Candidates::Candidate *candidate = |
| 54 table->mozc_candidates.add_candidate(); | 53 table->mozc_candidates.add_candidate(); |
| 55 | 54 |
| 56 int current_entry_count = table->mozc_candidates.candidate_size(); | 55 int current_entry_count = table->mozc_candidates.candidate_size(); |
| 57 candidate->set_index(current_entry_count); | 56 candidate->set_index(current_entry_count); |
| 58 candidate->set_value(value); | 57 candidate->set_value(value); |
| 59 candidate->set_id(current_entry_count); | 58 candidate->set_id(current_entry_count); |
| 60 candidate->set_information_id(current_entry_count); | 59 candidate->set_information_id(current_entry_count); |
| 60 |
| 61 |
| 61 } | 62 } |
| 62 | 63 |
| 63 } // namespace | 64 } // namespace |
| 64 | 65 |
| 65 class CandidateWindowViewTest: public testing::Test { | 66 TEST(CandidateWindowViewTest, ShouldUpdateCandidateViewsTest) { |
| 66 private: | |
| 67 // This message loop is not explicitly used, but necessary for views control | |
| 68 // testings. | |
| 69 MessageLoopForUI message_loop_; | |
| 70 }; | |
| 71 | |
| 72 TEST_F(CandidateWindowViewTest, ShouldUpdateCandidateViewsTest) { | |
| 73 // This test verifies the process of judging update lookup-table or not. | 67 // This test verifies the process of judging update lookup-table or not. |
| 74 // This judgement is handled by ShouldUpdateCandidateViews, which returns true | 68 // This judgement is handled by ShouldUpdateCandidateViews, which returns true |
| 75 // if update is necessary and vice versa. | 69 // if update is necessary and vice versa. |
| 76 const char* kSampleCandidate1 = "Sample Candidate 1"; | 70 const char* kSampleCandidate1 = "Sample Candidate 1"; |
| 77 const char* kSampleCandidate2 = "Sample Candidate 2"; | 71 const char* kSampleCandidate2 = "Sample Candidate 2"; |
| 78 const char* kSampleCandidate3 = "Sample Candidate 3"; | 72 const char* kSampleCandidate3 = "Sample Candidate 3"; |
| 79 | 73 |
| 80 const char* kSampleAnnotation1 = "Sample Annotation 1"; | 74 const char* kSampleAnnotation1 = "Sample Annotation 1"; |
| 81 const char* kSampleAnnotation2 = "Sample Annotation 2"; | 75 const char* kSampleAnnotation2 = "Sample Annotation 2"; |
| 82 const char* kSampleAnnotation3 = "Sample Annotation 3"; | 76 const char* kSampleAnnotation3 = "Sample Annotation 3"; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 new_table)); | 169 new_table)); |
| 176 new_table.annotations.clear(); | 170 new_table.annotations.clear(); |
| 177 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, | 171 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, |
| 178 new_table)); | 172 new_table)); |
| 179 new_table.annotations.push_back(kSampleAnnotation2); | 173 new_table.annotations.push_back(kSampleAnnotation2); |
| 180 old_table.annotations.clear(); | 174 old_table.annotations.clear(); |
| 181 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, | 175 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, |
| 182 new_table)); | 176 new_table)); |
| 183 } | 177 } |
| 184 | 178 |
| 185 TEST_F(CandidateWindowViewTest, MozcSuggestWindowShouldUpdateTest) { | 179 TEST(CandidateWindowViewTest, MozcSuggestWindowShouldUpdateTest) { |
| 186 // ShouldUpdateCandidateViews method should also judge with consideration of | 180 // ShouldUpdateCandidateViews method should also judge with consideration of |
| 187 // the mozc specific candidate information. Following tests verify them. | 181 // the mozc specific candidate information. Following tests verify them. |
| 188 const char* kSampleCandidate1 = "Sample Candidate 1"; | 182 const char* kSampleCandidate1 = "Sample Candidate 1"; |
| 189 const char* kSampleCandidate2 = "Sample Candidate 2"; | 183 const char* kSampleCandidate2 = "Sample Candidate 2"; |
| 190 | 184 |
| 191 const int kCaretPositionX1 = 10; | 185 const int kCaretPositionX1 = 10; |
| 192 const int kCaretPositionY1 = 20; | 186 const int kCaretPositionY1 = 20; |
| 193 const int kCaretPositionWidth1 = 30; | 187 const int kCaretPositionWidth1 = 30; |
| 194 const int kCaretPositionHeight1 = 40; | 188 const int kCaretPositionHeight1 = 40; |
| 195 | 189 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 mozc::commands::Candidates::COMPOSITION, | 324 mozc::commands::Candidates::COMPOSITION, |
| 331 kCaretPositionX2, | 325 kCaretPositionX2, |
| 332 kCaretPositionY2, | 326 kCaretPositionY2, |
| 333 kCaretPositionWidth2, | 327 kCaretPositionWidth2, |
| 334 kCaretPositionHeight2); | 328 kCaretPositionHeight2); |
| 335 | 329 |
| 336 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, | 330 EXPECT_TRUE(CandidateWindowView::ShouldUpdateCandidateViews(old_table, |
| 337 new_table)); | 331 new_table)); |
| 338 } | 332 } |
| 339 | 333 |
| 340 TEST_F(CandidateWindowViewTest, MozcUpdateCandidateTest) { | |
| 341 // This test verifies whether UpdateCandidates function updates window mozc | |
| 342 // specific candidate position correctly on the correct condition. | |
| 343 views::Widget widget; | |
| 344 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); | |
| 345 params.bounds = gfx::Rect(0, 0, 100, 100); | |
| 346 widget.Init(params); | |
| 347 | |
| 348 CandidateWindowView candidate_window_view(&widget); | |
| 349 candidate_window_view.Init(); | |
| 350 | |
| 351 const int kCaretPositionX1 = 10; | |
| 352 const int kCaretPositionY1 = 20; | |
| 353 const int kCaretPositionWidth1 = 30; | |
| 354 const int kCaretPositionHeight1 = 40; | |
| 355 | |
| 356 const int kCaretPositionX2 = 15; | |
| 357 const int kCaretPositionY2 = 25; | |
| 358 const int kCaretPositionWidth2 = 35; | |
| 359 const int kCaretPositionHeight2 = 45; | |
| 360 | |
| 361 InputMethodLookupTable new_table; | |
| 362 ClearInputMethodLookupTable(&new_table); | |
| 363 InitializeMozcCandidates(&new_table); | |
| 364 | |
| 365 // If window location is CARET, use default position. So | |
| 366 // is_suggestion_window_location_available_ should be false. | |
| 367 SetCaretRectIntoMozcCandidates(&new_table, | |
| 368 mozc::commands::Candidates::CARET, | |
| 369 kCaretPositionX1, | |
| 370 kCaretPositionY1, | |
| 371 kCaretPositionWidth1, | |
| 372 kCaretPositionHeight1); | |
| 373 candidate_window_view.UpdateCandidates(new_table); | |
| 374 EXPECT_FALSE(candidate_window_view.is_suggestion_window_location_available_); | |
| 375 | |
| 376 // If window location is COMPOSITION, update position and set | |
| 377 // is_suggestion_window_location_available_ as true. | |
| 378 SetCaretRectIntoMozcCandidates(&new_table, | |
| 379 mozc::commands::Candidates::COMPOSITION, | |
| 380 kCaretPositionX1, | |
| 381 kCaretPositionY1, | |
| 382 kCaretPositionWidth1, | |
| 383 kCaretPositionHeight1); | |
| 384 candidate_window_view.UpdateCandidates(new_table); | |
| 385 EXPECT_TRUE(candidate_window_view.is_suggestion_window_location_available_); | |
| 386 EXPECT_EQ(kCaretPositionX1, | |
| 387 candidate_window_view.suggestion_window_location_.x()); | |
| 388 EXPECT_EQ(kCaretPositionY1, | |
| 389 candidate_window_view.suggestion_window_location_.y()); | |
| 390 EXPECT_EQ(kCaretPositionWidth1, | |
| 391 candidate_window_view.suggestion_window_location_.width()); | |
| 392 EXPECT_EQ(kCaretPositionHeight1, | |
| 393 candidate_window_view.suggestion_window_location_.height()); | |
| 394 | |
| 395 SetCaretRectIntoMozcCandidates(&new_table, | |
| 396 mozc::commands::Candidates::COMPOSITION, | |
| 397 kCaretPositionX2, | |
| 398 kCaretPositionY2, | |
| 399 kCaretPositionWidth2, | |
| 400 kCaretPositionHeight2); | |
| 401 candidate_window_view.UpdateCandidates(new_table); | |
| 402 EXPECT_TRUE(candidate_window_view.is_suggestion_window_location_available_); | |
| 403 EXPECT_EQ(kCaretPositionX2, | |
| 404 candidate_window_view.suggestion_window_location_.x()); | |
| 405 EXPECT_EQ(kCaretPositionY2, | |
| 406 candidate_window_view.suggestion_window_location_.y()); | |
| 407 EXPECT_EQ(kCaretPositionWidth2, | |
| 408 candidate_window_view.suggestion_window_location_.width()); | |
| 409 EXPECT_EQ(kCaretPositionHeight2, | |
| 410 candidate_window_view.suggestion_window_location_.height()); | |
| 411 } | |
| 412 } // namespace input_method | 334 } // namespace input_method |
| 413 } // namespace chromeos | 335 } // namespace chromeos |
| OLD | NEW |