OLD | NEW |
---|---|
(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 | |
OLD | NEW |