Chromium Code Reviews| Index: ui/views/view_unittest.cc |
| diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc |
| index e9af12ad5a964d0a67207326d15e99dbd2163f12..7c587038b69c6c0cc047419d4524c56dc6f1c97a 100644 |
| --- a/ui/views/view_unittest.cc |
| +++ b/ui/views/view_unittest.cc |
| @@ -30,6 +30,7 @@ |
| #include "ui/events/event_utils.h" |
| #include "ui/events/keycodes/keyboard_codes.h" |
| #include "ui/events/scoped_target_handler.h" |
| +#include "ui/events/test/event_generator.h" |
| #include "ui/gfx/canvas.h" |
| #include "ui/gfx/path.h" |
| #include "ui/gfx/transform.h" |
| @@ -2103,28 +2104,57 @@ bool TestView::AcceleratorPressed(const ui::Accelerator& accelerator) { |
| return true; |
| } |
| +namespace { |
| + |
| +class TestViewWidget { |
|
tapted
2016/11/18 07:28:04
nit: comment like
// A Widget with a TestView in
themblsha
2016/11/18 13:31:50
Done.
|
| + public: |
| + TestViewWidget(const Widget::InitParams& create_params, |
| + ui::Accelerator* initial_accelerator, |
| + bool show_after_init = true) |
| + : view_(new TestView) { |
| + view_->Reset(); |
| + |
| + // Register a keyboard accelerator before the view is added to a window. |
| + if (initial_accelerator) { |
| + view_->AddAccelerator(*initial_accelerator); |
| + EXPECT_EQ(view_->accelerator_count_map_[*initial_accelerator], 0); |
| + } |
| + |
| + // Create a window and add the view as its child. |
| + Widget::InitParams params = create_params; |
| + params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| + params.bounds = gfx::Rect(0, 0, 100, 100); |
| + widget_.Init(params); |
| + View* root = widget_.GetRootView(); |
| + root->AddChildView(view_); |
| + if (show_after_init) |
| + widget_.Show(); |
| + |
| + EXPECT_TRUE(widget_.GetFocusManager()); |
| + } |
| + |
| + TestView* view() { return view_; } |
| + Widget* widget() { return &widget_; } |
| + |
| + private: |
| + TestView* view_; |
| + Widget widget_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestViewWidget); |
| +}; |
| + |
| +} // namespace |
| + |
| // On non-ChromeOS aura there is extra logic to determine whether a view should |
| // handle accelerators or not (see View::CanHandleAccelerators for details). |
| // This test targets that extra logic, but should also work on other platforms. |
| TEST_F(ViewTest, HandleAccelerator) { |
| ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| - TestView* view = new TestView(); |
| - view->Reset(); |
| - view->AddAccelerator(return_accelerator); |
| - EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| - |
| - // Create a window and add the view as its child. |
| - std::unique_ptr<Widget> widget(new Widget); |
| - Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - params.bounds = gfx::Rect(0, 0, 100, 100); |
| - widget->Init(params); |
| - View* root = widget->GetRootView(); |
| - root->AddChildView(view); |
| - widget->Show(); |
| - |
| + TestViewWidget test_widget(CreateParams(Widget::InitParams::TYPE_POPUP), |
| + &return_accelerator); |
| + TestView* view = test_widget.view(); |
| + Widget* widget = test_widget.widget(); |
| FocusManager* focus_manager = widget->GetFocusManager(); |
| - ASSERT_TRUE(focus_manager); |
| #if defined(USE_AURA) && !defined(OS_CHROMEOS) |
| // When a non-child view is not active, it shouldn't handle accelerators. |
| @@ -2181,30 +2211,58 @@ TEST_F(ViewTest, HandleAccelerator) { |
| #endif |
| } |
| +#if defined(OS_MACOSX) |
|
tapted
2016/11/18 07:28:04
Does this new test need to be OS_MACOSX? (ideally
themblsha
2016/11/18 13:31:50
I'm using EF_COMMAND_DOWN, I think it's not very p
tapted
2016/11/21 06:41:02
Only the first test expectation does, and it would
themblsha
2016/11/21 12:44:20
Done.
|
| +// Test that BridgedContentView correctly handle Accelerator key events. |
|
tapted
2016/11/18 07:28:04
nit: handle -> handles
also add
.. key events wh
themblsha
2016/11/18 13:31:50
Done.
|
| +TEST_F(ViewTest, ActivateAcceleratorOnMac) { |
|
themblsha
2016/11/17 17:52:16
Here's the test for all the code paths.
|
| + // Cmd+1 translates to "noop:" command by interpretKeyEvents. |
| + ui::Accelerator command_accelerator(ui::VKEY_1, ui::EF_COMMAND_DOWN); |
| + TestViewWidget test_widget(CreateParams(Widget::InitParams::TYPE_POPUP), |
| + &command_accelerator); |
| + TestView* view = test_widget.view(); |
| + |
| + // Emulate normal event dispatch through -[NSWindow sendEvent:]. |
| + ui::test::EventGenerator event_generator( |
| + test_widget.widget()->GetNativeWindow()); |
| + event_generator.set_target(ui::test::EventGenerator::Target::WINDOW); |
| + |
| + event_generator.PressKey(command_accelerator.key_code(), |
| + command_accelerator.modifiers()); |
| + event_generator.ReleaseKey(command_accelerator.key_code(), |
| + command_accelerator.modifiers()); |
| + EXPECT_EQ(view->accelerator_count_map_[command_accelerator], 1); |
| + |
| + // Without an _wantsKeyDownForEvent: override we'll only get a keyUp: event |
| + // for this accelerator. |
| + ui::Accelerator key_up_accelerator(ui::VKEY_TAB, |
| + ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN); |
| + view->AddAccelerator(key_up_accelerator); |
| + event_generator.PressKey(key_up_accelerator.key_code(), |
| + key_up_accelerator.modifiers()); |
| + event_generator.ReleaseKey(key_up_accelerator.key_code(), |
| + key_up_accelerator.modifiers()); |
| + EXPECT_EQ(view->accelerator_count_map_[key_up_accelerator], 1); |
| + |
| + // We should handle this accelerator inside keyDown: as it doesn't translate |
| + // to any command by default. |
| + ui::Accelerator key_down_accelerator(ui::VKEY_L, ui::EF_COMMAND_DOWN); |
| + view->AddAccelerator(key_down_accelerator); |
| + event_generator.PressKey(key_down_accelerator.key_code(), |
| + key_down_accelerator.modifiers()); |
| + event_generator.ReleaseKey(key_down_accelerator.key_code(), |
| + key_down_accelerator.modifiers()); |
| + EXPECT_EQ(view->accelerator_count_map_[key_down_accelerator], 1); |
| +} |
| +#endif // OS_MACOSX |
| + |
| // TODO: these tests were initially commented out when getting aura to |
| // run. Figure out if still valuable and either nuke or fix. |
| -#if 0 |
| +#if defined(OS_MACOSX) |
| TEST_F(ViewTest, ActivateAccelerator) { |
| - // Register a keyboard accelerator before the view is added to a window. |
| ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| - TestView* view = new TestView(); |
| - view->Reset(); |
| - view->AddAccelerator(return_accelerator); |
| - EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| - |
| - // Create a window and add the view as its child. |
| - std::unique_ptr<Widget> widget(new Widget); |
| - Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - params.bounds = gfx::Rect(0, 0, 100, 100); |
| - widget->Init(params); |
| - View* root = widget->GetRootView(); |
| - root->AddChildView(view); |
| - widget->Show(); |
| - |
| - // Get the focus manager. |
| - FocusManager* focus_manager = widget->GetFocusManager(); |
| - ASSERT_TRUE(focus_manager); |
| + TestViewWidget test_widget(CreateParams(Widget::InitParams::TYPE_POPUP), |
| + &return_accelerator); |
| + TestView* view = test_widget.view(); |
| + FocusManager* focus_manager = test_widget.widget()->GetFocusManager(); |
| // Hit the return key and see if it takes effect. |
| EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| @@ -2245,55 +2303,29 @@ TEST_F(ViewTest, ActivateAccelerator) { |
| EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 2); |
| EXPECT_EQ(view->accelerator_count_map_[escape_accelerator], 2); |
| - |
| - widget->CloseNow(); |
| } |
| TEST_F(ViewTest, HiddenViewWithAccelerator) { |
| ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| - TestView* view = new TestView(); |
| - view->Reset(); |
| - view->AddAccelerator(return_accelerator); |
| - EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| - |
| - std::unique_ptr<Widget> widget(new Widget); |
| - Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - params.bounds = gfx::Rect(0, 0, 100, 100); |
| - widget->Init(params); |
| - View* root = widget->GetRootView(); |
| - root->AddChildView(view); |
| - widget->Show(); |
| - |
| - FocusManager* focus_manager = widget->GetFocusManager(); |
| - ASSERT_TRUE(focus_manager); |
| + TestViewWidget test_widget(CreateParams(Widget::InitParams::TYPE_POPUP), |
| + &return_accelerator); |
| + TestView* view = test_widget.view(); |
| + FocusManager* focus_manager = test_widget.widget()->GetFocusManager(); |
| view->SetVisible(false); |
| EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| view->SetVisible(true); |
| EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| - |
| - widget->CloseNow(); |
| } |
| TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { |
| ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| - TestView* view = new TestView(); |
| - view->Reset(); |
| - view->AddAccelerator(return_accelerator); |
| - EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 0); |
| - |
| - std::unique_ptr<Widget> widget(new Widget); |
| - Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| - params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - params.bounds = gfx::Rect(0, 0, 100, 100); |
| - widget->Init(params); |
| - View* root = widget->GetRootView(); |
| - root->AddChildView(view); |
| - |
| - FocusManager* focus_manager = widget->GetFocusManager(); |
| - ASSERT_TRUE(focus_manager); |
| + TestViewWidget test_widget(CreateParams(Widget::InitParams::TYPE_POPUP), |
| + &return_accelerator, false); |
| + TestView* view = test_widget.view(); |
| + Widget* widget = test_widget.widget(); |
| + FocusManager* focus_manager = test_widget.widget()->GetFocusManager(); |
| EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| EXPECT_EQ(0, view->accelerator_count_map_[return_accelerator]); |
| @@ -2305,10 +2337,12 @@ TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { |
| widget->Hide(); |
| EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| EXPECT_EQ(1, view->accelerator_count_map_[return_accelerator]); |
| - |
| - widget->CloseNow(); |
| } |
| +#endif // OS_MACOSX |
| +// TODO: these tests were initially commented out when getting aura to |
| +// run. Figure out if still valuable and either nuke or fix. |
| +#if 0 |
| //////////////////////////////////////////////////////////////////////////////// |
| // Mouse-wheel message rerouting |
| //////////////////////////////////////////////////////////////////////////////// |