| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/mac_key_event_processor.h" | 5 #include "remoting/client/plugin/mac_key_event_processor.h" |
| 6 #include "remoting/proto/event.pb.h" | 6 #include "remoting/proto/event.pb.h" |
| 7 #include "remoting/protocol/protocol_mock_objects.h" |
| 8 #include "testing/gmock/include/gmock/gmock.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 8 | 10 |
| 11 using ::testing::InSequence; |
| 9 using remoting::protocol::InputStub; | 12 using remoting::protocol::InputStub; |
| 10 using remoting::protocol::KeyEvent; | 13 using remoting::protocol::KeyEvent; |
| 14 using remoting::protocol::MockInputStub; |
| 11 using remoting::protocol::MouseEvent; | 15 using remoting::protocol::MouseEvent; |
| 12 | 16 |
| 13 namespace remoting { | 17 namespace remoting { |
| 14 | 18 |
| 15 namespace { | 19 namespace { |
| 16 | 20 |
| 17 const int kShift = 16; | 21 const unsigned int kUsbLeftShift = 0x0700e1; |
| 18 const int kOption = 18; | 22 const unsigned int kUsbLeftOption = 0x0700e2; |
| 19 const int kLeftCmd = 91; | 23 const unsigned int kUsbLeftCmd = 0x0700e3; |
| 20 const int kRightCmd = 93; | 24 const unsigned int kUsbRightCmd = 0x0700e7; |
| 21 | 25 |
| 22 class FakeInputStub : public InputStub { | 26 MATCHER_P2(EqualsUsbEvent, usb_keycode, pressed, "") { |
| 23 public: | 27 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) && |
| 24 FakeInputStub() {} | 28 arg.pressed() == pressed; |
| 25 virtual ~FakeInputStub() {} | 29 } |
| 26 | |
| 27 virtual void InjectKeyEvent(const KeyEvent& event) { | |
| 28 key_events_.push_back(std::make_pair(event.keycode(), event.pressed())); | |
| 29 } | |
| 30 | |
| 31 virtual void InjectMouseEvent(const MouseEvent& event) { | |
| 32 } | |
| 33 | |
| 34 void ExpectOneKeyEvent(int keycode, bool pressed) { | |
| 35 EXPECT_EQ(1u, key_events_.size()); | |
| 36 EXPECT_EQ(keycode, key_events_[0].first); | |
| 37 EXPECT_EQ(pressed, key_events_[0].second); | |
| 38 } | |
| 39 | |
| 40 void ExpectTwoKeyEvents(int keycode0, bool pressed0, | |
| 41 int keycode1, bool pressed1) { | |
| 42 EXPECT_EQ(2u, key_events_.size()); | |
| 43 EXPECT_EQ(keycode0, key_events_[0].first); | |
| 44 EXPECT_EQ(pressed0, key_events_[0].second); | |
| 45 EXPECT_EQ(keycode1, key_events_[1].first); | |
| 46 EXPECT_EQ(pressed1, key_events_[1].second); | |
| 47 } | |
| 48 | |
| 49 void ExpectThreeKeyEvents(int keycode0, bool pressed0, | |
| 50 int keycode1, bool pressed1, | |
| 51 int keycode2, bool pressed2) { | |
| 52 EXPECT_EQ(3u, key_events_.size()); | |
| 53 EXPECT_EQ(keycode0, key_events_[0].first); | |
| 54 EXPECT_EQ(pressed0, key_events_[0].second); | |
| 55 EXPECT_EQ(keycode1, key_events_[1].first); | |
| 56 EXPECT_EQ(pressed1, key_events_[1].second); | |
| 57 EXPECT_EQ(keycode2, key_events_[2].first); | |
| 58 EXPECT_EQ(pressed2, key_events_[2].second); | |
| 59 } | |
| 60 | |
| 61 void ClearKeyEvents() { | |
| 62 key_events_.clear(); | |
| 63 } | |
| 64 | |
| 65 private: | |
| 66 std::vector<std::pair<int, bool> > key_events_; | |
| 67 | |
| 68 DISALLOW_COPY_AND_ASSIGN(FakeInputStub); | |
| 69 }; | |
| 70 | 30 |
| 71 KeyEvent MakeKeyEvent(int keycode, bool pressed) { | 31 KeyEvent MakeKeyEvent(int keycode, bool pressed) { |
| 72 KeyEvent event; | 32 KeyEvent event; |
| 73 event.set_keycode(keycode); | 33 event.set_usb_keycode(keycode); |
| 74 event.set_pressed(pressed); | 34 event.set_pressed(pressed); |
| 75 return event; | 35 return event; |
| 76 } | 36 } |
| 77 | 37 |
| 78 } // namespace | 38 } // namespace |
| 79 | 39 |
| 80 // Test without pressing command key. | 40 // Test without pressing command key. |
| 81 TEST(MacKeyEventProcessorTest, NoInjection) { | 41 TEST(MacKeyEventProcessorTest, NoInjection) { |
| 82 FakeInputStub stub; | 42 MockInputStub stub; |
| 83 MacKeyEventProcessor processor(&stub); | 43 MacKeyEventProcessor processor(&stub); |
| 84 | 44 |
| 85 // C Down. | 45 { |
| 46 InSequence s; |
| 47 |
| 48 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
| 49 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 50 } |
| 51 |
| 52 // C Down and C Up. |
| 86 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | 53 processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
| 87 stub.ExpectOneKeyEvent('C', true); | |
| 88 stub.ClearKeyEvents(); | |
| 89 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 90 | |
| 91 // C Up. | |
| 92 processor.InjectKeyEvent(MakeKeyEvent('C', false)); | 54 processor.InjectKeyEvent(MakeKeyEvent('C', false)); |
| 93 stub.ExpectOneKeyEvent('C', false); | |
| 94 stub.ClearKeyEvents(); | |
| 95 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 96 } | 55 } |
| 97 | 56 |
| 98 // Test pressing command key and other normal keys. | 57 // Test pressing command key and other normal keys. |
| 99 TEST(MacKeyEventProcessorTest, CmdKey) { | 58 TEST(MacKeyEventProcessorTest, CmdKey) { |
| 100 FakeInputStub stub; | 59 MockInputStub stub; |
| 101 MacKeyEventProcessor processor(&stub); | 60 MacKeyEventProcessor processor(&stub); |
| 102 | 61 |
| 62 { |
| 63 InSequence s; |
| 64 |
| 65 // Left command key. |
| 66 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
| 67 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
| 68 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 69 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
| 70 |
| 71 // Right command key. |
| 72 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
| 73 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
| 74 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 75 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, false))); |
| 76 |
| 77 // More than one keys after CMD. |
| 78 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
| 79 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
| 80 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('V', true))); |
| 81 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 82 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('V', false))); |
| 83 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, false))); |
| 84 } |
| 85 |
| 103 // Left command key. | 86 // Left command key. |
| 104 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); | 87 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 105 stub.ExpectOneKeyEvent(kLeftCmd, true); | |
| 106 stub.ClearKeyEvents(); | |
| 107 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 108 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | 88 processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
| 109 stub.ExpectOneKeyEvent('C', true); | 89 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 110 stub.ClearKeyEvents(); | |
| 111 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 112 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); | |
| 113 stub.ExpectTwoKeyEvents('C', false, kLeftCmd, false); | |
| 114 stub.ClearKeyEvents(); | |
| 115 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 116 | 90 |
| 117 // Right command key. | 91 // Right command key. |
| 118 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); | 92 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 119 stub.ExpectOneKeyEvent(kRightCmd, true); | |
| 120 stub.ClearKeyEvents(); | |
| 121 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 122 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | 93 processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
| 123 stub.ExpectOneKeyEvent('C', true); | 94 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
| 124 stub.ClearKeyEvents(); | |
| 125 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 126 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, false)); | |
| 127 stub.ExpectTwoKeyEvents('C', false, kRightCmd, false); | |
| 128 stub.ClearKeyEvents(); | |
| 129 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 130 | 95 |
| 131 // More than one keys after CMD. | 96 // More than one keys after CMD. |
| 132 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); | 97 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 133 stub.ExpectOneKeyEvent(kRightCmd, true); | |
| 134 stub.ClearKeyEvents(); | |
| 135 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 136 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | 98 processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
| 137 stub.ExpectOneKeyEvent('C', true); | |
| 138 stub.ClearKeyEvents(); | |
| 139 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 140 processor.InjectKeyEvent(MakeKeyEvent('V', true)); | 99 processor.InjectKeyEvent(MakeKeyEvent('V', true)); |
| 141 stub.ExpectOneKeyEvent('V', true); | 100 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
| 142 stub.ClearKeyEvents(); | |
| 143 EXPECT_EQ(3, processor.NumberOfPressedKeys()); | |
| 144 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, false)); | |
| 145 stub.ExpectThreeKeyEvents('C', false, 'V', false, | |
| 146 kRightCmd, false); | |
| 147 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 148 } | 101 } |
| 149 | 102 |
| 150 // Test pressing command and special keys. | 103 // Test pressing command and special keys. |
| 151 TEST(MacKeyEventProcessorTest, SpecialKeys) { | 104 TEST(MacKeyEventProcessorTest, SpecialKeys) { |
| 152 FakeInputStub stub; | 105 MockInputStub stub; |
| 153 MacKeyEventProcessor processor(&stub); | 106 MacKeyEventProcessor processor(&stub); |
| 154 | 107 |
| 108 { |
| 109 InSequence s; |
| 110 |
| 111 // Command + Shift. |
| 112 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
| 113 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftShift, true))); |
| 114 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
| 115 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftShift, false))); |
| 116 |
| 117 // Command + Option. |
| 118 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
| 119 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftOption, true))); |
| 120 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
| 121 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftOption, false))); |
| 122 } |
| 123 |
| 155 // Command + Shift. | 124 // Command + Shift. |
| 156 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); | 125 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 157 stub.ExpectOneKeyEvent(kLeftCmd, true); | 126 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); |
| 158 stub.ClearKeyEvents(); | 127 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 159 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | 128 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); |
| 160 processor.InjectKeyEvent(MakeKeyEvent(kShift, true)); | |
| 161 stub.ExpectOneKeyEvent(kShift, true); | |
| 162 stub.ClearKeyEvents(); | |
| 163 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 164 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); | |
| 165 stub.ExpectOneKeyEvent(kLeftCmd, false); | |
| 166 stub.ClearKeyEvents(); | |
| 167 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 168 processor.InjectKeyEvent(MakeKeyEvent(kShift, false)); | |
| 169 stub.ExpectOneKeyEvent(kShift, false); | |
| 170 stub.ClearKeyEvents(); | |
| 171 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 172 | 129 |
| 173 // Command + Option. | 130 // Command + Option. |
| 174 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); | 131 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 175 stub.ExpectOneKeyEvent(kLeftCmd, true); | 132 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, true)); |
| 176 stub.ClearKeyEvents(); | 133 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 177 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | 134 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, false)); |
| 178 processor.InjectKeyEvent(MakeKeyEvent(kOption, true)); | |
| 179 stub.ExpectOneKeyEvent(kOption, true); | |
| 180 stub.ClearKeyEvents(); | |
| 181 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 182 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); | |
| 183 stub.ExpectOneKeyEvent(kLeftCmd, false); | |
| 184 stub.ClearKeyEvents(); | |
| 185 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 186 processor.InjectKeyEvent(MakeKeyEvent(kOption, false)); | |
| 187 stub.ExpectOneKeyEvent(kOption, false); | |
| 188 stub.ClearKeyEvents(); | |
| 189 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 190 } | 135 } |
| 191 | 136 |
| 192 // Test pressing multiple command keys. | 137 // Test pressing multiple command keys. |
| 193 TEST(MacKeyEventProcessorTest, MultipleCmdKeys) { | 138 TEST(MacKeyEventProcessorTest, MultipleCmdKeys) { |
| 194 FakeInputStub stub; | 139 MockInputStub stub; |
| 195 MacKeyEventProcessor processor(&stub); | 140 MacKeyEventProcessor processor(&stub); |
| 196 | 141 |
| 142 { |
| 143 InSequence s; |
| 144 |
| 145 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
| 146 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
| 147 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
| 148 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 149 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
| 150 } |
| 151 |
| 197 // Test multiple CMD keys at the same time. | 152 // Test multiple CMD keys at the same time. |
| 198 // L CMD Down. | 153 // L CMD Down, C Down, R CMD Down, L CMD Up. |
| 199 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); | 154 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
| 200 stub.ExpectOneKeyEvent(kLeftCmd, true); | |
| 201 stub.ClearKeyEvents(); | |
| 202 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 203 // C Down. | |
| 204 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | 155 processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
| 205 stub.ExpectOneKeyEvent('C', true); | 156 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 206 stub.ClearKeyEvents(); | 157 processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
| 207 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 208 // R CMD Down. | |
| 209 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); | |
| 210 stub.ExpectOneKeyEvent(kRightCmd, true); | |
| 211 stub.ClearKeyEvents(); | |
| 212 EXPECT_EQ(3, processor.NumberOfPressedKeys()); | |
| 213 // L CMD Up. | |
| 214 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); | |
| 215 stub.ExpectTwoKeyEvents('C', false, kLeftCmd, false); | |
| 216 stub.ClearKeyEvents(); | |
| 217 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 218 } | 158 } |
| 219 | 159 |
| 220 // Test press C key before command key. | 160 // Test press C key before command key. |
| 221 TEST(MacKeyEventProcessorTest, BeforeCmdKey) { | 161 TEST(MacKeyEventProcessorTest, BeforeCmdKey) { |
| 222 FakeInputStub stub; | 162 MockInputStub stub; |
| 223 MacKeyEventProcessor processor(&stub); | 163 MacKeyEventProcessor processor(&stub); |
| 224 | 164 |
| 165 { |
| 166 InSequence s; |
| 167 |
| 168 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
| 169 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
| 170 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 171 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, false))); |
| 172 EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
| 173 } |
| 174 |
| 225 // Press C before command key. | 175 // Press C before command key. |
| 226 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | 176 processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
| 227 stub.ExpectOneKeyEvent('C', true); | 177 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
| 228 stub.ClearKeyEvents(); | 178 processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
| 229 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 230 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); | |
| 231 stub.ExpectOneKeyEvent(kRightCmd, true); | |
| 232 stub.ClearKeyEvents(); | |
| 233 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 234 processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, false)); | |
| 235 stub.ExpectTwoKeyEvents('C', false, kRightCmd, false); | |
| 236 stub.ClearKeyEvents(); | |
| 237 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 238 processor.InjectKeyEvent(MakeKeyEvent('C', false)); | 179 processor.InjectKeyEvent(MakeKeyEvent('C', false)); |
| 239 stub.ExpectOneKeyEvent('C', false); | |
| 240 stub.ClearKeyEvents(); | |
| 241 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 242 } | |
| 243 | |
| 244 // Test sending multiple keydowns. | |
| 245 TEST(MacKeyEventProcessorTest, MultipleKeydowns) { | |
| 246 FakeInputStub stub; | |
| 247 MacKeyEventProcessor processor(&stub); | |
| 248 | |
| 249 // 2 CMD Downs. | |
| 250 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); | |
| 251 stub.ExpectOneKeyEvent(kLeftCmd, true); | |
| 252 stub.ClearKeyEvents(); | |
| 253 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 254 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); | |
| 255 stub.ExpectOneKeyEvent(kLeftCmd, true); | |
| 256 stub.ClearKeyEvents(); | |
| 257 EXPECT_EQ(1, processor.NumberOfPressedKeys()); | |
| 258 // C Down. | |
| 259 processor.InjectKeyEvent(MakeKeyEvent('C', true)); | |
| 260 stub.ExpectOneKeyEvent('C', true); | |
| 261 stub.ClearKeyEvents(); | |
| 262 EXPECT_EQ(2, processor.NumberOfPressedKeys()); | |
| 263 // CMD Up. | |
| 264 processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); | |
| 265 stub.ExpectTwoKeyEvents('C', false, kLeftCmd, false); | |
| 266 stub.ClearKeyEvents(); | |
| 267 EXPECT_EQ(0, processor.NumberOfPressedKeys()); | |
| 268 } | 180 } |
| 269 | 181 |
| 270 } // namespace remoting | 182 } // namespace remoting |
| OLD | NEW |