OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "remoting/client/plugin/normalizing_input_filter_mac.h" | 5 #include "remoting/client/plugin/normalizing_input_filter_mac.h" |
6 | 6 |
7 #include "remoting/proto/event.pb.h" | 7 #include "remoting/proto/event.pb.h" |
8 #include "remoting/protocol/protocol_mock_objects.h" | 8 #include "remoting/protocol/protocol_mock_objects.h" |
9 #include "remoting/protocol/test_event_matchers.h" | |
9 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
11 | 12 |
12 using ::testing::InSequence; | 13 using ::testing::InSequence; |
13 using remoting::protocol::InputStub; | 14 using remoting::protocol::InputStub; |
14 using remoting::protocol::KeyEvent; | 15 using remoting::protocol::KeyEvent; |
15 using remoting::protocol::MockInputStub; | 16 using remoting::protocol::MockInputStub; |
16 using remoting::protocol::MouseEvent; | 17 using remoting::protocol::MouseEvent; |
18 using remoting::protocol::EqualsUsbEventWithNumLock; | |
17 | 19 |
18 namespace remoting { | 20 namespace remoting { |
19 | 21 |
20 namespace { | 22 namespace { |
21 | 23 |
22 const unsigned int kUsbCapsLock = 0x070039; | 24 const unsigned int kUsbCapsLock = 0x070039; |
23 const unsigned int kUsbLeftShift = 0x0700e1; | 25 const unsigned int kUsbLeftShift = 0x0700e1; |
24 const unsigned int kUsbLeftOption = 0x0700e2; | 26 const unsigned int kUsbLeftOption = 0x0700e2; |
25 const unsigned int kUsbLeftCmd = 0x0700e3; | 27 const unsigned int kUsbLeftCmd = 0x0700e3; |
26 const unsigned int kUsbRightCmd = 0x0700e7; | 28 const unsigned int kUsbRightCmd = 0x0700e7; |
27 | 29 |
28 // A hardcoded value used to verify |lock_states| is preserved. | |
29 static const uint32 kTestLockStates = protocol::KeyEvent::LOCK_STATES_NUMLOCK; | |
Wez
2015/03/12 00:13:58
And this?
Rintaro Kuroiwa
2015/03/12 18:51:27
Same as the other file.
| |
30 | |
31 MATCHER_P2(EqualsUsbEvent, usb_keycode, pressed, "") { | |
32 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) && | |
33 arg.pressed() == pressed && | |
34 arg.lock_states() == kTestLockStates; | |
35 } | |
36 | |
37 KeyEvent MakeKeyEvent(uint32 keycode, bool pressed) { | 30 KeyEvent MakeKeyEvent(uint32 keycode, bool pressed) { |
38 KeyEvent event; | 31 KeyEvent event; |
39 event.set_usb_keycode(keycode); | 32 event.set_usb_keycode(keycode); |
40 event.set_pressed(pressed); | 33 event.set_pressed(pressed); |
41 event.set_lock_states(kTestLockStates); | 34 event.set_lock_states(KeyEvent::LOCK_STATES_NUMLOCK); |
42 return event; | 35 return event; |
43 } | 36 } |
44 | 37 |
45 } // namespace | 38 } // namespace |
46 | 39 |
47 // Test CapsLock press/release. | 40 // Test CapsLock press/release. |
48 TEST(NormalizingInputFilterMacTest, CapsLock) { | 41 TEST(NormalizingInputFilterMacTest, CapsLock) { |
49 MockInputStub stub; | 42 MockInputStub stub; |
50 scoped_ptr<protocol::InputFilter> processor( | 43 scoped_ptr<protocol::InputFilter> processor( |
51 new NormalizingInputFilterMac(&stub)); | 44 new NormalizingInputFilterMac(&stub)); |
52 | 45 |
53 { | 46 { |
54 InSequence s; | 47 InSequence s; |
55 | 48 |
56 // Verifies the generated CapsLock up/down events. | 49 // Verifies the generated CapsLock up/down events. |
57 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbCapsLock, true))); | 50 EXPECT_CALL(stub, |
58 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbCapsLock, false))); | 51 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbCapsLock, true))); |
52 EXPECT_CALL(stub, | |
53 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbCapsLock, false))); | |
59 } | 54 } |
60 | 55 |
61 // Injecting a CapsLock down event with NumLock on. | 56 // Injecting a CapsLock down event with NumLock on. |
62 processor->InjectKeyEvent(MakeKeyEvent(kUsbCapsLock, true)); | 57 processor->InjectKeyEvent(MakeKeyEvent(kUsbCapsLock, true)); |
63 } | 58 } |
64 | 59 |
65 // Test without pressing command key. | 60 // Test without pressing command key. |
66 TEST(NormalizingInputFilterMacTest, NoInjection) { | 61 TEST(NormalizingInputFilterMacTest, NoInjection) { |
67 MockInputStub stub; | 62 MockInputStub stub; |
68 scoped_ptr<protocol::InputFilter> processor( | 63 scoped_ptr<protocol::InputFilter> processor( |
69 new NormalizingInputFilterMac(&stub)); | 64 new NormalizingInputFilterMac(&stub)); |
70 | 65 |
71 { | 66 { |
72 InSequence s; | 67 InSequence s; |
73 | 68 |
74 EXPECT_CALL(stub, InjectKeyEvent( | 69 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
75 EqualsUsbEvent('C', true))); | 70 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
76 EXPECT_CALL(stub, InjectKeyEvent( | |
77 EqualsUsbEvent('C', false))); | |
78 } | 71 } |
79 | 72 |
80 // C Down and C Up. | 73 // C Down and C Up. |
81 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 74 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
82 processor->InjectKeyEvent(MakeKeyEvent('C', false)); | 75 processor->InjectKeyEvent(MakeKeyEvent('C', false)); |
83 } | 76 } |
84 | 77 |
85 // Test pressing command key and other normal keys. | 78 // Test pressing command key and other normal keys. |
86 TEST(NormalizingInputFilterMacTest, CmdKey) { | 79 TEST(NormalizingInputFilterMacTest, CmdKey) { |
87 MockInputStub stub; | 80 MockInputStub stub; |
88 scoped_ptr<protocol::InputFilter> processor( | 81 scoped_ptr<protocol::InputFilter> processor( |
89 new NormalizingInputFilterMac(&stub)); | 82 new NormalizingInputFilterMac(&stub)); |
90 | 83 |
91 { | 84 { |
92 InSequence s; | 85 InSequence s; |
93 | 86 |
94 // Left command key. | 87 // Left command key. |
95 EXPECT_CALL(stub, InjectKeyEvent( | 88 EXPECT_CALL(stub, |
96 EqualsUsbEvent(kUsbLeftCmd, true))); | 89 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
97 EXPECT_CALL(stub, InjectKeyEvent( | 90 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
98 EqualsUsbEvent('C', true))); | 91 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
99 EXPECT_CALL(stub, InjectKeyEvent( | 92 EXPECT_CALL(stub, |
100 EqualsUsbEvent('C', false))); | 93 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
101 EXPECT_CALL(stub, InjectKeyEvent( | |
102 EqualsUsbEvent(kUsbLeftCmd, false))); | |
103 | 94 |
104 // Right command key. | 95 // Right command key. |
105 EXPECT_CALL(stub, InjectKeyEvent( | 96 EXPECT_CALL(stub, |
106 EqualsUsbEvent(kUsbRightCmd, true))); | 97 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
107 EXPECT_CALL(stub, InjectKeyEvent( | 98 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
108 EqualsUsbEvent('C', true))); | 99 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
109 EXPECT_CALL(stub, InjectKeyEvent( | 100 EXPECT_CALL(stub, |
110 EqualsUsbEvent('C', false))); | 101 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, false))); |
111 EXPECT_CALL(stub, InjectKeyEvent( | |
112 EqualsUsbEvent(kUsbRightCmd, false))); | |
113 | 102 |
114 // More than one keys after CMD. | 103 // More than one keys after CMD. |
115 EXPECT_CALL(stub, InjectKeyEvent( | 104 EXPECT_CALL(stub, |
116 EqualsUsbEvent(kUsbRightCmd, true))); | 105 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
117 EXPECT_CALL(stub, InjectKeyEvent( | 106 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
118 EqualsUsbEvent('C', true))); | 107 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('V', true))); |
119 EXPECT_CALL(stub, InjectKeyEvent( | 108 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
120 EqualsUsbEvent('V', true))); | 109 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('V', false))); |
121 EXPECT_CALL(stub, InjectKeyEvent( | 110 EXPECT_CALL(stub, |
122 EqualsUsbEvent('C', false))); | 111 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, false))); |
123 EXPECT_CALL(stub, InjectKeyEvent( | |
124 EqualsUsbEvent('V', false))); | |
125 EXPECT_CALL(stub, InjectKeyEvent( | |
126 EqualsUsbEvent(kUsbRightCmd, false))); | |
127 } | 112 } |
128 | 113 |
129 // Left command key. | 114 // Left command key. |
130 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 115 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
131 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 116 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
132 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 117 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
133 | 118 |
134 // Right command key. | 119 // Right command key. |
135 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 120 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
136 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 121 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
137 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); | 122 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
138 | 123 |
139 // More than one keys after CMD. | 124 // More than one keys after CMD. |
140 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 125 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
141 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 126 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
142 processor->InjectKeyEvent(MakeKeyEvent('V', true)); | 127 processor->InjectKeyEvent(MakeKeyEvent('V', true)); |
143 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); | 128 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
144 } | 129 } |
145 | 130 |
146 // Test pressing command and special keys. | 131 // Test pressing command and special keys. |
147 TEST(NormalizingInputFilterMacTest, SpecialKeys) { | 132 TEST(NormalizingInputFilterMacTest, SpecialKeys) { |
148 MockInputStub stub; | 133 MockInputStub stub; |
149 scoped_ptr<protocol::InputFilter> processor( | 134 scoped_ptr<protocol::InputFilter> processor( |
150 new NormalizingInputFilterMac(&stub)); | 135 new NormalizingInputFilterMac(&stub)); |
151 | 136 |
152 { | 137 { |
153 InSequence s; | 138 InSequence s; |
154 | 139 |
155 // Command + Shift. | 140 // Command + Shift. |
156 EXPECT_CALL(stub, InjectKeyEvent( | 141 EXPECT_CALL(stub, |
157 EqualsUsbEvent(kUsbLeftCmd, true))); | 142 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
158 EXPECT_CALL(stub, InjectKeyEvent( | 143 EXPECT_CALL(stub, |
159 EqualsUsbEvent(kUsbLeftShift, true))); | 144 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftShift, true))); |
160 EXPECT_CALL(stub, InjectKeyEvent( | 145 EXPECT_CALL(stub, |
161 EqualsUsbEvent(kUsbLeftCmd, false))); | 146 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
162 EXPECT_CALL(stub, InjectKeyEvent( | 147 EXPECT_CALL( |
163 EqualsUsbEvent(kUsbLeftShift, false))); | 148 stub, InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftShift, false))); |
164 | 149 |
165 // Command + Option. | 150 // Command + Option. |
166 EXPECT_CALL(stub, InjectKeyEvent( | 151 EXPECT_CALL(stub, |
167 EqualsUsbEvent(kUsbLeftCmd, true))); | 152 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
168 EXPECT_CALL(stub, InjectKeyEvent( | 153 EXPECT_CALL( |
169 EqualsUsbEvent(kUsbLeftOption, true))); | 154 stub, InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftOption, true))); |
170 EXPECT_CALL(stub, InjectKeyEvent( | 155 EXPECT_CALL(stub, |
171 EqualsUsbEvent(kUsbLeftCmd, false))); | 156 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
172 EXPECT_CALL(stub, InjectKeyEvent( | 157 EXPECT_CALL( |
173 EqualsUsbEvent(kUsbLeftOption, false))); | 158 stub, InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftOption, false))); |
174 } | 159 } |
175 | 160 |
176 // Command + Shift. | 161 // Command + Shift. |
177 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 162 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
178 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); | 163 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); |
179 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 164 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
180 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); | 165 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); |
181 | 166 |
182 // Command + Option. | 167 // Command + Option. |
183 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 168 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
184 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, true)); | 169 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, true)); |
185 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 170 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
186 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, false)); | 171 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, false)); |
187 } | 172 } |
188 | 173 |
189 // Test pressing multiple command keys. | 174 // Test pressing multiple command keys. |
190 TEST(NormalizingInputFilterMacTest, MultipleCmdKeys) { | 175 TEST(NormalizingInputFilterMacTest, MultipleCmdKeys) { |
191 MockInputStub stub; | 176 MockInputStub stub; |
192 scoped_ptr<protocol::InputFilter> processor( | 177 scoped_ptr<protocol::InputFilter> processor( |
193 new NormalizingInputFilterMac(&stub)); | 178 new NormalizingInputFilterMac(&stub)); |
194 | 179 |
195 { | 180 { |
196 InSequence s; | 181 InSequence s; |
197 | 182 |
198 EXPECT_CALL(stub, InjectKeyEvent( | 183 EXPECT_CALL(stub, |
199 EqualsUsbEvent(kUsbLeftCmd, true))); | 184 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, true))); |
200 EXPECT_CALL(stub, InjectKeyEvent( | 185 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
201 EqualsUsbEvent('C', true))); | 186 EXPECT_CALL(stub, |
202 EXPECT_CALL(stub, InjectKeyEvent( | 187 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
203 EqualsUsbEvent(kUsbRightCmd, true))); | 188 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
204 EXPECT_CALL(stub, InjectKeyEvent( | 189 EXPECT_CALL(stub, |
205 EqualsUsbEvent('C', false))); | 190 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbLeftCmd, false))); |
206 EXPECT_CALL(stub, InjectKeyEvent( | |
207 EqualsUsbEvent(kUsbLeftCmd, false))); | |
208 } | 191 } |
209 | 192 |
210 // Test multiple CMD keys at the same time. | 193 // Test multiple CMD keys at the same time. |
211 // L CMD Down, C Down, R CMD Down, L CMD Up. | 194 // L CMD Down, C Down, R CMD Down, L CMD Up. |
212 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); | 195 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
213 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 196 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
214 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 197 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
215 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); | 198 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
216 } | 199 } |
217 | 200 |
218 // Test press C key before command key. | 201 // Test press C key before command key. |
219 TEST(NormalizingInputFilterMacTest, BeforeCmdKey) { | 202 TEST(NormalizingInputFilterMacTest, BeforeCmdKey) { |
220 MockInputStub stub; | 203 MockInputStub stub; |
221 scoped_ptr<protocol::InputFilter> processor( | 204 scoped_ptr<protocol::InputFilter> processor( |
222 new NormalizingInputFilterMac(&stub)); | 205 new NormalizingInputFilterMac(&stub)); |
223 | 206 |
224 { | 207 { |
225 InSequence s; | 208 InSequence s; |
226 | 209 |
227 EXPECT_CALL(stub, InjectKeyEvent( | 210 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', true))); |
228 EqualsUsbEvent('C', true))); | 211 EXPECT_CALL(stub, |
229 EXPECT_CALL(stub, InjectKeyEvent( | 212 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, true))); |
230 EqualsUsbEvent(kUsbRightCmd, true))); | 213 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
231 EXPECT_CALL(stub, InjectKeyEvent( | 214 EXPECT_CALL(stub, |
232 EqualsUsbEvent('C', false))); | 215 InjectKeyEvent(EqualsUsbEventWithNumLock(kUsbRightCmd, false))); |
233 EXPECT_CALL(stub, InjectKeyEvent( | 216 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEventWithNumLock('C', false))); |
234 EqualsUsbEvent(kUsbRightCmd, false))); | |
235 EXPECT_CALL(stub, InjectKeyEvent( | |
236 EqualsUsbEvent('C', false))); | |
237 } | 217 } |
238 | 218 |
239 // Press C before command key. | 219 // Press C before command key. |
240 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | 220 processor->InjectKeyEvent(MakeKeyEvent('C', true)); |
241 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); | 221 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
242 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); | 222 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
243 processor->InjectKeyEvent(MakeKeyEvent('C', false)); | 223 processor->InjectKeyEvent(MakeKeyEvent('C', false)); |
244 } | 224 } |
245 | 225 |
246 } // namespace remoting | 226 } // namespace remoting |
OLD | NEW |