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

Unified Diff: content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm

Issue 1706683002: [Mac] Produce correct DomKey when Ctrl/Shift/Command is down (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test case for Ctrl+Shift+foo Created 4 years, 10 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: content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm
diff --git a/content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm b/content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm
index 3c8c5a284b5f242daac2a713939359a59015d668..38be993d8d97640e1db2a62295310cc7fd6645d3 100644
--- a/content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm
+++ b/content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm
@@ -46,11 +46,15 @@ const ModifierKey kModifierKeys[] = {
{62, 1 << 13, NSControlKeyMask}, // Right Control
};
-NSEvent* BuildFakeKeyEvent(NSUInteger key_code,
- unichar character,
- NSUInteger modifier_flags,
- NSEventType event_type) {
+NSEvent* BuildFakeKeyEventWithModifiedCharacter(
+ NSUInteger key_code,
+ unichar character,
+ unichar character_ignoring_modifiers,
+ NSUInteger modifier_flags,
+ NSEventType event_type) {
NSString* string = [NSString stringWithCharacters:&character length:1];
+ NSString* string_ignoring_modifiers =
+ [NSString stringWithCharacters:&character_ignoring_modifiers length:1];
return [NSEvent keyEventWithType:event_type
location:NSZeroPoint
modifierFlags:modifier_flags
@@ -58,11 +62,19 @@ NSEvent* BuildFakeKeyEvent(NSUInteger key_code,
windowNumber:0
context:nil
characters:string
- charactersIgnoringModifiers:string
+ charactersIgnoringModifiers:string_ignoring_modifiers
isARepeat:NO
keyCode:key_code];
}
+NSEvent* BuildFakeKeyEvent(NSUInteger key_code,
+ unichar character,
+ NSUInteger modifier_flags,
+ NSEventType event_type) {
+ return BuildFakeKeyEventWithModifiedCharacter(key_code, character, character,
+ modifier_flags, event_type);
+}
+
} // namespace
// Test that arrow keys don't have numpad modifier set.
@@ -106,13 +118,13 @@ TEST(WebInputEventBuilderMacTest, ArrowKeyNumPad) {
// Test that control sequence generate the correct vkey code.
TEST(WebInputEventBuilderMacTest, ControlSequence) {
// Ctrl-[ generates escape.
- NSEvent* mac_event =
- BuildFakeKeyEvent(0x21, 0x1b, NSControlKeyMask, NSKeyDown);
+ NSEvent* mac_event = BuildFakeKeyEventWithModifiedCharacter(
+ 0x21, 0x1b, '[', NSControlKeyMask, NSKeyDown);
WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event);
EXPECT_EQ(ui::VKEY_OEM_4, web_event.windowsKeyCode);
EXPECT_EQ(ui::DomCode::BRACKET_LEFT,
static_cast<ui::DomCode>(web_event.domCode));
- EXPECT_EQ(ui::DomKey::FromCharacter(0x1b), web_event.domKey);
+ EXPECT_EQ(ui::DomKey::FromCharacter('['), web_event.domKey);
}
// Test that numpad keys get mapped correctly.
@@ -246,3 +258,82 @@ TEST(WebInputEventBuilderMacTest, SystemKeyEvents) {
webEvent = WebKeyboardEventBuilder::Build(macEvent);
EXPECT_TRUE(webEvent.isSystemKey);
}
+
+// Test conversion from key combination with Control to DomKey.
+// TODO(chongz): Move DomKey tests for all platforms into one place.
+// http://crbug.com/587589
+TEST(WebInputEventBuilderMacTest, DomKeyWithControlKey) {
+ struct DomKeyTestCase {
+ int mac_key_code;
+ unichar character;
+ unichar shift_character;
+ ui::DomKey ctrl_dom_key;
+ ui::DomKey ctrl_shift_dom_key;
+ } table[] = {{kVK_ANSI_A, 'a', 'A', ui::DomKey::FromCharacter('a'),
+ ui::DomKey::FromCharacter('A')},
+ {kVK_ANSI_B, 'b', 'B', ui::DomKey::FromCharacter('b'),
+ ui::DomKey::FromCharacter('B')},
+ {kVK_ANSI_C, 'c', 'C', ui::DomKey::FromCharacter('c'),
+ ui::DomKey::FromCharacter('C')},
+ {kVK_ANSI_D, 'd', 'D', ui::DomKey::FromCharacter('d'),
+ ui::DomKey::FromCharacter('D')},
+ {kVK_ANSI_E, 'e', 'E', ui::DomKey::FromCharacter('e'),
+ ui::DomKey::FromCharacter('E')},
+ {kVK_ANSI_F, 'f', 'F', ui::DomKey::FromCharacter('f'),
+ ui::DomKey::FromCharacter('F')},
+ {kVK_ANSI_G, 'g', 'G', ui::DomKey::FromCharacter('g'),
+ ui::DomKey::FromCharacter('G')},
+ {kVK_ANSI_H, 'h', 'H', ui::DomKey::FromCharacter('h'),
+ ui::DomKey::FromCharacter('H')},
+ {kVK_ANSI_I, 'i', 'I', ui::DomKey::FromCharacter('i'),
+ ui::DomKey::FromCharacter('I')},
+ {kVK_ANSI_J, 'j', 'J', ui::DomKey::FromCharacter('j'),
+ ui::DomKey::FromCharacter('J')},
+ {kVK_ANSI_K, 'k', 'K', ui::DomKey::FromCharacter('k'),
+ ui::DomKey::FromCharacter('K')},
+ {kVK_ANSI_L, 'l', 'L', ui::DomKey::FromCharacter('l'),
+ ui::DomKey::FromCharacter('L')},
+ {kVK_ANSI_M, 'm', 'M', ui::DomKey::FromCharacter('m'),
+ ui::DomKey::FromCharacter('M')},
+ {kVK_ANSI_N, 'n', 'N', ui::DomKey::FromCharacter('n'),
+ ui::DomKey::FromCharacter('N')},
+ {kVK_ANSI_O, 'o', 'O', ui::DomKey::FromCharacter('o'),
+ ui::DomKey::FromCharacter('O')},
+ {kVK_ANSI_P, 'p', 'P', ui::DomKey::FromCharacter('p'),
+ ui::DomKey::FromCharacter('P')},
+ {kVK_ANSI_Q, 'q', 'Q', ui::DomKey::FromCharacter('q'),
+ ui::DomKey::FromCharacter('Q')},
+ {kVK_ANSI_R, 'r', 'R', ui::DomKey::FromCharacter('r'),
+ ui::DomKey::FromCharacter('R')},
+ {kVK_ANSI_S, 's', 'S', ui::DomKey::FromCharacter('s'),
+ ui::DomKey::FromCharacter('S')},
+ {kVK_ANSI_T, 't', 'T', ui::DomKey::FromCharacter('t'),
+ ui::DomKey::FromCharacter('T')},
+ {kVK_ANSI_U, 'u', 'U', ui::DomKey::FromCharacter('u'),
+ ui::DomKey::FromCharacter('U')},
+ {kVK_ANSI_V, 'v', 'V', ui::DomKey::FromCharacter('v'),
+ ui::DomKey::FromCharacter('V')},
+ {kVK_ANSI_W, 'w', 'W', ui::DomKey::FromCharacter('w'),
+ ui::DomKey::FromCharacter('W')},
+ {kVK_ANSI_X, 'x', 'X', ui::DomKey::FromCharacter('x'),
+ ui::DomKey::FromCharacter('X')},
+ {kVK_ANSI_Y, 'y', 'Y', ui::DomKey::FromCharacter('y'),
+ ui::DomKey::FromCharacter('Y')},
+ {kVK_ANSI_Z, 'z', 'Z', ui::DomKey::FromCharacter('z'),
+ ui::DomKey::FromCharacter('Z')}};
+
+ for (size_t i = 0; i < arraysize(table); ++i) {
+ // Tests ctrl_dom_key
+ NSEvent* mac_event = BuildFakeKeyEventWithModifiedCharacter(
+ table[i].mac_key_code, table[i].character & 0x1F, table[i].character,
+ NSControlKeyMask, NSKeyDown);
+ WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event);
+ EXPECT_EQ(table[i].ctrl_dom_key, web_event.domKey);
+ // Tests ctrl_shift_dom_key
+ mac_event = BuildFakeKeyEventWithModifiedCharacter(
+ table[i].mac_key_code, table[i].character & 0x1F,
+ table[i].shift_character, NSControlKeyMask | NSShiftKeyMask, NSKeyDown);
+ web_event = WebKeyboardEventBuilder::Build(mac_event);
+ EXPECT_EQ(table[i].ctrl_shift_dom_key, web_event.domKey);
+ }
+}
« no previous file with comments | « no previous file | ui/events/keycodes/keyboard_code_conversion_mac.mm » ('j') | ui/events/keycodes/keyboard_code_conversion_mac.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698