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

Unified Diff: ui/events/keycodes/platform_key_map_win_unittest.cc

Issue 2025733002: [DomKey] Use VK->DomKey mapping for non-printable keys (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add VK->DomKey mapping Created 4 years, 7 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: 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
« ui/events/keycodes/platform_key_map_win.cc ('K') | « ui/events/keycodes/platform_key_map_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698