diff options
Diffstat (limited to 'ash/sticky_keys/sticky_keys_unittest.cc')
-rw-r--r-- | ash/sticky_keys/sticky_keys_unittest.cc | 98 |
1 files changed, 80 insertions, 18 deletions
diff --git a/ash/sticky_keys/sticky_keys_unittest.cc b/ash/sticky_keys/sticky_keys_unittest.cc index 8f7a2a3..4c505e1 100644 --- a/ash/sticky_keys/sticky_keys_unittest.cc +++ b/ash/sticky_keys/sticky_keys_unittest.cc @@ -245,26 +245,38 @@ class StickyKeysTest : public test::AshTestBase, } // Creates a synthesized MouseEvent that is not backed by a native event. - ui::MouseEvent* GenerateSynthesizedMouseEvent(bool is_button_press) { - ui::MouseEvent* event = new ui::MouseEvent( - is_button_press ? ui::ET_MOUSE_PRESSED : ui::ET_MOUSE_RELEASED, - gfx::Point(0, 0), - gfx::Point(0, 0), - ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); + ui::MouseEvent* GenerateSynthesizedMouseEventAt(ui::EventType event_type, + const gfx::Point& location) { + ui::MouseEvent* event = new ui::MouseEvent(event_type, + location, + location, + ui::EF_LEFT_MOUSE_BUTTON, + ui::EF_LEFT_MOUSE_BUTTON); ui::Event::DispatcherApi dispatcher(event); dispatcher.set_target(target_); return event; } + // Creates a synthesized mouse press or release event. + ui::MouseEvent* GenerateSynthesizedMouseClickEvent( + bool is_button_press, + const gfx::Point& location) { + return GenerateSynthesizedMouseEventAt( + is_button_press ? ui::ET_MOUSE_PRESSED : ui::ET_MOUSE_RELEASED, + location); + } + // Creates a synthesized ET_MOUSE_MOVED event. - ui::MouseEvent* GenerateSynthesizedMouseEvent(int x, int y) { - ui::MouseEvent* event = new ui::MouseEvent( - ui::ET_MOUSE_MOVED, - gfx::Point(x, y), - gfx::Point(x, y), - ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); + ui::MouseEvent* GenerateSynthesizedMouseMoveEvent( + const gfx::Point& location) { + return GenerateSynthesizedMouseEventAt(ui::ET_MOUSE_MOVED, location); + } + + // Creates a synthesized MouseWHeel event. + ui::MouseWheelEvent* GenerateSynthesizedMouseWheelEvent(int wheel_delta) { + scoped_ptr<ui::MouseEvent> mev( + GenerateSynthesizedMouseEventAt(ui::ET_MOUSEWHEEL, gfx::Point(0, 0))); + ui::MouseWheelEvent* event = new ui::MouseWheelEvent(*mev, 0, wheel_delta); ui::Event::DispatcherApi dispatcher(event); dispatcher.set_target(target_); return event; @@ -491,9 +503,9 @@ TEST_F(StickyKeysTest, MouseMovedModifierTest) { // Press ctrl and handle mouse move events. kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); sticky_key.HandleKeyEvent(kev.get()); - mev.reset(GenerateSynthesizedMouseEvent(0, 0)); + mev.reset(GenerateSynthesizedMouseMoveEvent(gfx::Point(0, 0))); sticky_key.HandleMouseEvent(mev.get()); - mev.reset(GenerateSynthesizedMouseEvent(100, 100)); + mev.reset(GenerateSynthesizedMouseMoveEvent(gfx::Point(100, 100))); sticky_key.HandleMouseEvent(mev.get()); // Sticky keys should be enabled afterwards. @@ -780,12 +792,12 @@ TEST_F(StickyKeysTest, SynthesizedEvents) { EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); scoped_ptr<ui::MouseEvent> mev; - mev.reset(GenerateSynthesizedMouseEvent(true)); + mev.reset(GenerateSynthesizedMouseClickEvent(true, gfx::Point(0, 0))); sticky_key.HandleMouseEvent(mev.get()); EXPECT_TRUE(mev->flags() & ui::EF_CONTROL_DOWN); EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); - mev.reset(GenerateSynthesizedMouseEvent(false)); + mev.reset(GenerateSynthesizedMouseClickEvent(false, gfx::Point(0, 0))); sticky_key.HandleMouseEvent(mev.get()); EXPECT_TRUE(mev->flags() & ui::EF_CONTROL_DOWN); EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); @@ -828,6 +840,22 @@ TEST_F(StickyKeysTest, KeyEventDispatchImpl) { static_cast<ui::KeyEvent*>(events[0])->key_code()); EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); + // Test that synthesized key events are dispatched correctly. + SendActivateStickyKeyPattern(dispatcher, ui::VKEY_CONTROL); + buffer.PopEvents(&events); + scoped_ptr<ui::KeyEvent> kev; + kev.reset(GenerateSynthesizedKeyEvent(true, ui::VKEY_K)); + details = dispatcher->OnEventFromSource(kev.get()); + ASSERT_FALSE(details.dispatcher_destroyed); + buffer.PopEvents(&events); + EXPECT_EQ(2u, events.size()); + EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); + EXPECT_EQ(ui::VKEY_K, static_cast<ui::KeyEvent*>(events[0])->key_code()); + EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); + EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); + EXPECT_EQ(ui::VKEY_CONTROL, + static_cast<ui::KeyEvent*>(events[1])->key_code()); + Shell::GetInstance()->RemovePreTargetHandler(&buffer); } @@ -881,6 +909,22 @@ TEST_P(StickyKeysMouseDispatchTest, MouseEventDispatchImpl) { EXPECT_EQ(ui::VKEY_CONTROL, static_cast<ui::KeyEvent*>(events[1])->key_code()); + // Test synthesized mouse events are dispatched correctly. + SendActivateStickyKeyPattern(dispatcher, ui::VKEY_CONTROL); + buffer.PopEvents(&events); + ev.reset(GenerateSynthesizedMouseClickEvent(false, physical_location)); + details = dispatcher->OnEventFromSource(ev.get()); + ASSERT_FALSE(details.dispatcher_destroyed); + buffer.PopEvents(&events); + EXPECT_EQ(2u, events.size()); + EXPECT_EQ(ui::ET_MOUSE_RELEASED, events[0]->type()); + EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); + EXPECT_EQ(dip_location.ToString(), + static_cast<ui::MouseEvent*>(events[0])->location().ToString()); + EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); + EXPECT_EQ(ui::VKEY_CONTROL, + static_cast<ui::KeyEvent*>(events[1])->key_code()); + Shell::GetInstance()->RemovePreTargetHandler(&buffer); } @@ -935,6 +979,24 @@ TEST_P(StickyKeysMouseDispatchTest, MouseWheelEventDispatchImpl) { EXPECT_EQ(ui::VKEY_CONTROL, static_cast<ui::KeyEvent*>(events[1])->key_code()); + // Test synthesized mouse wheel events are dispatched correctly. + SendActivateStickyKeyPattern(dispatcher, ui::VKEY_CONTROL); + buffer.PopEvents(&events); + ev.reset( + GenerateSynthesizedMouseWheelEvent(ui::MouseWheelEvent::kWheelDelta)); + details = dispatcher->OnEventFromSource(ev.get()); + ASSERT_FALSE(details.dispatcher_destroyed); + buffer.PopEvents(&events); + EXPECT_EQ(2u, events.size()); + EXPECT_TRUE(events[0]->IsMouseWheelEvent()); + EXPECT_EQ(ui::MouseWheelEvent::kWheelDelta / scale_factor, + static_cast<ui::MouseWheelEvent*>(events[0])->y_offset()); + EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); + EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); + EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); + EXPECT_EQ(ui::VKEY_CONTROL, + static_cast<ui::KeyEvent*>(events[1])->key_code()); + Shell::GetInstance()->RemovePreTargetHandler(&buffer); } |