| 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 |