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

Side by Side Diff: chrome/browser/ui/views/ash/key_rewriter_unittest.cc

Issue 9854025: Automatically remap Command key on an Apple keyboard to Control [part 2 of 2 - Chrome part] (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win_aura fix Created 8 years, 8 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/basictypes.h"
6 #include "chrome/browser/ui/views/ash/key_rewriter.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/aura/event.h"
9
10 #if defined(OS_CHROMEOS)
11 #include "ui/base/x/x11_util.h"
12
13 #include <X11/keysymdef.h>
Daniel Erat 2012/03/27 16:19:35 nit: move these above the c++ includes
Daniel Erat 2012/03/31 01:24:08 Done.
14 #include <X11/Xlib.h>
15
16 namespace {
17
18 void InitXKeyEvent(unsigned int x_keycode,
19 unsigned int x_state,
20 XEvent* event) {
21 ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
22 ui::VKEY_A, // dummy
23 0, // dummy
24 event);
25 event->xkey.keycode = x_keycode;
26 event->xkey.state = x_state;
27 }
28
29 } // namespace
30 #endif
31
32 TEST(KeyRewriterTest, TestGetDeviceType) {
33 // This is the typical string which an Apple keyboard sends.
34 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
35 KeyRewriter::GetDeviceType("Apple Inc. Apple Keyboard"));
36
37 // Other cases we accept.
38 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
39 KeyRewriter::GetDeviceType("Apple Keyboard"));
40 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
41 KeyRewriter::GetDeviceType("apple keyboard"));
42 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
43 KeyRewriter::GetDeviceType("apple keyboard."));
44 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
45 KeyRewriter::GetDeviceType("apple.keyboard."));
46 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
47 KeyRewriter::GetDeviceType(".apple.keyboard."));
48
49 // Dell, Microsoft, Logitech, ... should be recognized as a kDevicePcKeyboard.
50 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
51 KeyRewriter::GetDeviceType("Dell Dell USB Entry Keyboard"));
52 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
53 KeyRewriter::GetDeviceType("Microsoft Natural Ergonomic Keyboard"));
54 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
55 KeyRewriter::GetDeviceType("CHESEN USB Keyboard"));
56
57 // Some corner cases.
58 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard, KeyRewriter::GetDeviceType(""));
59 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
60 KeyRewriter::GetDeviceType("."));
61 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
62 KeyRewriter::GetDeviceType(". "));
63 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
64 KeyRewriter::GetDeviceType(" ."));
65 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
66 KeyRewriter::GetDeviceType("not-an-apple keyboard"));
67 }
68
69 TEST(KeyRewriterTest, TestDeviceAdded) {
70 KeyRewriter rewriter;
71 EXPECT_TRUE(rewriter.device_id_to_type_for_testing().empty());
72 EXPECT_EQ(KeyRewriter::kDevicePcKeyboard,
73 rewriter.DeviceAddedForTesting(0, "PC Keyboard"));
74 EXPECT_EQ(1U, rewriter.device_id_to_type_for_testing().size());
75 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
76 rewriter.DeviceAddedForTesting(1, "Apple Keyboard"));
77 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size());
78 // Try to reuse the first ID.
79 EXPECT_EQ(KeyRewriter::kDeviceAppleKeyboard,
80 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"));
81 EXPECT_EQ(2U, rewriter.device_id_to_type_for_testing().size());
82 }
83
84 #if defined(OS_CHROMEOS)
85 TEST(KeyRewriterTest, TestRewriteCommandToControl) {
86 XEvent xev;
87
88 // First, test with a PC keyboard.
89 KeyRewriter rewriter;
90 rewriter.DeviceAddedForTesting(0, "PC Keyboard");
91 rewriter.set_last_device_id_for_testing(0);
92 {
93 // XK_a, Alt modifier.
94 InitXKeyEvent(38, Mod1Mask, &xev);
95 aura::KeyEvent keyevent(&xev, false /* is_char */);
96 rewriter.RewriteCommandToControlForTesting(&keyevent);
97 const XKeyEvent& xkey = keyevent.native_event()->xkey;
98 // Confirm the original values are preserved.
99 EXPECT_EQ(38U, xkey.keycode);
100 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask), xkey.state);
101 }
102 {
103 // XK_a, Win modifier.
104 InitXKeyEvent(38, Mod4Mask, &xev);
105 aura::KeyEvent keyevent(&xev, false /* is_char */);
106 rewriter.RewriteCommandToControlForTesting(&keyevent);
107 const XKeyEvent& xkey = keyevent.native_event()->xkey;
108 // Confirm the original values are preserved.
109 EXPECT_EQ(38U, xkey.keycode);
110 EXPECT_EQ(static_cast<unsigned int>(Mod4Mask), xkey.state);
111 }
112 {
113 // XK_a, Alt+Win modifier.
114 InitXKeyEvent(38, Mod1Mask | Mod4Mask, &xev);
115 aura::KeyEvent keyevent(&xev, false /* is_char */);
116 rewriter.RewriteCommandToControlForTesting(&keyevent);
117 const XKeyEvent& xkey = keyevent.native_event()->xkey;
118 // Confirm the original values are preserved.
119 EXPECT_EQ(38U, xkey.keycode);
120 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask | Mod4Mask), xkey.state);
121 }
122 {
123 // XK_Super_L (left Windows key), Alt modifier.
124 InitXKeyEvent(133, Mod1Mask, &xev);
125 aura::KeyEvent keyevent(&xev, false /* is_char */);
126 rewriter.RewriteCommandToControlForTesting(&keyevent);
127 const XKeyEvent& xkey = keyevent.native_event()->xkey;
128 // Confirm the original values are preserved.
129 EXPECT_EQ(133U, xkey.keycode);
130 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask), xkey.state);
131 }
132 {
133 // XK_Super_R (right Windows key), Alt modifier.
134 InitXKeyEvent(134, Mod1Mask, &xev);
135 aura::KeyEvent keyevent(&xev, false /* is_char */);
136 rewriter.RewriteCommandToControlForTesting(&keyevent);
137 const XKeyEvent& xkey = keyevent.native_event()->xkey;
138 // Confirm the original values are preserved.
139 EXPECT_EQ(134U, xkey.keycode);
140 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask), xkey.state);
141 }
142
143 // An Apple keyboard reuse the ID, zero.
144 rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
145 rewriter.set_last_device_id_for_testing(0);
146 {
147 // XK_a, Alt modifier.
148 InitXKeyEvent(38, Mod1Mask, &xev);
149 aura::KeyEvent keyevent(&xev, false /* is_char */);
150 rewriter.RewriteCommandToControlForTesting(&keyevent);
151 const XKeyEvent& xkey = keyevent.native_event()->xkey;
152 // Confirm the original values are preserved.
153 EXPECT_EQ(38U, xkey.keycode);
154 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask), xkey.state);
155 }
156 {
157 // XK_a, Win modifier.
158 InitXKeyEvent(38, Mod4Mask, &xev);
159 aura::KeyEvent keyevent(&xev, false /* is_char */);
160 rewriter.RewriteCommandToControlForTesting(&keyevent);
161 const XKeyEvent& xkey = keyevent.native_event()->xkey;
162 // Confirm the original values are preserved.
163 EXPECT_EQ(38U, xkey.keycode);
164 EXPECT_EQ(static_cast<unsigned int>(ControlMask), xkey.state);
165 }
166 {
167 // XK_a, Alt+Win modifier.
168 InitXKeyEvent(38, Mod1Mask | Mod4Mask, &xev);
169 aura::KeyEvent keyevent(&xev, false /* is_char */);
170 rewriter.RewriteCommandToControlForTesting(&keyevent);
171 const XKeyEvent& xkey = keyevent.native_event()->xkey;
172 // Confirm the original values are preserved.
173 EXPECT_EQ(38U, xkey.keycode);
174 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask | ControlMask), xkey.state);
175 }
176 {
177 // XK_Super_L (left Windows key), Alt modifier.
178 InitXKeyEvent(133, Mod1Mask, &xev);
179 aura::KeyEvent keyevent(&xev, false /* is_char */);
180 rewriter.RewriteCommandToControlForTesting(&keyevent);
181 const XKeyEvent& xkey = keyevent.native_event()->xkey;
182 // Confirm the original values are preserved.
183 EXPECT_EQ(37U /* Control_L */, xkey.keycode);
184 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask), xkey.state);
185 }
186 {
187 // XK_Super_R (right Windows key), Alt modifier.
188 InitXKeyEvent(134, Mod1Mask, &xev);
189 aura::KeyEvent keyevent(&xev, false /* is_char */);
190 rewriter.RewriteCommandToControlForTesting(&keyevent);
191 const XKeyEvent& xkey = keyevent.native_event()->xkey;
192 // Confirm the original values are preserved.
193 EXPECT_EQ(105U /* Control_R */, xkey.keycode);
194 EXPECT_EQ(static_cast<unsigned int>(Mod1Mask), xkey.state);
195 }
196 }
197 #endif // OS_CHROMEOS
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698