Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Unified Diff: remoting/client/plugin/mac_key_event_processor_unittest.cc

Issue 10387226: [chromoting] Fix sticky c key with cmd on mac using usb keycode (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698