OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "remoting/client/plugin/normalizing_input_filter_mac.h" | |
6 | |
7 #include "remoting/proto/event.pb.h" | |
8 #include "remoting/protocol/protocol_mock_objects.h" | |
9 #include "remoting/protocol/test_event_matchers.h" | |
10 #include "remoting/protocol/usb_key_codes.h" | |
11 #include "testing/gmock/include/gmock/gmock.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 | |
14 using ::testing::InSequence; | |
15 using remoting::protocol::InputStub; | |
16 using remoting::protocol::KeyEvent; | |
17 using remoting::protocol::MockInputStub; | |
18 using remoting::protocol::MouseEvent; | |
19 using remoting::protocol::test::EqualsKeyEventWithNumLock; | |
20 | |
21 namespace remoting { | |
22 | |
23 namespace { | |
24 | |
25 KeyEvent MakeKeyEvent(uint32 keycode, bool pressed) { | |
26 KeyEvent event; | |
27 event.set_usb_keycode(keycode); | |
28 event.set_pressed(pressed); | |
29 event.set_lock_states(KeyEvent::LOCK_STATES_NUMLOCK); | |
30 return event; | |
31 } | |
32 | |
33 } // namespace | |
34 | |
35 // Test CapsLock press/release. | |
36 TEST(NormalizingInputFilterMacTest, CapsLock) { | |
37 MockInputStub stub; | |
38 scoped_ptr<protocol::InputFilter> processor( | |
39 new NormalizingInputFilterMac(&stub)); | |
40 | |
41 { | |
42 InSequence s; | |
43 | |
44 // Verifies the generated CapsLock up/down events. | |
45 EXPECT_CALL(stub, | |
46 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbCapsLock, true))); | |
47 EXPECT_CALL(stub, | |
48 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbCapsLock, false))); | |
49 } | |
50 | |
51 // Injecting a CapsLock down event with NumLock on. | |
52 processor->InjectKeyEvent(MakeKeyEvent(kUsbCapsLock, true)); | |
53 } | |
54 | |
55 // Test without pressing command key. | |
56 TEST(NormalizingInputFilterMacTest, NoInjection) { | |
57 MockInputStub stub; | |
58 scoped_ptr<protocol::InputFilter> processor( | |
59 new NormalizingInputFilterMac(&stub)); | |
60 | |
61 { | |
62 InSequence s; | |
63 | |
64 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', true))); | |
65 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
66 } | |
67 | |
68 // C Down and C Up. | |
69 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | |
70 processor->InjectKeyEvent(MakeKeyEvent('C', false)); | |
71 } | |
72 | |
73 // Test pressing command key and other normal keys. | |
74 TEST(NormalizingInputFilterMacTest, CmdKey) { | |
75 MockInputStub stub; | |
76 scoped_ptr<protocol::InputFilter> processor( | |
77 new NormalizingInputFilterMac(&stub)); | |
78 | |
79 { | |
80 InSequence s; | |
81 | |
82 // Left command key. | |
83 EXPECT_CALL(stub, | |
84 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, true))); | |
85 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', true))); | |
86 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
87 EXPECT_CALL(stub, | |
88 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, false))); | |
89 | |
90 // Right command key. | |
91 EXPECT_CALL(stub, | |
92 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, true))); | |
93 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', true))); | |
94 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
95 EXPECT_CALL(stub, | |
96 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, false))); | |
97 | |
98 // More than one keys after CMD. | |
99 EXPECT_CALL(stub, | |
100 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, true))); | |
101 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', true))); | |
102 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('V', true))); | |
103 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
104 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('V', false))); | |
105 EXPECT_CALL(stub, | |
106 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, false))); | |
107 } | |
108 | |
109 // Left command key. | |
110 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, true)); | |
111 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | |
112 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, false)); | |
113 | |
114 // Right command key. | |
115 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, true)); | |
116 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | |
117 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, false)); | |
118 | |
119 // More than one keys after CMD. | |
120 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, true)); | |
121 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | |
122 processor->InjectKeyEvent(MakeKeyEvent('V', true)); | |
123 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, false)); | |
124 } | |
125 | |
126 // Test pressing command and special keys. | |
127 TEST(NormalizingInputFilterMacTest, SpecialKeys) { | |
128 MockInputStub stub; | |
129 scoped_ptr<protocol::InputFilter> processor( | |
130 new NormalizingInputFilterMac(&stub)); | |
131 | |
132 { | |
133 InSequence s; | |
134 | |
135 // Command + Shift. | |
136 EXPECT_CALL(stub, | |
137 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, true))); | |
138 EXPECT_CALL(stub, | |
139 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftShift, true))); | |
140 EXPECT_CALL(stub, | |
141 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, false))); | |
142 EXPECT_CALL( | |
143 stub, InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftShift, false))); | |
144 | |
145 // Command + Option. | |
146 EXPECT_CALL(stub, | |
147 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, true))); | |
148 EXPECT_CALL( | |
149 stub, InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftAlt, true))); | |
150 EXPECT_CALL(stub, | |
151 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, false))); | |
152 EXPECT_CALL( | |
153 stub, InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftAlt, false))); | |
154 } | |
155 | |
156 // Command + Shift. | |
157 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, true)); | |
158 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); | |
159 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, false)); | |
160 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); | |
161 | |
162 // Command + Option. | |
163 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, true)); | |
164 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftAlt, true)); | |
165 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, false)); | |
166 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftAlt, false)); | |
167 } | |
168 | |
169 // Test pressing multiple command keys. | |
170 TEST(NormalizingInputFilterMacTest, MultipleCmdKeys) { | |
171 MockInputStub stub; | |
172 scoped_ptr<protocol::InputFilter> processor( | |
173 new NormalizingInputFilterMac(&stub)); | |
174 | |
175 { | |
176 InSequence s; | |
177 | |
178 EXPECT_CALL(stub, | |
179 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, true))); | |
180 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', true))); | |
181 EXPECT_CALL(stub, | |
182 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, true))); | |
183 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
184 EXPECT_CALL(stub, | |
185 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbLeftOs, false))); | |
186 } | |
187 | |
188 // Test multiple CMD keys at the same time. | |
189 // L CMD Down, C Down, R CMD Down, L CMD Up. | |
190 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, true)); | |
191 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | |
192 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, true)); | |
193 processor->InjectKeyEvent(MakeKeyEvent(kUsbLeftOs, false)); | |
194 } | |
195 | |
196 // Test press C key before command key. | |
197 TEST(NormalizingInputFilterMacTest, BeforeCmdKey) { | |
198 MockInputStub stub; | |
199 scoped_ptr<protocol::InputFilter> processor( | |
200 new NormalizingInputFilterMac(&stub)); | |
201 | |
202 { | |
203 InSequence s; | |
204 | |
205 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', true))); | |
206 EXPECT_CALL(stub, | |
207 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, true))); | |
208 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
209 EXPECT_CALL(stub, | |
210 InjectKeyEvent(EqualsKeyEventWithNumLock(kUsbRightOs, false))); | |
211 EXPECT_CALL(stub, InjectKeyEvent(EqualsKeyEventWithNumLock('C', false))); | |
212 } | |
213 | |
214 // Press C before command key. | |
215 processor->InjectKeyEvent(MakeKeyEvent('C', true)); | |
216 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, true)); | |
217 processor->InjectKeyEvent(MakeKeyEvent(kUsbRightOs, false)); | |
218 processor->InjectKeyEvent(MakeKeyEvent('C', false)); | |
219 } | |
220 | |
221 } // namespace remoting | |
OLD | NEW |