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

Side by Side Diff: ui/views/controls/menu/menu_controller_unittest.cc

Issue 2876203003: Make shelf item can be dragged when context menu is opened.
Patch Set: Fixed tests. Created 3 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
« no previous file with comments | « ui/views/controls/menu/menu_controller.cc ('k') | ui/views/controls/menu/menu_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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/menu/menu_controller.h" 5 #include "ui/views/controls/menu/menu_controller.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 } 146 }
147 } 147 }
148 148
149 int outstanding_touches() const { return outstanding_touches_; } 149 int outstanding_touches() const { return outstanding_touches_; }
150 150
151 private: 151 private:
152 int outstanding_touches_; 152 int outstanding_touches_;
153 DISALLOW_COPY_AND_ASSIGN(TestEventHandler); 153 DISALLOW_COPY_AND_ASSIGN(TestEventHandler);
154 }; 154 };
155 155
156 class TestWidget : public Widget {
msw 2017/06/29 19:02:10 nit: |GestureTestWidget| and comment "A test widge
minch1 2017/06/30 19:53:08 Done.
157 public:
158 TestWidget() : gesture_count_(0) {}
159
160 void OnGestureEvent(ui::GestureEvent* event) override { gesture_count_++; }
161
162 int gesture_count() const { return gesture_count_; }
163
164 private:
165 int gesture_count_;
166 DISALLOW_COPY_AND_ASSIGN(TestWidget);
167 };
168
156 #if defined(USE_AURA) 169 #if defined(USE_AURA)
157 // A DragDropClient which does not trigger a nested run loop. Instead a 170 // A DragDropClient which does not trigger a nested run loop. Instead a
158 // callback is triggered during StartDragAndDrop in order to allow testing. 171 // callback is triggered during StartDragAndDrop in order to allow testing.
159 class TestDragDropClient : public aura::client::DragDropClient { 172 class TestDragDropClient : public aura::client::DragDropClient {
160 public: 173 public:
161 explicit TestDragDropClient(const base::Closure& callback) 174 explicit TestDragDropClient(const base::Closure& callback)
162 : start_drag_and_drop_callback_(callback), drag_in_progress_(false) {} 175 : start_drag_and_drop_callback_(callback), drag_in_progress_(false) {}
163 ~TestDragDropClient() override {} 176 ~TestDragDropClient() override {}
164 177
165 // aura::client::DragDropClient: 178 // aura::client::DragDropClient:
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 464
452 // Causes the |menu_controller_| to begin dragging. Use TestDragDropClient to 465 // Causes the |menu_controller_| to begin dragging. Use TestDragDropClient to
453 // avoid nesting message loops. 466 // avoid nesting message loops.
454 void StartDrag() { 467 void StartDrag() {
455 const gfx::Point location; 468 const gfx::Point location;
456 menu_controller_->state_.item = menu_item()->GetSubmenu()->GetMenuItemAt(0); 469 menu_controller_->state_.item = menu_item()->GetSubmenu()->GetMenuItemAt(0);
457 menu_controller_->StartDrag( 470 menu_controller_->StartDrag(
458 menu_item()->GetSubmenu()->GetMenuItemAt(0)->CreateSubmenu(), location); 471 menu_item()->GetSubmenu()->GetMenuItemAt(0)->CreateSubmenu(), location);
459 } 472 }
460 473
461 Widget* owner() { return owner_.get(); } 474 TestWidget* owner() { return owner_.get(); }
462 ui::test::EventGenerator* event_generator() { return event_generator_.get(); } 475 ui::test::EventGenerator* event_generator() { return event_generator_.get(); }
463 TestMenuItemViewShown* menu_item() { return menu_item_.get(); } 476 TestMenuItemViewShown* menu_item() { return menu_item_.get(); }
464 TestMenuDelegate* menu_delegate() { return menu_delegate_.get(); } 477 TestMenuDelegate* menu_delegate() { return menu_delegate_.get(); }
465 TestMenuControllerDelegate* menu_controller_delegate() { 478 TestMenuControllerDelegate* menu_controller_delegate() {
466 return menu_controller_delegate_.get(); 479 return menu_controller_delegate_.get();
467 } 480 }
468 MenuController* menu_controller() { return menu_controller_; } 481 MenuController* menu_controller() { return menu_controller_; }
469 const MenuItemView* pending_state_item() const { 482 const MenuItemView* pending_state_item() const {
470 return menu_controller_->pending_state_.item; 483 return menu_controller_->pending_state_.item;
471 } 484 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 521
509 if (!owner_->IsClosed()) 522 if (!owner_->IsClosed())
510 owner_->RemoveObserver(menu_controller_); 523 owner_->RemoveObserver(menu_controller_);
511 524
512 menu_controller_->showing_ = false; 525 menu_controller_->showing_ = false;
513 menu_controller_->owner_ = nullptr; 526 menu_controller_->owner_ = nullptr;
514 delete menu_controller_; 527 delete menu_controller_;
515 menu_controller_ = nullptr; 528 menu_controller_ = nullptr;
516 } 529 }
517 530
531 int CountOwnerOnGestureEvent() { return owner_->gesture_count(); }
532
518 private: 533 private:
519 void Init() { 534 void Init() {
520 owner_.reset(new Widget); 535 owner_.reset(new TestWidget);
msw 2017/06/29 19:02:10 nit: owner = base::MakeUnique<TestWidget>(); (opti
minch1 2017/06/30 19:53:08 Done.
521 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); 536 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
522 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 537 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
523 owner_->Init(params); 538 owner_->Init(params);
524 event_generator_.reset( 539 event_generator_.reset(
525 new ui::test::EventGenerator(owner_->GetNativeWindow())); 540 new ui::test::EventGenerator(owner_->GetNativeWindow()));
526 owner_->Show(); 541 owner_->Show();
527 542
528 SetupMenuItem(); 543 SetupMenuItem();
529 SetupMenuController(); 544 SetupMenuController();
530 } 545 }
(...skipping 14 matching lines...) Expand all
545 menu_controller_->owner_ = owner_.get(); 560 menu_controller_->owner_ = owner_.get();
546 menu_controller_->showing_ = true; 561 menu_controller_->showing_ = true;
547 menu_controller_->SetSelection( 562 menu_controller_->SetSelection(
548 menu_item_.get(), MenuController::SELECTION_UPDATE_IMMEDIATELY); 563 menu_item_.get(), MenuController::SELECTION_UPDATE_IMMEDIATELY);
549 menu_item_->SetController(menu_controller_); 564 menu_item_->SetController(menu_controller_);
550 } 565 }
551 566
552 // Not owned. 567 // Not owned.
553 DestructingTestViewsDelegate* test_views_delegate_; 568 DestructingTestViewsDelegate* test_views_delegate_;
554 569
555 std::unique_ptr<Widget> owner_; 570 std::unique_ptr<TestWidget> owner_;
556 std::unique_ptr<ui::test::EventGenerator> event_generator_; 571 std::unique_ptr<ui::test::EventGenerator> event_generator_;
557 std::unique_ptr<TestMenuItemViewShown> menu_item_; 572 std::unique_ptr<TestMenuItemViewShown> menu_item_;
558 std::unique_ptr<TestMenuControllerDelegate> menu_controller_delegate_; 573 std::unique_ptr<TestMenuControllerDelegate> menu_controller_delegate_;
559 std::unique_ptr<TestMenuDelegate> menu_delegate_; 574 std::unique_ptr<TestMenuDelegate> menu_delegate_;
560 MenuController* menu_controller_; 575 MenuController* menu_controller_;
561 576
562 DISALLOW_COPY_AND_ASSIGN(MenuControllerTest); 577 DISALLOW_COPY_AND_ASSIGN(MenuControllerTest);
563 }; 578 };
564 579
565 #if defined(OS_LINUX) && defined(USE_X11) 580 #if defined(OS_LINUX) && defined(USE_X11)
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 // Nested run 1114 // Nested run
1100 controller->AddNestedDelegate(nested_delegate.get()); 1115 controller->AddNestedDelegate(nested_delegate.get());
1101 controller->Run(owner(), nullptr, menu_item(), gfx::Rect(), 1116 controller->Run(owner(), nullptr, menu_item(), gfx::Rect(),
1102 MENU_ANCHOR_TOPLEFT, false, false); 1117 MENU_ANCHOR_TOPLEFT, false, false);
1103 1118
1104 controller->CancelAll(); 1119 controller->CancelAll();
1105 EXPECT_EQ(1, delegate->on_menu_closed_called()); 1120 EXPECT_EQ(1, delegate->on_menu_closed_called());
1106 EXPECT_EQ(1, nested_delegate->on_menu_closed_called()); 1121 EXPECT_EQ(1, nested_delegate->on_menu_closed_called());
1107 } 1122 }
1108 1123
1124 #if !defined(OS_MACOSX)
1125 TEST_F(MenuControllerTest, PreserveGestureForOwner) {
1126 MenuController* controller = menu_controller();
1127 MenuItemView* item = menu_item();
1128 controller->Run(owner(), nullptr, item, gfx::Rect(),
1129 MENU_ANCHOR_FIXED_BOTTOMCENTER, false, false);
1130 SubmenuView* sub_menu = item->GetSubmenu();
1131 sub_menu->ShowAt(owner(), gfx::Rect(0, 0, 100, 100), true);
1132
1133 // Gesture triggered outside the menu.
msw 2017/06/29 19:02:10 nit: "The menu's owner should receive gestures tri
minch1 2017/06/30 19:53:08 Done.
1134 gfx::Point location(sub_menu->bounds().bottom_left().x(),
1135 sub_menu->bounds().bottom_left().y() + 10);
1136 ui::GestureEvent event(location.x(), location.y(), 0, ui::EventTimeForNow(),
1137 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN));
1138 controller->set_send_gesture_events_to_owner(true);
msw 2017/06/29 19:02:10 optional nit: test that gesture events are not sen
minch1 2017/06/30 19:53:08 Done.
1139 controller->OnGestureEvent(sub_menu, &event);
1140 EXPECT_EQ(CountOwnerOnGestureEvent(), 1);
1141
1142 ui::GestureEvent event2(location.x(), location.y(), 0, ui::EventTimeForNow(),
1143 ui::GestureEventDetails(ui::ET_GESTURE_END));
1144
1145 controller->OnGestureEvent(sub_menu, &event2);
1146 EXPECT_EQ(CountOwnerOnGestureEvent(), 2);
1147
1148 // ET_GESTURE_END disabled preserve_current_gesture_for_owner. Then
msw 2017/06/29 19:02:10 nit: ET_GESTURE_END resets the |send_gesture_event
minch1 2017/06/30 19:53:08 Done.
1149 // OnGestureEvent of the owner will not be called.
1150 controller->OnGestureEvent(sub_menu, &event2);
1151 EXPECT_EQ(CountOwnerOnGestureEvent(), 2);
1152 }
1153 #endif // !defined(OS_MACOSX)
1154
1109 // Tests that a nested menu does not crash when trying to repost events that 1155 // Tests that a nested menu does not crash when trying to repost events that
1110 // occur outside of the bounds of the menu. Instead a proper shutdown should 1156 // occur outside of the bounds of the menu. Instead a proper shutdown should
1111 // occur. 1157 // occur.
1112 TEST_F(MenuControllerTest, AsynchronousRepostEvent) { 1158 TEST_F(MenuControllerTest, AsynchronousRepostEvent) {
1113 MenuController* controller = menu_controller(); 1159 MenuController* controller = menu_controller();
1114 TestMenuControllerDelegate* delegate = menu_controller_delegate(); 1160 TestMenuControllerDelegate* delegate = menu_controller_delegate();
1115 std::unique_ptr<TestMenuControllerDelegate> nested_delegate( 1161 std::unique_ptr<TestMenuControllerDelegate> nested_delegate(
1116 new TestMenuControllerDelegate()); 1162 new TestMenuControllerDelegate());
1117 1163
1118 controller->AddNestedDelegate(nested_delegate.get()); 1164 controller->AddNestedDelegate(nested_delegate.get());
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 // crash. 1460 // crash.
1415 TestAsyncEscapeKey(); 1461 TestAsyncEscapeKey();
1416 EXPECT_EQ(nested_controller_delegate_2->on_menu_closed_called(), 1); 1462 EXPECT_EQ(nested_controller_delegate_2->on_menu_closed_called(), 1);
1417 EXPECT_EQ(menu_controller_delegate(), GetCurrentDelegate()); 1463 EXPECT_EQ(menu_controller_delegate(), GetCurrentDelegate());
1418 } 1464 }
1419 1465
1420 #endif // defined(USE_AURA) 1466 #endif // defined(USE_AURA)
1421 1467
1422 } // namespace test 1468 } // namespace test
1423 } // namespace views 1469 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/controls/menu/menu_controller.cc ('k') | ui/views/controls/menu/menu_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698