Index: remoting/client/plugin/mac_key_event_processor_unittest.cc |
diff --git a/remoting/client/plugin/mac_key_event_processor_unittest.cc b/remoting/client/plugin/mac_key_event_processor_unittest.cc |
index 9cb1393e1e1e3f92244920d20e4f7aed45975fe2..34be4e352dbcd0efc9c46910f506d00bdf4b52dc 100644 |
--- a/remoting/client/plugin/mac_key_event_processor_unittest.cc |
+++ b/remoting/client/plugin/mac_key_event_processor_unittest.cc |
@@ -4,73 +4,33 @@ |
#include "remoting/client/plugin/mac_key_event_processor.h" |
#include "remoting/proto/event.pb.h" |
+#include "remoting/protocol/protocol_mock_objects.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+using ::testing::InSequence; |
using remoting::protocol::InputStub; |
using remoting::protocol::KeyEvent; |
+using remoting::protocol::MockInputStub; |
using remoting::protocol::MouseEvent; |
namespace remoting { |
namespace { |
-const int kShift = 16; |
-const int kOption = 18; |
-const int kLeftCmd = 91; |
-const int kRightCmd = 93; |
+const unsigned int kUsbLeftShift = 0x0700e1; |
+const unsigned int kUsbLeftOption = 0x0700e2; |
+const unsigned int kUsbLeftCmd = 0x0700e3; |
+const unsigned int kUsbRightCmd = 0x0700e7; |
-class FakeInputStub : public InputStub { |
- public: |
- FakeInputStub() {} |
- virtual ~FakeInputStub() {} |
- |
- virtual void InjectKeyEvent(const KeyEvent& event) { |
- key_events_.push_back(std::make_pair(event.keycode(), event.pressed())); |
- } |
- |
- virtual void InjectMouseEvent(const MouseEvent& event) { |
- } |
- |
- void ExpectOneKeyEvent(int keycode, bool pressed) { |
- EXPECT_EQ(1u, key_events_.size()); |
- EXPECT_EQ(keycode, key_events_[0].first); |
- EXPECT_EQ(pressed, key_events_[0].second); |
- } |
- |
- void ExpectTwoKeyEvents(int keycode0, bool pressed0, |
- int keycode1, bool pressed1) { |
- EXPECT_EQ(2u, key_events_.size()); |
- EXPECT_EQ(keycode0, key_events_[0].first); |
- EXPECT_EQ(pressed0, key_events_[0].second); |
- EXPECT_EQ(keycode1, key_events_[1].first); |
- EXPECT_EQ(pressed1, key_events_[1].second); |
- } |
- |
- void ExpectThreeKeyEvents(int keycode0, bool pressed0, |
- int keycode1, bool pressed1, |
- int keycode2, bool pressed2) { |
- EXPECT_EQ(3u, key_events_.size()); |
- EXPECT_EQ(keycode0, key_events_[0].first); |
- EXPECT_EQ(pressed0, key_events_[0].second); |
- EXPECT_EQ(keycode1, key_events_[1].first); |
- EXPECT_EQ(pressed1, key_events_[1].second); |
- EXPECT_EQ(keycode2, key_events_[2].first); |
- EXPECT_EQ(pressed2, key_events_[2].second); |
- } |
- |
- void ClearKeyEvents() { |
- key_events_.clear(); |
- } |
- |
- private: |
- std::vector<std::pair<int, bool> > key_events_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FakeInputStub); |
-}; |
+MATCHER_P2(EqualsUsbEvent, usb_keycode, pressed, "") { |
+ return arg.usb_keycode() == static_cast<uint32>(usb_keycode) && |
+ arg.pressed() == pressed; |
+} |
KeyEvent MakeKeyEvent(int keycode, bool pressed) { |
KeyEvent event; |
- event.set_keycode(keycode); |
+ event.set_usb_keycode(keycode); |
event.set_pressed(pressed); |
return event; |
} |
@@ -79,192 +39,144 @@ KeyEvent MakeKeyEvent(int keycode, bool pressed) { |
// Test without pressing command key. |
TEST(MacKeyEventProcessorTest, NoInjection) { |
- FakeInputStub stub; |
+ MockInputStub stub; |
MacKeyEventProcessor processor(&stub); |
- // C Down. |
- processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
+ { |
+ InSequence s; |
+ |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ } |
- // C Up. |
+ // C Down and C Up. |
+ processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
processor.InjectKeyEvent(MakeKeyEvent('C', false)); |
- stub.ExpectOneKeyEvent('C', false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
} |
// Test pressing command key and other normal keys. |
TEST(MacKeyEventProcessorTest, CmdKey) { |
- FakeInputStub stub; |
+ MockInputStub stub; |
MacKeyEventProcessor processor(&stub); |
+ { |
+ InSequence s; |
+ |
+ // Left command key. |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
+ |
+ // Right command key. |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, false))); |
+ |
+ // More than one keys after CMD. |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('V', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('V', false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, false))); |
+ } |
+ |
// Left command key. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); |
- stub.ExpectOneKeyEvent(kLeftCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); |
- stub.ExpectTwoKeyEvents('C', false, kLeftCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
// Right command key. |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); |
- stub.ExpectOneKeyEvent(kRightCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, false)); |
- stub.ExpectTwoKeyEvents('C', false, kRightCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
// More than one keys after CMD. |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); |
- stub.ExpectOneKeyEvent(kRightCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
processor.InjectKeyEvent(MakeKeyEvent('V', true)); |
- stub.ExpectOneKeyEvent('V', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(3, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, false)); |
- stub.ExpectThreeKeyEvents('C', false, 'V', false, |
- kRightCmd, false); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
} |
// Test pressing command and special keys. |
TEST(MacKeyEventProcessorTest, SpecialKeys) { |
- FakeInputStub stub; |
+ MockInputStub stub; |
MacKeyEventProcessor processor(&stub); |
+ { |
+ InSequence s; |
+ |
+ // Command + Shift. |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftShift, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftShift, false))); |
+ |
+ // Command + Option. |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftOption, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftOption, false))); |
+ } |
+ |
// Command + Shift. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); |
- stub.ExpectOneKeyEvent(kLeftCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kShift, true)); |
- stub.ExpectOneKeyEvent(kShift, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); |
- stub.ExpectOneKeyEvent(kLeftCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kShift, false)); |
- stub.ExpectOneKeyEvent(kShift, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, true)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftShift, false)); |
// Command + Option. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); |
- stub.ExpectOneKeyEvent(kLeftCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kOption, true)); |
- stub.ExpectOneKeyEvent(kOption, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); |
- stub.ExpectOneKeyEvent(kLeftCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kOption, false)); |
- stub.ExpectOneKeyEvent(kOption, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, true)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftOption, false)); |
} |
// Test pressing multiple command keys. |
TEST(MacKeyEventProcessorTest, MultipleCmdKeys) { |
- FakeInputStub stub; |
+ MockInputStub stub; |
MacKeyEventProcessor processor(&stub); |
+ { |
+ InSequence s; |
+ |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbLeftCmd, false))); |
+ } |
+ |
// Test multiple CMD keys at the same time. |
- // L CMD Down. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); |
- stub.ExpectOneKeyEvent(kLeftCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- // C Down. |
+ // L CMD Down, C Down, R CMD Down, L CMD Up. |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, true)); |
processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- // R CMD Down. |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); |
- stub.ExpectOneKeyEvent(kRightCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(3, processor.NumberOfPressedKeys()); |
- // L CMD Up. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); |
- stub.ExpectTwoKeyEvents('C', false, kLeftCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbLeftCmd, false)); |
} |
// Test press C key before command key. |
TEST(MacKeyEventProcessorTest, BeforeCmdKey) { |
- FakeInputStub stub; |
+ MockInputStub stub; |
MacKeyEventProcessor processor(&stub); |
- // Press C before command key. |
- processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, true)); |
- stub.ExpectOneKeyEvent(kRightCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kRightCmd, false)); |
- stub.ExpectTwoKeyEvents('C', false, kRightCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent('C', false)); |
- stub.ExpectOneKeyEvent('C', false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
-} |
+ { |
+ InSequence s; |
-// Test sending multiple keydowns. |
-TEST(MacKeyEventProcessorTest, MultipleKeydowns) { |
- FakeInputStub stub; |
- MacKeyEventProcessor processor(&stub); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, true))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent(kUsbRightCmd, false))); |
+ EXPECT_CALL(stub, InjectKeyEvent(EqualsUsbEvent('C', false))); |
+ } |
- // 2 CMD Downs. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); |
- stub.ExpectOneKeyEvent(kLeftCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, true)); |
- stub.ExpectOneKeyEvent(kLeftCmd, true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(1, processor.NumberOfPressedKeys()); |
- // C Down. |
+ // Press C before command key. |
processor.InjectKeyEvent(MakeKeyEvent('C', true)); |
- stub.ExpectOneKeyEvent('C', true); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(2, processor.NumberOfPressedKeys()); |
- // CMD Up. |
- processor.InjectKeyEvent(MakeKeyEvent(kLeftCmd, false)); |
- stub.ExpectTwoKeyEvents('C', false, kLeftCmd, false); |
- stub.ClearKeyEvents(); |
- EXPECT_EQ(0, processor.NumberOfPressedKeys()); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, true)); |
+ processor.InjectKeyEvent(MakeKeyEvent(kUsbRightCmd, false)); |
+ processor.InjectKeyEvent(MakeKeyEvent('C', false)); |
} |
} // namespace remoting |