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

Side by Side Diff: ui/views/controls/combobox/combobox_unittest.cc

Issue 2620963002: MacViews: Correct combobox unittests so that they terminate correctly. (Closed)
Patch Set: Address review. Created 3 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ui/views/controls/combobox/combobox.h" 5 #include "ui/views/controls/combobox/combobox.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 int actions_performed_; 178 int actions_performed_;
179 179
180 private: 180 private:
181 DISALLOW_COPY_AND_ASSIGN(TestComboboxListener); 181 DISALLOW_COPY_AND_ASSIGN(TestComboboxListener);
182 }; 182 };
183 183
184 } // namespace 184 } // namespace
185 185
186 class ComboboxTest : public ViewsTestBase { 186 class ComboboxTest : public ViewsTestBase {
187 public: 187 public:
188 ComboboxTest() : widget_(NULL), combobox_(NULL) {} 188 ComboboxTest() {}
189 189
190 void TearDown() override { 190 void TearDown() override {
191 if (widget_) 191 if (widget_)
192 widget_->Close(); 192 widget_->Close();
193 ViewsTestBase::TearDown(); 193 ViewsTestBase::TearDown();
194 } 194 }
195 195
196 void InitCombobox(const std::set<int>* separators, Combobox::Style style) { 196 void InitCombobox(const std::set<int>* separators, Combobox::Style style) {
197 model_.reset(new TestComboboxModel()); 197 model_.reset(new TestComboboxModel());
198 198
199 if (separators) 199 if (separators)
200 model_->SetSeparators(*separators); 200 model_->SetSeparators(*separators);
201 201
202 ASSERT_FALSE(combobox_); 202 ASSERT_FALSE(combobox_);
203 combobox_ = new TestCombobox(model_.get(), style); 203 combobox_ = new TestCombobox(model_.get(), style);
204 test_api_.reset(new ComboboxTestApi(combobox_)); 204 test_api_.reset(new ComboboxTestApi(combobox_));
205 test_api_->InstallTestMenuRunner(&menu_show_count_);
205 combobox_->set_id(1); 206 combobox_->set_id(1);
206 207
207 widget_ = new Widget; 208 widget_ = new Widget;
208 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); 209 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
209 params.bounds = gfx::Rect(200, 200, 200, 200); 210 params.bounds = gfx::Rect(200, 200, 200, 200);
210 widget_->Init(params); 211 widget_->Init(params);
211 View* container = new View(); 212 View* container = new View();
212 widget_->SetContentsView(container); 213 widget_->SetContentsView(container);
213 container->AddChildView(combobox_); 214 container->AddChildView(combobox_);
214 widget_->Show(); 215 widget_->Show();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 248 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
248 widget_->OnMouseEvent(&released_event); 249 widget_->OnMouseEvent(&released_event);
249 } 250 }
250 251
251 void PerformClick(const gfx::Point& point) { 252 void PerformClick(const gfx::Point& point) {
252 PerformMousePress(point); 253 PerformMousePress(point);
253 PerformMouseRelease(point); 254 PerformMouseRelease(point);
254 } 255 }
255 256
256 // We need widget to populate wrapper class. 257 // We need widget to populate wrapper class.
257 Widget* widget_; 258 Widget* widget_ = nullptr;
258 259
259 // |combobox_| will be allocated InitCombobox() and then owned by |widget_|. 260 // |combobox_| will be allocated InitCombobox() and then owned by |widget_|.
260 TestCombobox* combobox_; 261 TestCombobox* combobox_ = nullptr;
261 std::unique_ptr<ComboboxTestApi> test_api_; 262 std::unique_ptr<ComboboxTestApi> test_api_;
262 263
263 // Combobox does not take ownership of the model, hence it needs to be scoped. 264 // Combobox does not take ownership of the model, hence it needs to be scoped.
264 std::unique_ptr<TestComboboxModel> model_; 265 std::unique_ptr<TestComboboxModel> model_;
265 266
267 // The current menu show count.
268 int menu_show_count_ = 0;
269
266 private: 270 private:
267 DISALLOW_COPY_AND_ASSIGN(ComboboxTest); 271 DISALLOW_COPY_AND_ASSIGN(ComboboxTest);
268 }; 272 };
269 273
270 TEST_F(ComboboxTest, KeyTest) { 274 TEST_F(ComboboxTest, KeyTest) {
271 InitCombobox(nullptr, Combobox::STYLE_NORMAL); 275 InitCombobox(nullptr, Combobox::STYLE_NORMAL);
272 SendKeyEvent(ui::VKEY_END); 276 SendKeyEvent(ui::VKEY_END);
273 EXPECT_EQ(combobox_->selected_index() + 1, model_->GetItemCount()); 277 EXPECT_EQ(combobox_->selected_index() + 1, model_->GetItemCount());
274 SendKeyEvent(ui::VKEY_HOME); 278 SendKeyEvent(ui::VKEY_HOME);
275 EXPECT_EQ(combobox_->selected_index(), 0); 279 EXPECT_EQ(combobox_->selected_index(), 0);
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 combobox->set_listener(evil_listener.get()); 500 combobox->set_listener(evil_listener.get());
497 ASSERT_NO_FATAL_FAILURE(ComboboxTestApi(combobox).PerformActionAt(2)); 501 ASSERT_NO_FATAL_FAILURE(ComboboxTestApi(combobox).PerformActionAt(2));
498 EXPECT_TRUE(evil_listener->deleted()); 502 EXPECT_TRUE(evil_listener->deleted());
499 } 503 }
500 504
501 TEST_F(ComboboxTest, Click) { 505 TEST_F(ComboboxTest, Click) {
502 InitCombobox(nullptr, Combobox::STYLE_NORMAL); 506 InitCombobox(nullptr, Combobox::STYLE_NORMAL);
503 507
504 TestComboboxListener listener; 508 TestComboboxListener listener;
505 combobox_->set_listener(&listener); 509 combobox_->set_listener(&listener);
506
507 combobox_->Layout(); 510 combobox_->Layout();
508 int menu_show_count = 0;
509 test_api_->InstallTestMenuRunner(&menu_show_count);
510 511
511 // Click the left side. The menu is shown. 512 // Click the left side. The menu is shown.
512 EXPECT_EQ(0, menu_show_count); 513 EXPECT_EQ(0, menu_show_count_);
513 PerformClick(gfx::Point(combobox_->x() + 1, 514 PerformClick(gfx::Point(combobox_->x() + 1,
514 combobox_->y() + combobox_->height() / 2)); 515 combobox_->y() + combobox_->height() / 2));
515 EXPECT_FALSE(listener.on_perform_action_called()); 516 EXPECT_FALSE(listener.on_perform_action_called());
516 EXPECT_EQ(1, menu_show_count); 517 EXPECT_EQ(1, menu_show_count_);
517 } 518 }
518 519
519 TEST_F(ComboboxTest, ClickButDisabled) { 520 TEST_F(ComboboxTest, ClickButDisabled) {
520 InitCombobox(nullptr, Combobox::STYLE_NORMAL); 521 InitCombobox(nullptr, Combobox::STYLE_NORMAL);
521 522
522 TestComboboxListener listener; 523 TestComboboxListener listener;
523 combobox_->set_listener(&listener); 524 combobox_->set_listener(&listener);
524 525
525 combobox_->Layout(); 526 combobox_->Layout();
526 combobox_->SetEnabled(false); 527 combobox_->SetEnabled(false);
527 528
528 // Click the left side, but nothing happens since the combobox is disabled. 529 // Click the left side, but nothing happens since the combobox is disabled.
529 int menu_show_count = 0;
530 test_api_->InstallTestMenuRunner(&menu_show_count);
531 PerformClick(gfx::Point(combobox_->x() + 1, 530 PerformClick(gfx::Point(combobox_->x() + 1,
532 combobox_->y() + combobox_->height() / 2)); 531 combobox_->y() + combobox_->height() / 2));
533 EXPECT_FALSE(listener.on_perform_action_called()); 532 EXPECT_FALSE(listener.on_perform_action_called());
534 EXPECT_EQ(0, menu_show_count); 533 EXPECT_EQ(0, menu_show_count_);
535 } 534 }
536 535
537 TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) { 536 TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) {
538 InitCombobox(nullptr, Combobox::STYLE_NORMAL); 537 InitCombobox(nullptr, Combobox::STYLE_NORMAL);
539 538
540 TestComboboxListener listener; 539 TestComboboxListener listener;
541 combobox_->set_listener(&listener); 540 combobox_->set_listener(&listener);
542 541
543 // With STYLE_NORMAL, the click event is ignored. 542 // With STYLE_NORMAL, the click event is ignored. Instead the menu is shown.
544 SendKeyEvent(ui::VKEY_RETURN); 543 SendKeyEvent(ui::VKEY_RETURN);
544 EXPECT_EQ(1, menu_show_count_);
545 EXPECT_FALSE(listener.on_perform_action_called()); 545 EXPECT_FALSE(listener.on_perform_action_called());
546 } 546 }
547 547
548 TEST_F(ComboboxTest, NotifyOnClickWithReturnKeyActionStyle) { 548 TEST_F(ComboboxTest, NotifyOnClickWithReturnKeyActionStyle) {
549 InitCombobox(nullptr, Combobox::STYLE_ACTION); 549 InitCombobox(nullptr, Combobox::STYLE_ACTION);
550 550
551 TestComboboxListener listener; 551 TestComboboxListener listener;
552 combobox_->set_listener(&listener); 552 combobox_->set_listener(&listener);
553 553
554 // With STYLE_ACTION, the click event is notified. 554 // With STYLE_ACTION, the click event is notified and the menu is not shown.
555 SendKeyEvent(ui::VKEY_RETURN); 555 SendKeyEvent(ui::VKEY_RETURN);
556 EXPECT_EQ(0, menu_show_count_);
556 EXPECT_TRUE(listener.on_perform_action_called()); 557 EXPECT_TRUE(listener.on_perform_action_called());
557 EXPECT_EQ(0, listener.perform_action_index()); 558 EXPECT_EQ(0, listener.perform_action_index());
558 } 559 }
559 560
560 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) { 561 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) {
561 InitCombobox(nullptr, Combobox::STYLE_NORMAL); 562 InitCombobox(nullptr, Combobox::STYLE_NORMAL);
562 563
563 TestComboboxListener listener; 564 TestComboboxListener listener;
564 combobox_->set_listener(&listener); 565 combobox_->set_listener(&listener);
565 566
566 // With STYLE_NORMAL, the click event is ignored. 567 // With STYLE_NORMAL, the click event is ignored. Instead the menu is shwon.
567 SendKeyEvent(ui::VKEY_SPACE); 568 SendKeyEvent(ui::VKEY_SPACE);
569 EXPECT_EQ(1, menu_show_count_);
568 EXPECT_FALSE(listener.on_perform_action_called()); 570 EXPECT_FALSE(listener.on_perform_action_called());
571
569 SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED); 572 SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED);
573 EXPECT_EQ(1, menu_show_count_);
570 EXPECT_FALSE(listener.on_perform_action_called()); 574 EXPECT_FALSE(listener.on_perform_action_called());
571 } 575 }
572 576
573 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKeyActionStyle) { 577 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKeyActionStyle) {
574 InitCombobox(nullptr, Combobox::STYLE_ACTION); 578 InitCombobox(nullptr, Combobox::STYLE_ACTION);
575 579
576 TestComboboxListener listener; 580 TestComboboxListener listener;
577 combobox_->set_listener(&listener); 581 combobox_->set_listener(&listener);
578 582
579 // With STYLE_ACTION, the click event is notified after releasing. 583 // With STYLE_ACTION, the click event is notified after releasing and the menu
584 // is not shown.
580 SendKeyEvent(ui::VKEY_SPACE); 585 SendKeyEvent(ui::VKEY_SPACE);
586 EXPECT_EQ(0, menu_show_count_);
581 EXPECT_FALSE(listener.on_perform_action_called()); 587 EXPECT_FALSE(listener.on_perform_action_called());
588
582 SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED); 589 SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED);
590 EXPECT_EQ(0, menu_show_count_);
583 EXPECT_TRUE(listener.on_perform_action_called()); 591 EXPECT_TRUE(listener.on_perform_action_called());
584 EXPECT_EQ(0, listener.perform_action_index()); 592 EXPECT_EQ(0, listener.perform_action_index());
585 } 593 }
586 594
587 TEST_F(ComboboxTest, NotifyOnClickWithMouse) { 595 TEST_F(ComboboxTest, NotifyOnClickWithMouse) {
588 InitCombobox(nullptr, Combobox::STYLE_ACTION); 596 InitCombobox(nullptr, Combobox::STYLE_ACTION);
589 597
590 TestComboboxListener listener; 598 TestComboboxListener listener;
591 combobox_->set_listener(&listener); 599 combobox_->set_listener(&listener);
592 600
593 combobox_->Layout(); 601 combobox_->Layout();
594 602
595 // Click the right side (arrow button). The menu is shown. 603 // Click the right side (arrow button). The menu is shown.
596 int menu_show_count = 0;
597 test_api_->InstallTestMenuRunner(&menu_show_count);
598 const gfx::Point right_point(combobox_->x() + combobox_->width() - 1, 604 const gfx::Point right_point(combobox_->x() + combobox_->width() - 1,
599 combobox_->y() + combobox_->height() / 2); 605 combobox_->y() + combobox_->height() / 2);
600 606
601 EXPECT_EQ(0, menu_show_count); 607 EXPECT_EQ(0, menu_show_count_);
602 608
603 // On Mac, actions occur on mouse down. Otherwise mouse up. 609 // On Mac, actions occur on mouse down. Otherwise mouse up.
604 #if defined(OS_MACOSX) 610 #if defined(OS_MACOSX)
605 const int kActOnMouseDown = 1; 611 const int kActOnMouseDown = 1;
606 #else 612 #else
607 const int kActOnMouseDown = 0; 613 const int kActOnMouseDown = 0;
608 #endif 614 #endif
609 615
610 PerformMousePress(right_point); 616 PerformMousePress(right_point);
611 EXPECT_EQ(kActOnMouseDown, menu_show_count); 617 EXPECT_EQ(kActOnMouseDown, menu_show_count_);
612 PerformMouseRelease(right_point); 618 PerformMouseRelease(right_point);
613 EXPECT_EQ(1, menu_show_count); 619 EXPECT_EQ(1, menu_show_count_);
614 620
615 // Click the left side (text button). The click event is notified. 621 // Click the left side (text button). The click event is notified.
616 const gfx::Point left_point( 622 const gfx::Point left_point(
617 gfx::Point(combobox_->x() + 1, combobox_->y() + combobox_->height() / 2)); 623 gfx::Point(combobox_->x() + 1, combobox_->y() + combobox_->height() / 2));
618 test_api_->InstallTestMenuRunner(&menu_show_count);
619 624
620 PerformMousePress(left_point); 625 PerformMousePress(left_point);
621 PerformMouseRelease(left_point); 626 PerformMouseRelease(left_point);
622 627
623 EXPECT_EQ(1, menu_show_count); // Unchanged. 628 EXPECT_EQ(1, menu_show_count_); // Unchanged.
624 EXPECT_EQ(0, listener.perform_action_index()); 629 EXPECT_EQ(0, listener.perform_action_index());
625 } 630 }
626 631
627 TEST_F(ComboboxTest, ConsumingPressKeyEvents) { 632 TEST_F(ComboboxTest, ConsumingPressKeyEvents) {
628 InitCombobox(nullptr, Combobox::STYLE_NORMAL); 633 InitCombobox(nullptr, Combobox::STYLE_NORMAL);
629 634
630 int menu_show_count = 0;
631 test_api_->InstallTestMenuRunner(&menu_show_count);
632 EXPECT_TRUE(combobox_->OnKeyPressed( 635 EXPECT_TRUE(combobox_->OnKeyPressed(
633 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE))); 636 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE)));
634 EXPECT_EQ(1, menu_show_count); 637 EXPECT_EQ(1, menu_show_count_);
635 EXPECT_TRUE(combobox_->OnKeyPressed( 638 EXPECT_TRUE(combobox_->OnKeyPressed(
636 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE))); 639 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE)));
637 EXPECT_EQ(2, menu_show_count); 640 EXPECT_EQ(2, menu_show_count_);
638 } 641 }
639 642
640 TEST_F(ComboboxTest, ConsumingKeyPressEventsActionStyle) { 643 TEST_F(ComboboxTest, ConsumingKeyPressEventsActionStyle) {
641 // When the combobox's style is STYLE_ACTION, pressing events of a space key 644 // When the combobox's style is STYLE_ACTION, pressing events of a space key
642 // or an enter key will be consumed. 645 // or an enter key will be consumed and the menu is not shown.
643 InitCombobox(nullptr, Combobox::STYLE_ACTION); 646 InitCombobox(nullptr, Combobox::STYLE_ACTION);
647
644 EXPECT_TRUE(combobox_->OnKeyPressed( 648 EXPECT_TRUE(combobox_->OnKeyPressed(
645 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE))); 649 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE)));
650 EXPECT_EQ(0, menu_show_count_);
646 EXPECT_TRUE(combobox_->OnKeyPressed( 651 EXPECT_TRUE(combobox_->OnKeyPressed(
647 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE))); 652 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE)));
653 EXPECT_EQ(0, menu_show_count_);
648 } 654 }
649 655
650 TEST_F(ComboboxTest, ContentWidth) { 656 TEST_F(ComboboxTest, ContentWidth) {
651 std::vector<std::string> values; 657 std::vector<std::string> values;
652 VectorComboboxModel model(&values); 658 VectorComboboxModel model(&values);
653 TestCombobox combobox(&model, Combobox::STYLE_NORMAL); 659 TestCombobox combobox(&model, Combobox::STYLE_NORMAL);
654 TestCombobox action_combobox(&model, Combobox::STYLE_ACTION); 660 TestCombobox action_combobox(&model, Combobox::STYLE_ACTION);
655 ComboboxTestApi test_api(&combobox); 661 ComboboxTestApi test_api(&combobox);
656 ComboboxTestApi action_test_api(&action_combobox); 662 ComboboxTestApi action_test_api(&action_combobox);
657 663
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(0)); 824 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(0));
819 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(1)); 825 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(1));
820 826
821 EXPECT_EQ(ASCIIToUTF16("PEANUT BUTTER"), menu_model->GetLabelAt(0)); 827 EXPECT_EQ(ASCIIToUTF16("PEANUT BUTTER"), menu_model->GetLabelAt(0));
822 EXPECT_EQ(ASCIIToUTF16("JELLY"), menu_model->GetLabelAt(1)); 828 EXPECT_EQ(ASCIIToUTF16("JELLY"), menu_model->GetLabelAt(1));
823 EXPECT_FALSE(menu_model->IsVisibleAt(0)); 829 EXPECT_FALSE(menu_model->IsVisibleAt(0));
824 EXPECT_TRUE(menu_model->IsVisibleAt(1)); 830 EXPECT_TRUE(menu_model->IsVisibleAt(1));
825 } 831 }
826 832
827 } // namespace views 833 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698