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

Unified Diff: chrome/browser/chromeos/events/event_rewriter_unittest.cc

Issue 255033003: Convert sticky keys to a chromeos::EventRewriter phase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@x354034-er
Patch Set: Convert sticky keys to a chromeos::EventRewriter phase. Created 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/events/event_rewriter_unittest.cc
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index 95f66893fcc6e2efc03b05637e3833364515af51..43159fb765845b74adf4014a649100161ec4e4e8 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -4,15 +4,10 @@
#include "chrome/browser/chromeos/events/event_rewriter.h"
-#include <X11/keysym.h>
-#include <X11/XF86keysym.h>
-#include <X11/Xlib.h>
-#undef Bool
-#undef None
-#undef RootWindow
-
#include <vector>
+#include "ash/shell.h"
+#include "ash/sticky_keys/sticky_keys_controller.h"
#include "ash/test/ash_test_base.h"
#include "ash/wm/window_state.h"
#include "base/basictypes.h"
@@ -32,12 +27,21 @@
#include "ui/aura/window.h"
#include "ui/events/event.h"
#include "ui/events/event_rewriter.h"
+#include "ui/events/test/test_event_processor.h"
+
+#if defined(USE_X11)
+#include <X11/keysym.h>
+
#include "ui/events/test/events_test_utils_x11.h"
#include "ui/events/x/touch_factory_x11.h"
#include "ui/gfx/x/x11_types.h"
+#endif
namespace {
+// The device id of the test touchpad device.
+const unsigned int kTouchPadDeviceId = 1;
+
std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
int ui_flags,
ui::EventType ui_type) {
@@ -142,8 +146,7 @@ namespace chromeos {
class EventRewriterTest : public ash::test::AshTestBase {
public:
EventRewriterTest()
- : display_(gfx::GetXDisplay()),
- mock_user_manager_(new chromeos::MockUserManager),
+ : mock_user_manager_(new chromeos::MockUserManager),
user_manager_enabler_(mock_user_manager_),
input_method_manager_mock_(NULL) {}
virtual ~EventRewriterTest() {}
@@ -177,7 +180,6 @@ class EventRewriterTest : public ash::test::AshTestBase {
return flags;
}
- Display* display_;
chromeos::MockUserManager* mock_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
chromeos::input_method::MockInputMethodManager* input_method_manager_mock_;
@@ -186,7 +188,7 @@ class EventRewriterTest : public ash::test::AshTestBase {
TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
// First, test with a PC keyboard.
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -267,7 +269,7 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
@@ -307,7 +309,7 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
void EventRewriterTest::TestRewriteNumPadKeys() {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -449,7 +451,7 @@ TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) {
// Tests if the rewriter can handle a Command + Num Pad event.
void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -491,7 +493,7 @@ TEST_F(EventRewriterTest,
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -534,7 +536,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -577,7 +579,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kVoidKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase disabled_modifier_tests[] = {
@@ -652,7 +654,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s_tests[] = {
@@ -716,7 +718,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kEscapeKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
@@ -738,7 +740,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s2a_tests[] = {
@@ -815,7 +817,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
search.SetValue(chromeos::input_method::kCapsLockKey);
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -885,7 +887,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLock) {
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -904,7 +906,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -937,7 +939,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
chromeos::input_method::FakeImeKeyboard ime_keyboard;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -989,7 +991,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
control.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -1025,7 +1027,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs);
control.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
input_method_manager_mock_->set_mod3_used(true);
@@ -1042,7 +1044,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
@@ -1151,7 +1153,7 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -1407,7 +1409,7 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs);
search.SetValue(chromeos::input_method::kControlKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -1434,6 +1436,8 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
}
TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
+#if defined(USE_X11)
+ // TODO(kpschoedel): pending alternative to xevent.xany.send_event
// Remap Control to Alt.
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
@@ -1441,7 +1445,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
// Send left control press.
@@ -1460,6 +1464,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
rewriter.RewriteEvent(keyevent, &new_event));
EXPECT_FALSE(new_event);
}
+#endif
}
TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
@@ -1470,7 +1475,7 @@ TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(0);
Daniel Erat 2014/06/05 23:16:10 nit: s/0/NULL/
kpschoedel 2014/06/06 17:53:23 Done.
rewriter.set_pref_service_for_testing(&prefs);
const int kTouchId = 2;
@@ -1487,6 +1492,64 @@ TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
new_event->flags() & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN));
}
+// Keeps a buffer of handled events.
+class EventBuffer : public ui::test::TestEventProcessor {
+ public:
+ EventBuffer() {}
+ virtual ~EventBuffer() {}
+
+ void PopEvents(ScopedVector<ui::Event>* events) {
+ events->clear();
+ events->swap(events_);
+ }
+
+ private:
+ // ui::EventProcessor overrides:
+ virtual ui::EventDispatchDetails OnEventFromSource(
+ ui::Event* event) OVERRIDE {
+ if (event->IsKeyEvent()) {
+ events_.push_back(new ui::KeyEvent(*static_cast<ui::KeyEvent*>(event)));
+ } else if (event->IsMouseWheelEvent()) {
+ events_.push_back(
+ new ui::MouseWheelEvent(*static_cast<ui::MouseWheelEvent*>(event)));
+ } else if (event->IsMouseEvent()) {
+ events_.push_back(
+ new ui::MouseEvent(*static_cast<ui::MouseEvent*>(event)));
+ }
+ return ui::EventDispatchDetails();
+ }
+
+ ScopedVector<ui::Event> events_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventBuffer);
+};
+
+// Trivial EventSource that does nothing but send events.
+class TestEventSource : public ui::EventSource {
+ public:
+ explicit TestEventSource(ui::EventProcessor* processor)
+ : processor_(processor) {}
+ virtual ui::EventProcessor* GetEventProcessor() OVERRIDE {
+ return processor_;
+ }
+ ui::EventDispatchDetails Send(ui::Event* event) {
+ ui::EventDispatchDetails details = SendEventToProcessor(event);
Daniel Erat 2014/06/05 23:16:10 return the details directly
kpschoedel 2014/06/06 17:53:23 Done (used to have debug logging in there).
+ return details;
+ }
+
+ void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) {
+ ui::KeyEvent press(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE, false);
+ ui::EventDispatchDetails details = Send(&press);
+ CHECK(!details.dispatcher_destroyed);
+ ui::KeyEvent release(ui::ET_KEY_RELEASED, key_code, ui::EF_NONE, false);
+ details = Send(&release);
+ CHECK(!details.dispatcher_destroyed);
+ }
+
+ private:
+ ui::EventProcessor* processor_;
+};
+
// Tests of event rewriting that depend on the Ash window manager.
class EventRewriterAshTest : public ash::test::AshTestBase {
public:
@@ -1500,12 +1563,23 @@ class EventRewriterAshTest : public ash::test::AshTestBase {
return rewriter_->RewriteEvent(event, rewritten_event);
}
+ EventRewriter* rewriter() const { return rewriter_.get(); }
+
+ ash::StickyKeysController* sticky_keys_controller() const {
+ return sticky_keys_controller_;
+ }
+
protected:
virtual void SetUp() OVERRIDE {
AshTestBase::SetUp();
- rewriter_.reset(new EventRewriter());
+ sticky_keys_controller_ =
+ ash::Shell::GetInstance()->sticky_keys_controller();
+ rewriter_.reset(new EventRewriter(sticky_keys_controller_));
chromeos::Preferences::RegisterProfilePrefs(prefs_.registry());
rewriter_->set_pref_service_for_testing(&prefs_);
+#if defined(USE_X11)
+ ui::SetUpTouchPadForTest(kTouchPadDeviceId);
+#endif
}
virtual void TearDown() OVERRIDE {
@@ -1520,6 +1594,7 @@ class EventRewriterAshTest : public ash::test::AshTestBase {
chromeos::MockUserManager* mock_user_manager_; // Not owned.
chromeos::ScopedUserManagerEnabler user_manager_enabler_;
+ ash::StickyKeysController* sticky_keys_controller_;
DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest);
};
@@ -1577,7 +1652,7 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kAltKey);
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
// Check that Control + Left Button is converted (via Alt + Left Button)
@@ -1599,12 +1674,15 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
+#if defined(USE_X11)
+ // TODO(kpschoedel): pending changes for crbug.com/360377
+ // to |chromeos::EventRewriter::RewriteLocatedEvent()
std::vector<unsigned int> device_list;
device_list.push_back(10);
device_list.push_back(11);
ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
TestingPrefServiceSyncable prefs;
- EventRewriter rewriter;
+ EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN;
{
@@ -1670,6 +1748,132 @@ TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
int flags = RewriteMouseEvent(&rewriter, release);
EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
}
+#endif
+}
+
+TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
+ // Test the actual key event dispatch implementation.
+ EventBuffer buffer;
+ TestEventSource source(&buffer);
+ source.AddEventRewriter(rewriter());
+ sticky_keys_controller()->Enable(true);
+ ScopedVector<ui::Event> events;
+
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[0])->key_code());
+
+ // Test key press event is correctly modified and modifier release
+ // event is sent.
+ ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE, false);
+ ui::EventDispatchDetails details = source.Send(&press);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
+ EXPECT_EQ(ui::VKEY_C, 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());
+
+ // Test key release event is not modified.
+ ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE, false);
+ details = source.Send(&release);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type());
+ EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code());
+ EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+}
+
+TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
+ EventBuffer buffer;
+ TestEventSource source(&buffer);
+ source.AddEventRewriter(rewriter());
+ sticky_keys_controller()->Enable(true);
+ ScopedVector<ui::Event> events;
+
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+
+ // Test mouse press event is correctly modified.
+ gfx::Point location(0, 0);
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
+ location,
+ location,
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ ui::EventDispatchDetails details = source.Send(&press);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(1u, events.size());
+ EXPECT_EQ(ui::ET_MOUSE_PRESSED, events[0]->type());
+ EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN);
+
+ // Test mouse release event is correctly modified and modifier release
+ // event is sent. The mouse event should have the correct DIP location.
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
+ location,
+ location,
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ details = source.Send(&release);
+ 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(ui::ET_KEY_RELEASED, events[1]->type());
+ EXPECT_EQ(ui::VKEY_CONTROL,
+ static_cast<ui::KeyEvent*>(events[1])->key_code());
+}
+
+TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
+ EventBuffer buffer;
+ TestEventSource source(&buffer);
+ source.AddEventRewriter(rewriter());
+ sticky_keys_controller()->Enable(true);
+ ScopedVector<ui::Event> events;
+
+ // Test positive mouse wheel event is correctly modified and modifier release
+ // event is sent.
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+ gfx::Point location(0, 0);
+ ui::MouseEvent mev(ui::ET_MOUSEWHEEL,
+ location,
+ location,
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta);
+ ui::EventDispatchDetails details = source.Send(&positive);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_TRUE(events[0]->IsMouseWheelEvent());
+ 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());
+
+ // Test negative mouse wheel event is correctly modified and modifier release
+ // event is sent.
+ source.SendActivateStickyKeyPattern(ui::VKEY_CONTROL);
+ buffer.PopEvents(&events);
+ ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta);
+ details = source.Send(&negative);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ buffer.PopEvents(&events);
+ EXPECT_EQ(2u, events.size());
+ EXPECT_TRUE(events[0]->IsMouseWheelEvent());
+ 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());
}
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698