| 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);
|
| + }
|
| +}
|
|
|