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

Side by Side Diff: ui/events/keycodes/platform_key_map_win_unittest.cc

Issue 1776673007: [Windows] Produce correct DomKey for NumPad when combined with Shift/NumLock (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wez's review Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/events/keycodes/platform_key_map_win.h" 5 #include "ui/events/keycodes/platform_key_map_win.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "ui/events/event_constants.h" 9 #include "ui/events/event_constants.h"
10 #include "ui/events/keycodes/dom/dom_code.h" 10 #include "ui/events/keycodes/dom/dom_code.h"
(...skipping 13 matching lines...) Expand all
24 KeyboardCode vk; 24 KeyboardCode vk;
25 const char* normal; 25 const char* normal;
26 const char* shift; 26 const char* shift;
27 const char* capslock; 27 const char* capslock;
28 const char* altgr; 28 const char* altgr;
29 const char* shift_capslock; 29 const char* shift_capslock;
30 const char* shift_altgr; 30 const char* shift_altgr;
31 const char* altgr_capslock; 31 const char* altgr_capslock;
32 }; 32 };
33 33
34 void CheckDomCodeToKeyString(const char* label,
35 const PlatformKeyMap& keymap,
36 const TestKey& t,
37 HKL layout) {
38 int scan_code = ::MapVirtualKeyEx(t.vk, MAPVK_VK_TO_VSC, layout);
39 DomCode dom_code = KeycodeConverter::NativeKeycodeToDomCode(scan_code);
40 EXPECT_STREQ(t.normal, KeycodeConverter::DomKeyToKeyString(
41 keymap.DomCodeAndFlagsToDomKey(dom_code, EF_NONE)).c_str()
42 ) << label;
43 EXPECT_STREQ(t.shift, KeycodeConverter::DomKeyToKeyString(
44 keymap.DomCodeAndFlagsToDomKey(dom_code, EF_SHIFT_DOWN)).c_str()
45 ) << label;
46 EXPECT_STREQ(t.capslock, KeycodeConverter::DomKeyToKeyString(
47 keymap.DomCodeAndFlagsToDomKey(dom_code, EF_CAPS_LOCK_ON)).c_str()
48 ) << label;
49 EXPECT_STREQ(t.altgr, KeycodeConverter::DomKeyToKeyString(
50 keymap.DomCodeAndFlagsToDomKey(dom_code, EF_ALTGR_DOWN)).c_str()
51 ) << label;
52 EXPECT_STREQ(t.shift_capslock, KeycodeConverter::DomKeyToKeyString(
53 keymap.DomCodeAndFlagsToDomKey(dom_code,
54 EF_SHIFT_DOWN | EF_CAPS_LOCK_ON)).c_str()
55 ) << label;
56 EXPECT_STREQ(t.shift_altgr, KeycodeConverter::DomKeyToKeyString(
57 keymap.DomCodeAndFlagsToDomKey(dom_code,
58 EF_SHIFT_DOWN | EF_ALTGR_DOWN)).c_str()
59 ) << label;
60 EXPECT_STREQ(t.altgr_capslock, KeycodeConverter::DomKeyToKeyString(
61 keymap.DomCodeAndFlagsToDomKey(dom_code,
62 EF_ALTGR_DOWN | EF_CAPS_LOCK_ON)).c_str()
63 ) << label;
64 }
65
66 } // anonymous namespace 34 } // anonymous namespace
67 35
68 class PlatformKeyMapTest : public testing::Test { 36 class PlatformKeyMapTest : public testing::Test {
69 public: 37 public:
70 PlatformKeyMapTest() {} 38 PlatformKeyMapTest() {}
71 ~PlatformKeyMapTest() override {} 39 ~PlatformKeyMapTest() override {}
40
41 void CheckDomCodeToKeyString(const char* label,
42 const PlatformKeyMap& keymap,
43 const TestKey& t,
44 HKL layout) {
Wez 2016/03/18 22:50:39 nit: Why do this and DomCodeAndFlagsToDomKey need
chongz 2016/03/21 20:07:29 Because only |PlatformKeyMapTest| is a friend clas
45 KeyboardCode vk = t.vk;
Wez 2016/03/18 22:50:39 nit: vk->key_code
chongz 2016/03/21 20:07:29 Done.
46 int scan_code = ::MapVirtualKeyEx(vk, MAPVK_VK_TO_VSC, layout);
47 DomCode dom_code = KeycodeConverter::NativeKeycodeToDomCode(scan_code);
48 EXPECT_STREQ(t.normal,
49 KeycodeConverter::DomKeyToKeyString(
50 keymap.DomCodeAndFlagsToDomKey(dom_code, vk, EF_NONE))
51 .c_str())
52 << label;
53 EXPECT_STREQ(t.shift, KeycodeConverter::DomKeyToKeyString(
54 keymap.DomCodeAndFlagsToDomKey(dom_code, vk,
55 EF_SHIFT_DOWN))
56 .c_str())
57 << label;
58 EXPECT_STREQ(t.capslock, KeycodeConverter::DomKeyToKeyString(
59 keymap.DomCodeAndFlagsToDomKey(
60 dom_code, vk, EF_CAPS_LOCK_ON))
61 .c_str())
62 << label;
63 EXPECT_STREQ(t.altgr, KeycodeConverter::DomKeyToKeyString(
64 keymap.DomCodeAndFlagsToDomKey(dom_code, vk,
65 EF_ALTGR_DOWN))
66 .c_str())
67 << label;
68 EXPECT_STREQ(t.shift_capslock,
69 KeycodeConverter::DomKeyToKeyString(
70 keymap.DomCodeAndFlagsToDomKey(
71 dom_code, vk, EF_SHIFT_DOWN | EF_CAPS_LOCK_ON))
72 .c_str())
73 << label;
74 EXPECT_STREQ(t.shift_altgr,
75 KeycodeConverter::DomKeyToKeyString(
76 keymap.DomCodeAndFlagsToDomKey(
77 dom_code, vk, EF_SHIFT_DOWN | EF_ALTGR_DOWN))
78 .c_str())
79 << label;
80 EXPECT_STREQ(t.altgr_capslock,
81 KeycodeConverter::DomKeyToKeyString(
82 keymap.DomCodeAndFlagsToDomKey(
83 dom_code, vk, EF_ALTGR_DOWN | EF_CAPS_LOCK_ON))
84 .c_str())
85 << label;
86 }
87
88 DomKey DomCodeAndFlagsToDomKey(const PlatformKeyMap& keymap,
89 DomCode dom_code,
90 KeyboardCode vk,
91 int flags) {
92 return keymap.DomCodeAndFlagsToDomKey(dom_code, vk, flags);
93 }
94
72 private: 95 private:
73 DISALLOW_COPY_AND_ASSIGN(PlatformKeyMapTest); 96 DISALLOW_COPY_AND_ASSIGN(PlatformKeyMapTest);
74 }; 97 };
75 98
76 TEST_F(PlatformKeyMapTest, USLayout) { 99 TEST_F(PlatformKeyMapTest, USLayout) {
77 HKL layout = ::LoadKeyboardLayout(LAYOUT_US, 0); 100 HKL layout = ::LoadKeyboardLayout(LAYOUT_US, 0);
78 PlatformKeyMap keymap(layout); 101 PlatformKeyMap keymap(layout);
79 102
80 const TestKey USKeys[] = { 103 const TestKey USKeys[] = {
81 // n s c a sc sa ac 104 // n s c a sc sa ac
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 {VKEY_X, "x", "X", "X", "x", "x", "X", "X"}, 187 {VKEY_X, "x", "X", "X", "x", "x", "X", "X"},
165 {VKEY_Y, "y", "Y", "Y", "y", "y", "Y", "Y"}, 188 {VKEY_Y, "y", "Y", "Y", "y", "y", "Y", "Y"},
166 {VKEY_Z, "z", "Z", "Z", "z", "z", "Z", "Z"}, 189 {VKEY_Z, "z", "Z", "Z", "z", "z", "Z", "Z"},
167 }; 190 };
168 191
169 for (const auto& k : FRKeys) { 192 for (const auto& k : FRKeys) {
170 CheckDomCodeToKeyString("FRLayout", keymap, k, layout); 193 CheckDomCodeToKeyString("FRLayout", keymap, k, layout);
171 } 194 }
172 } 195 }
173 196
197 TEST_F(PlatformKeyMapTest, NumPad) {
198 HKL layout = ::LoadKeyboardLayout(LAYOUT_US, 0);
199 PlatformKeyMap keymap(layout);
200
201 const struct TestCase {
202 KeyboardCode vk;
Wez 2016/03/18 22:50:39 nit: key_code
chongz 2016/03/21 20:07:29 Done.
203 DomKey key;
204 } NumPadKeys[] = {
Wez 2016/03/18 22:50:39 Suggest kNumPadTestCases (The other const test-ca
chongz 2016/03/21 20:07:29 Done.
205 {VKEY_NUMPAD0, DomKey::FromCharacter('0')},
206 {VKEY_NUMPAD1, DomKey::FromCharacter('1')},
207 {VKEY_NUMPAD2, DomKey::FromCharacter('2')},
208 {VKEY_NUMPAD3, DomKey::FromCharacter('3')},
209 {VKEY_NUMPAD4, DomKey::FromCharacter('4')},
210 {VKEY_NUMPAD5, DomKey::FromCharacter('5')},
211 {VKEY_NUMPAD6, DomKey::FromCharacter('6')},
212 {VKEY_NUMPAD7, DomKey::FromCharacter('7')},
213 {VKEY_NUMPAD8, DomKey::FromCharacter('8')},
214 {VKEY_NUMPAD9, DomKey::FromCharacter('9')},
215 {VKEY_CLEAR, DomKey::CLEAR},
216 {VKEY_PRIOR, DomKey::PAGE_UP},
217 {VKEY_NEXT, DomKey::PAGE_DOWN},
218 {VKEY_END, DomKey::END},
219 {VKEY_HOME, DomKey::HOME},
220 {VKEY_LEFT, DomKey::ARROW_LEFT},
221 {VKEY_UP, DomKey::ARROW_UP},
222 {VKEY_RIGHT, DomKey::ARROW_RIGHT},
223 {VKEY_DOWN, DomKey::ARROW_DOWN},
224 {VKEY_INSERT, DomKey::INSERT},
225 {VKEY_DELETE, DomKey::DEL},
226 };
227
228 for (const auto& k : NumPadKeys) {
Wez 2016/03/18 22:50:39 nit: suggest k->test_case
chongz 2016/03/21 20:07:29 Done.
229 KeyboardCode vk = k.vk;
230 int scan_code = ::MapVirtualKeyEx(vk, MAPVK_VK_TO_VSC, layout);
231 DomCode dom_code = KeycodeConverter::NativeKeycodeToDomCode(scan_code);
232
233 EXPECT_EQ(k.key, DomCodeAndFlagsToDomKey(keymap, dom_code, vk, EF_NONE))
234 << vk;
235 EXPECT_EQ(k.key,
236 DomCodeAndFlagsToDomKey(keymap, dom_code, vk, EF_ALTGR_DOWN))
237 << vk;
238 EXPECT_EQ(k.key,
239 DomCodeAndFlagsToDomKey(keymap, dom_code, vk, EF_CONTROL_DOWN))
240 << vk;
241 EXPECT_EQ(k.key, DomCodeAndFlagsToDomKey(keymap, dom_code, vk,
242 EF_ALTGR_DOWN | EF_CONTROL_DOWN))
243 << vk;
244 }
245 }
246
174 } // namespace ui 247 } // namespace ui
OLDNEW
« 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