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

Unified Diff: ui/views/view_unittest.cc

Issue 2505943002: MacViews: Fix accelerator handling while Omnibox is in focus. (Closed)
Patch Set: Remove performKeyEquivalent:, update keyDown:, add tests. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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
////////////////////////////////////////////////////////////////////////////////

Powered by Google App Engine
This is Rietveld 408576698