| Index: ash/sticky_keys/sticky_keys_unittest.cc
|
| diff --git a/ash/sticky_keys/sticky_keys_unittest.cc b/ash/sticky_keys/sticky_keys_unittest.cc
|
| index 8ae0a1d402f5da4b5334a72fae940d49a0c2c4b6..4593c86a04f6c4fd060efa78c43918b01d5321f0 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.
|
| @@ -789,12 +801,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());
|
| @@ -837,6 +849,21 @@ 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));
|
| + dispatcher->OnEventFromSource(kev.get());
|
| + 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);
|
| }
|
|
|
| @@ -890,6 +917,21 @@ 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));
|
| + dispatcher->OnEventFromSource(ev.get());
|
| + 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);
|
| }
|
|
|
| @@ -944,6 +986,23 @@ 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));
|
| + dispatcher->OnEventFromSource(ev.get());
|
| + 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);
|
| }
|
|
|
|
|