Index: ui/events/keycodes/platform_key_map_win_unittest.cc |
diff --git a/ui/events/keycodes/platform_key_map_win_unittest.cc b/ui/events/keycodes/platform_key_map_win_unittest.cc |
index 44cbd58671528618ed25d93cee00ba9f4dfe800f..b43ee9a40159058a3ee5b62a5a88b71c27441b18 100644 |
--- a/ui/events/keycodes/platform_key_map_win_unittest.cc |
+++ b/ui/events/keycodes/platform_key_map_win_unittest.cc |
@@ -247,4 +247,162 @@ TEST_F(PlatformKeyMapTest, NumPad) { |
} |
} |
+TEST_F(PlatformKeyMapTest, NonPrintableKey) { |
+ HKL layout = ::LoadKeyboardLayout(LAYOUT_US, 0); |
+ PlatformKeyMap keymap(layout); |
+ |
+ // This table is a copy of |NonPrintableKeyEntry|, which must be sorted by |
+ // |key_code|. |
Wez
2016/06/01 20:49:04
It doesn't seem to be all that useful to test the
chongz
2016/06/01 23:09:42
If I understand correctly you are suggesting using
Wez
2016/06/03 00:00:51
Something along those lines, yes.
|
+ const struct TestCase { |
+ KeyboardCode key_code; |
+ DomKey key; |
+ } kNonPrintableKeyTestCase[] = { |
+ {VKEY_CANCEL, DomKey::CANCEL}, |
+ {VKEY_BACK, DomKey::BACKSPACE}, |
+ {VKEY_TAB, DomKey::TAB}, |
+ {VKEY_CLEAR, DomKey::CLEAR}, |
+ {VKEY_RETURN, DomKey::ENTER}, |
+ {VKEY_SHIFT, DomKey::SHIFT}, |
+ {VKEY_CONTROL, DomKey::CONTROL}, |
+ {VKEY_MENU, DomKey::ALT}, |
+ {VKEY_PAUSE, DomKey::PAUSE}, |
+ {VKEY_CAPITAL, DomKey::CAPS_LOCK}, |
+ // TODO(chongz): Map VKEY_KANA/VKEY_HANGUL based on layout. |
+ // https://crbug.com/612736 |
+ {VKEY_KANA, DomKey::KANA_MODE}, |
+ // {VKEY_HANGUL, DomKey::HANGUL_MODE}, |
+ {VKEY_JUNJA, DomKey::JUNJA_MODE}, |
+ {VKEY_FINAL, DomKey::FINAL_MODE}, |
+ // TODO(chongz): Map VKEY_HANJA/VKEY_KANJI based on layout. |
+ // https://crbug.com/612736 |
+ {VKEY_HANJA, DomKey::HANJA_MODE}, |
+ // {VKEY_KANJI, DomKey::KANJI_MODE}, |
+ {VKEY_ESCAPE, DomKey::ESCAPE}, |
+ {VKEY_CONVERT, DomKey::CONVERT}, |
+ {VKEY_NONCONVERT, DomKey::NON_CONVERT}, |
+ {VKEY_ACCEPT, DomKey::ACCEPT}, |
+ {VKEY_MODECHANGE, DomKey::MODE_CHANGE}, |
+ // VKEY_SPACE |
+ {VKEY_PRIOR, DomKey::PAGE_UP}, |
+ {VKEY_NEXT, DomKey::PAGE_DOWN}, |
+ {VKEY_END, DomKey::END}, |
+ {VKEY_HOME, DomKey::HOME}, |
+ {VKEY_LEFT, DomKey::ARROW_LEFT}, |
+ {VKEY_UP, DomKey::ARROW_UP}, |
+ {VKEY_RIGHT, DomKey::ARROW_RIGHT}, |
+ {VKEY_DOWN, DomKey::ARROW_DOWN}, |
+ {VKEY_SELECT, DomKey::SELECT}, |
+ {VKEY_PRINT, DomKey::PRINT}, |
+ {VKEY_EXECUTE, DomKey::EXECUTE}, |
+ {VKEY_SNAPSHOT, DomKey::PRINT_SCREEN}, |
+ {VKEY_INSERT, DomKey::INSERT}, |
+ {VKEY_DELETE, DomKey::DEL}, |
+ {VKEY_HELP, DomKey::HELP}, |
+ // VKEY_0..9 |
+ // VKEY_A..Z |
+ {VKEY_LWIN, DomKey::META}, |
+ // VKEY_COMMAND - The same as VKEY_LWIN. |
+ {VKEY_RWIN, DomKey::META}, |
+ {VKEY_APPS, DomKey::CONTEXT_MENU}, |
+ {VKEY_SLEEP, DomKey::STANDBY}, |
+ // VKEY_NUMPAD0..9 - Handled by |NumPadKeyCodeToDomKey()|. |
+ // VKEY_MULTIPLY, VKEY_ADD, VKEY_SEPARATOR, VKEY_SUBTRACT, VKEY_DECIMAL, |
+ // VKEY_DIVIDE |
+ {VKEY_F1, DomKey::F1}, |
+ {VKEY_F2, DomKey::F2}, |
+ {VKEY_F3, DomKey::F3}, |
+ {VKEY_F4, DomKey::F4}, |
+ {VKEY_F5, DomKey::F5}, |
+ {VKEY_F6, DomKey::F6}, |
+ {VKEY_F7, DomKey::F7}, |
+ {VKEY_F8, DomKey::F8}, |
+ {VKEY_F9, DomKey::F9}, |
+ {VKEY_F10, DomKey::F10}, |
+ {VKEY_F11, DomKey::F11}, |
+ {VKEY_F12, DomKey::F12}, |
+ {VKEY_F13, DomKey::F13}, |
+ {VKEY_F14, DomKey::F14}, |
+ {VKEY_F15, DomKey::F15}, |
+ {VKEY_F16, DomKey::F16}, |
+ {VKEY_F17, DomKey::F17}, |
+ {VKEY_F18, DomKey::F18}, |
+ {VKEY_F19, DomKey::F19}, |
+ {VKEY_F20, DomKey::F20}, |
+ {VKEY_F21, DomKey::F21}, |
+ {VKEY_F22, DomKey::F22}, |
+ {VKEY_F23, DomKey::F23}, |
+ {VKEY_F24, DomKey::F24}, |
+ {VKEY_NUMLOCK, DomKey::NUM_LOCK}, |
+ {VKEY_SCROLL, DomKey::SCROLL_LOCK}, |
+ {VKEY_LSHIFT, DomKey::SHIFT}, |
+ {VKEY_RSHIFT, DomKey::SHIFT}, |
+ {VKEY_LCONTROL, DomKey::CONTROL}, |
+ {VKEY_RCONTROL, DomKey::CONTROL}, |
+ {VKEY_LMENU, DomKey::ALT}, |
+ {VKEY_RMENU, DomKey::ALT}, |
+ {VKEY_BROWSER_BACK, DomKey::BROWSER_BACK}, |
+ {VKEY_BROWSER_FORWARD, DomKey::BROWSER_FORWARD}, |
+ {VKEY_BROWSER_REFRESH, DomKey::BROWSER_REFRESH}, |
+ {VKEY_BROWSER_STOP, DomKey::BROWSER_STOP}, |
+ {VKEY_BROWSER_SEARCH, DomKey::BROWSER_SEARCH}, |
+ {VKEY_BROWSER_FAVORITES, DomKey::BROWSER_FAVORITES}, |
+ {VKEY_BROWSER_HOME, DomKey::BROWSER_HOME}, |
+ {VKEY_VOLUME_MUTE, DomKey::AUDIO_VOLUME_MUTE}, |
+ {VKEY_VOLUME_DOWN, DomKey::AUDIO_VOLUME_DOWN}, |
+ {VKEY_VOLUME_UP, DomKey::AUDIO_VOLUME_UP}, |
+ {VKEY_MEDIA_NEXT_TRACK, DomKey::MEDIA_TRACK_NEXT}, |
+ {VKEY_MEDIA_PREV_TRACK, DomKey::MEDIA_TRACK_PREVIOUS}, |
+ {VKEY_MEDIA_STOP, DomKey::MEDIA_STOP}, |
+ {VKEY_MEDIA_PLAY_PAUSE, DomKey::MEDIA_PLAY_PAUSE}, |
+ {VKEY_MEDIA_LAUNCH_MAIL, DomKey::LAUNCH_MAIL}, |
+ {VKEY_MEDIA_LAUNCH_MEDIA_SELECT, DomKey::LAUNCH_MEDIA_PLAYER}, |
+ // TODO(chongz): Actually we don't know whether it's mapped to launch |
+ // computer/calculator or not, better use a generic DomKey string. |
+ // https://crbug.com/612743 |
+ {VKEY_MEDIA_LAUNCH_APP1, DomKey::LAUNCH_MY_COMPUTER}, |
+ {VKEY_MEDIA_LAUNCH_APP2, DomKey::LAUNCH_CALCULATOR}, |
+ // VKEY_OEM_1..8, 102, PLUS, COMMA, MINUS, PERIOD |
+ {VKEY_ALTGR, DomKey::ALT_GRAPH}, |
+ {VKEY_PROCESSKEY, DomKey::PROCESS}, |
+ // VKEY_PACKET - Used to pass Unicode char, considered as printable key. |
+ |
+ // TODO(chongz): Handle Japanese keyboard layout keys 0xF0..0xF5. |
+ // https://crbug.com/612694 |
+ {VKEY_ATTN, DomKey::ATTN}, |
+ {VKEY_CRSEL, DomKey::CR_SEL}, |
+ {VKEY_EXSEL, DomKey::EX_SEL}, |
+ {VKEY_EREOF, DomKey::ERASE_EOF}, |
+ {VKEY_PLAY, DomKey::PLAY}, |
+ {VKEY_ZOOM, DomKey::ZOOM_TOGGLE}, |
+ // TODO(chongz): Handle VKEY_NONAME, VKEY_PA1 |
+ {VKEY_OEM_CLEAR, DomKey::CLEAR}, |
+ }; |
+ |
+ for (size_t i = 1; i < arraysize(kNonPrintableKeyTestCase); ++i) { |
Wez
2016/06/01 20:49:04
You're testing that your test-case is well-ordered
chongz
2016/06/01 23:09:42
Yes, because it must be ordered for binary search,
Wez
2016/06/03 00:00:51
Right; my point was just that testing that a copy
|
+ EXPECT_TRUE(kNonPrintableKeyTestCase[i - 1].key_code < |
+ kNonPrintableKeyTestCase[i].key_code) |
+ << kNonPrintableKeyTestCase[i].key_code; |
+ } |
+ |
+ for (const auto& test_case : kNonPrintableKeyTestCase) { |
+ KeyboardCode key_code = test_case.key_code; |
+ // We only use |key_code| for non-printable keys. |
+ DomCode dom_code = DomCode::NONE; |
+ |
+ EXPECT_EQ(test_case.key, |
+ DomKeyFromNativeImpl(keymap, dom_code, key_code, EF_NONE)) |
+ << key_code; |
+ EXPECT_EQ(test_case.key, |
+ DomKeyFromNativeImpl(keymap, dom_code, key_code, EF_ALTGR_DOWN)) |
+ << key_code; |
+ EXPECT_EQ(test_case.key, |
+ DomKeyFromNativeImpl(keymap, dom_code, key_code, EF_CONTROL_DOWN)) |
+ << key_code; |
+ EXPECT_EQ(test_case.key, |
+ DomKeyFromNativeImpl(keymap, dom_code, key_code, |
+ EF_ALTGR_DOWN | EF_CONTROL_DOWN)) |
+ << key_code; |
+ } |
+} |
+ |
} // namespace ui |