| 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 4b3a244cb2714a2ccc907012a794130ae695f667..257132aa1a29d97da4cd20c59ec4ac9a97219059 100644
|
| --- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
|
| +++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
|
| @@ -43,6 +43,7 @@ namespace {
|
|
|
| // The device id of the test touchpad device.
|
| const unsigned int kTouchPadDeviceId = 1;
|
| +const int kKeyboardDeviceId = 2;
|
|
|
| std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
|
| int ui_flags,
|
| @@ -91,6 +92,37 @@ struct KeyTestCase {
|
| } input, expected;
|
| };
|
|
|
| +#if defined(USE_X11)
|
| +// Check rewriting of an X11-based key event.
|
| +void CheckX11KeyTestCase(const std::string& id,
|
| + const std::string& expected,
|
| + chromeos::EventRewriter* rewriter,
|
| + const KeyTestCase& test,
|
| + XEvent* xevent) {
|
| + ui::KeyEvent xkey_event(xevent, false);
|
| + if (test.test & KeyTestCase::NUMPAD)
|
| + xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY);
|
| + // Verify that the X11-based key event is as expected.
|
| + EXPECT_EQ(id + GetExpectedResultAsString(
|
| + test.input.key_code, test.input.flags, test.type),
|
| + id + GetKeyEventAsString(xkey_event));
|
| + // Rewrite the event and check the result.
|
| + scoped_ptr<ui::Event> new_event;
|
| + rewriter->RewriteEvent(xkey_event, &new_event);
|
| + ui::KeyEvent& rewritten_key_event =
|
| + new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
|
| + EXPECT_EQ(expected, id + GetKeyEventAsString(rewritten_key_event));
|
| + if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) &&
|
| + (rewritten_key_event.native_event()->xkey.keycode != 0)) {
|
| + // Build a new ui::KeyEvent from the rewritten native component,
|
| + // and check that it also matches the rewritten event.
|
| + EXPECT_TRUE(rewritten_key_event.native_event());
|
| + ui::KeyEvent from_native_event(rewritten_key_event.native_event(), false);
|
| + EXPECT_EQ(expected, id + GetKeyEventAsString(from_native_event));
|
| + }
|
| +}
|
| +#endif
|
| +
|
| // Tests a single stateless key rewrite operation.
|
| // |i| is a an identifying number to locate failing tests in the tables.
|
| void CheckKeyTestCase(size_t i,
|
| @@ -112,31 +144,22 @@ void CheckKeyTestCase(size_t i,
|
| #if defined(USE_X11)
|
| if (test.test & KeyTestCase::TEST_X11) {
|
| ui::ScopedXI2Event xev;
|
| + // Test an XKeyEvent.
|
| xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags);
|
| XEvent* xevent = xev;
|
| - if (xevent->xkey.keycode) {
|
| - ui::KeyEvent xkey_event(xevent, false);
|
| - if (test.test & KeyTestCase::NUMPAD)
|
| - xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY);
|
| - // Verify that the X11-based key event is as expected.
|
| - EXPECT_EQ(id + GetExpectedResultAsString(
|
| - test.input.key_code, test.input.flags, test.type),
|
| - id + GetKeyEventAsString(xkey_event));
|
| - // Rewrite the event and check the result.
|
| - scoped_ptr<ui::Event> new_event;
|
| - rewriter->RewriteEvent(xkey_event, &new_event);
|
| - ui::KeyEvent& rewritten_key_event =
|
| - new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
|
| - EXPECT_EQ(expected, id + GetKeyEventAsString(rewritten_key_event));
|
| - if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) &&
|
| - (rewritten_key_event.native_event()->xkey.keycode != 0)) {
|
| - // Build a new ui::KeyEvent from the rewritten native component,
|
| - // and check that it also matches the rewritten event.
|
| - ui::KeyEvent from_native_event(rewritten_key_event.native_event(),
|
| - false);
|
| - EXPECT_EQ(expected, id + GetKeyEventAsString(from_native_event));
|
| - }
|
| - }
|
| + DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease));
|
| + if (xevent->xkey.keycode)
|
| + CheckX11KeyTestCase(id, expected, rewriter, test, xevent);
|
| + // Test an XI2 GenericEvent.
|
| + xev.InitGenericKeyEvent(
|
| + kKeyboardDeviceId, test.type, test.input.key_code, test.input.flags);
|
| + xevent = xev;
|
| + DCHECK(xevent->type == GenericEvent);
|
| + XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data);
|
| + DCHECK((xievent->evtype == XI_KeyPress) ||
|
| + (xievent->evtype == XI_KeyRelease));
|
| + if (xievent->detail)
|
| + CheckX11KeyTestCase(id, expected, rewriter, test, xevent);
|
| }
|
| #endif
|
| }
|
| @@ -225,11 +248,13 @@ class EventRewriterTest : public ash::test::AshTestBase {
|
| void TestRewriteNumPadKeys();
|
| void TestRewriteNumPadKeysOnAppleKeyboard();
|
|
|
| - int RewriteMouseEvent(chromeos::EventRewriter* rewriter,
|
| - const ui::MouseEvent& event) {
|
| - int flags = event.flags();
|
| - rewriter->RewriteLocatedEventForTesting(event, &flags);
|
| - return flags;
|
| + const ui::MouseEvent* RewriteMouseButtonEvent(
|
| + chromeos::EventRewriter* rewriter,
|
| + const ui::MouseEvent& event,
|
| + scoped_ptr<ui::Event>* new_event) {
|
| + rewriter->RewriteMouseButtonEventForTesting(event, new_event);
|
| + return *new_event ? static_cast<const ui::MouseEvent*>(new_event->get())
|
| + : &event;
|
| }
|
|
|
| chromeos::MockUserManager* mock_user_manager_; // Not owned.
|
| @@ -241,8 +266,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
|
| // First, test with a PC keyboard.
|
| TestingPrefServiceSyncable prefs;
|
| EventRewriter rewriter(NULL);
|
| - rewriter.DeviceAddedForTesting(0, "PC Keyboard");
|
| - rewriter.set_last_device_id_for_testing(0);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase pc_keyboard_tests[] = {
|
| @@ -277,8 +302,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
|
| }
|
|
|
| // An Apple keyboard reusing the ID, zero.
|
| - rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
|
| - rewriter.set_last_device_id_for_testing(0);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
|
|
| KeyTestCase apple_keyboard_tests[] = {
|
| // VKEY_A, Alt modifier.
|
| @@ -323,8 +348,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
|
|
|
| EventRewriter rewriter(NULL);
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| - rewriter.DeviceAddedForTesting(0, "PC Keyboard");
|
| - rewriter.set_last_device_id_for_testing(0);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
|
|
| KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt.
|
| {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
|
| @@ -337,8 +362,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
|
| }
|
|
|
| // An Apple keyboard reusing the ID, zero.
|
| - rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
|
| - rewriter.set_last_device_id_for_testing(0);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
|
|
| KeyTestCase apple_keyboard_tests[] = {
|
| // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command
|
| @@ -362,6 +387,7 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
|
| void EventRewriterTest::TestRewriteNumPadKeys() {
|
| TestingPrefServiceSyncable prefs;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {
|
| @@ -504,8 +530,8 @@ TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) {
|
| void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
|
| TestingPrefServiceSyncable prefs;
|
| EventRewriter rewriter(NULL);
|
| - rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
|
| - rewriter.set_last_device_id_for_testing(0);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {
|
| @@ -546,6 +572,7 @@ TEST_F(EventRewriterTest,
|
| TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
|
| TestingPrefServiceSyncable prefs;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {
|
| @@ -589,6 +616,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
|
| TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
|
| TestingPrefServiceSyncable prefs;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {
|
| @@ -632,6 +660,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
|
| control.SetValue(chromeos::input_method::kVoidKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase disabled_modifier_tests[] = {
|
| @@ -707,6 +736,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
|
| search.SetValue(chromeos::input_method::kControlKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase s_tests[] = {
|
| @@ -771,6 +801,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
|
| search.SetValue(chromeos::input_method::kEscapeKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
|
| @@ -793,6 +824,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
|
| search.SetValue(chromeos::input_method::kAltKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase s2a_tests[] = {
|
| @@ -870,6 +902,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
|
|
|
| chromeos::input_method::FakeImeKeyboard ime_keyboard;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
|
| EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
|
| @@ -940,6 +973,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLock) {
|
|
|
| chromeos::input_method::FakeImeKeyboard ime_keyboard;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
|
| EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
|
| @@ -959,6 +993,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
|
|
|
| chromeos::input_method::FakeImeKeyboard ime_keyboard;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
|
|
|
| @@ -982,6 +1017,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
|
| CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
|
| }
|
| }
|
| +
|
| TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
|
| const CommandLine original_cl(*CommandLine::ForCurrentProcess());
|
| CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| @@ -992,6 +1028,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
|
|
|
| chromeos::input_method::FakeImeKeyboard ime_keyboard;
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
|
|
|
| @@ -1044,6 +1081,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
|
| control.SetValue(chromeos::input_method::kControlKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {
|
| @@ -1080,6 +1118,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
|
| control.SetValue(chromeos::input_method::kControlKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| input_method_manager_mock_->set_mod3_used(true);
|
|
|
| @@ -1097,8 +1136,8 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
|
| TestingPrefServiceSyncable prefs;
|
| chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
|
| EventRewriter rewriter(NULL);
|
| - rewriter.DeviceAddedForTesting(0, "PC Keyboard");
|
| - rewriter.set_last_device_id_for_testing(0);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| + rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| KeyTestCase tests[] = {
|
| @@ -1206,6 +1245,7 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
|
| TestingPrefServiceSyncable prefs;
|
| chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| FunctionKeyTestCase tests[] = {
|
| @@ -1534,6 +1574,7 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
|
| search.SetValue(chromeos::input_method::kControlKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| @@ -1570,6 +1611,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
|
| control.SetValue(chromeos::input_method::kAltKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| // Send left control press.
|
| @@ -1600,6 +1642,7 @@ TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
|
| control.SetValue(chromeos::input_method::kAltKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| const int kTouchId = 2;
|
| @@ -1794,6 +1837,7 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
|
| control.SetValue(chromeos::input_method::kAltKey);
|
|
|
| EventRewriter rewriter(NULL);
|
| + rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
|
| rewriter.set_pref_service_for_testing(&prefs);
|
|
|
| // Check that Control + Left Button is converted (via Alt + Left Button)
|
| @@ -1807,15 +1851,17 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
|
| // Sanity check.
|
| EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
|
| EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags());
|
| - int flags = RewriteMouseEvent(&rewriter, press);
|
| - EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
|
| - EXPECT_FALSE(ui::EF_CONTROL_DOWN & flags);
|
| - EXPECT_FALSE(ui::EF_ALT_DOWN & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags());
|
| + EXPECT_FALSE(ui::EF_ALT_DOWN & result->flags());
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| }
|
|
|
| -
|
| 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;
|
| @@ -1826,6 +1872,41 @@ TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
|
| EventRewriter rewriter(NULL);
|
| rewriter.set_pref_service_for_testing(&prefs);
|
| const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN;
|
| +
|
| + // Test Alt + Left click.
|
| + {
|
| + ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + kLeftAndAltFlag,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + press.set_source_device_id(10);
|
| + // Sanity check.
|
| + EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
|
| + EXPECT_EQ(kLeftAndAltFlag, press.flags());
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| + {
|
| + ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + kLeftAndAltFlag,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + release.set_source_device_id(10);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| +#if defined(USE_X11)
|
| + // Test Alt + Left click, using XI2 native events.
|
| {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| @@ -1834,60 +1915,158 @@ TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
|
| // Sanity check.
|
| EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
|
| EXPECT_EQ(kLeftAndAltFlag, press.flags());
|
| - int flags = RewriteMouseEvent(&rewriter, press);
|
| - EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
|
| ui::MouseEvent release(xev);
|
| - int flags = RewriteMouseEvent(&rewriter, release);
|
| - EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| +#endif
|
|
|
| // No ALT in frst click.
|
| {
|
| + ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + ui::EF_LEFT_MOUSE_BUTTON,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + press.set_source_device_id(10);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| + {
|
| + ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + kLeftAndAltFlag,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + release.set_source_device_id(10);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
|
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| +#if defined(USE_X11)
|
| + // No ALT in frst click, using XI2 native events.
|
| + {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| 10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON);
|
| ui::MouseEvent press(xev);
|
| - int flags = RewriteMouseEvent(&rewriter, press);
|
| - EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
|
| ui::MouseEvent release(xev);
|
| - int flags = RewriteMouseEvent(&rewriter, release);
|
| - EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
|
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| +#endif
|
|
|
| // ALT on different device.
|
| {
|
| + ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + kLeftAndAltFlag,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + press.set_source_device_id(11);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| + {
|
| + ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + kLeftAndAltFlag,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + release.set_source_device_id(10);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
|
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| + {
|
| + ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
|
| + gfx::Point(),
|
| + gfx::Point(),
|
| + kLeftAndAltFlag,
|
| + ui::EF_LEFT_MOUSE_BUTTON);
|
| + release.set_source_device_id(11);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| + }
|
| +#if defined(USE_X11)
|
| + // ALT on different device, using XI2 native events.
|
| + {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| 11, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag);
|
| ui::MouseEvent press(xev);
|
| - int flags = RewriteMouseEvent(&rewriter, press);
|
| - EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, press, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| 10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
|
| ui::MouseEvent release(xev);
|
| - int flags = RewriteMouseEvent(&rewriter, release);
|
| - EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
|
| + EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| {
|
| ui::ScopedXI2Event xev;
|
| xev.InitGenericButtonEvent(
|
| 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
|
| ui::MouseEvent release(xev);
|
| - int flags = RewriteMouseEvent(&rewriter, release);
|
| - EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
|
| + scoped_ptr<ui::Event> new_event;
|
| + const ui::MouseEvent* result =
|
| + RewriteMouseButtonEvent(&rewriter, release, &new_event);
|
| + EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
|
| + EXPECT_FALSE(kLeftAndAltFlag & result->flags());
|
| + EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
|
| }
|
| #endif
|
| }
|
|
|