diff options
author | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-18 07:14:48 +0000 |
---|---|---|
committer | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-18 07:14:48 +0000 |
commit | 0fe2764130ba3643771faba0637bd9db633c80a0 (patch) | |
tree | 74b0a8c14034257da1311967ccdd5375561f19f6 /remoting | |
parent | 01483ce777d186bb5d0b477a7f87f974aa2e5a03 (diff) | |
download | chromium_src-0fe2764130ba3643771faba0637bd9db633c80a0.zip chromium_src-0fe2764130ba3643771faba0637bd9db633c80a0.tar.gz chromium_src-0fe2764130ba3643771faba0637bd9db633c80a0.tar.bz2 |
Add simple unit-tests for KeyEventTracker.
BUG=93552
Review URL: http://codereview.chromium.org/9097009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118073 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting')
-rw-r--r-- | remoting/protocol/key_event_tracker_unittest.cc | 84 | ||||
-rw-r--r-- | remoting/remoting.gyp | 1 |
2 files changed, 85 insertions, 0 deletions
diff --git a/remoting/protocol/key_event_tracker_unittest.cc b/remoting/protocol/key_event_tracker_unittest.cc new file mode 100644 index 0000000..358057d --- /dev/null +++ b/remoting/protocol/key_event_tracker_unittest.cc @@ -0,0 +1,84 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "remoting/protocol/key_event_tracker.h" + +#include "remoting/proto/event.pb.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::_; +using ::testing::ExpectationSet; +using ::testing::InSequence; + +namespace remoting { + +MATCHER_P2(EqualsKeyEvent, keycode, pressed, "") { + return arg.keycode() == keycode && arg.pressed() == pressed; +} + +class MockInputStub : public protocol::InputStub { + public: + MockInputStub() {} + + MOCK_METHOD1(InjectKeyEvent, void(const protocol::KeyEvent&)); + MOCK_METHOD1(InjectMouseEvent, void(const protocol::MouseEvent&)); + private: + DISALLOW_COPY_AND_ASSIGN(MockInputStub); +}; + +static protocol::KeyEvent KeyEvent(int keycode, bool pressed) { + protocol::KeyEvent event; + event.set_keycode(keycode); + event.set_pressed(pressed); + return event; +} + +static void PressAndRelease(protocol::InputStub* input_stub, int keycode) { + input_stub->InjectKeyEvent(KeyEvent(keycode, true)); + input_stub->InjectKeyEvent(KeyEvent(keycode, false)); +} + +// Verify that keys that were pressed and released aren't re-released. +TEST(KeyEventTrackerTest, NothingToRelease) { + MockInputStub mock_stub; + protocol::KeyEventTracker key_tracker(&mock_stub); + { + InSequence s; + + EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(1, true))); + EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(1, false))); + EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(2, true))); + EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(2, false))); + } + PressAndRelease(&key_tracker, 1); + PressAndRelease(&key_tracker, 2); +} + +// Verify that keys that were left pressed get released. +TEST(KeyEventTrackerTest, ReleaseAllKeys) { + MockInputStub mock_stub; + protocol::KeyEventTracker key_tracker(&mock_stub); + ExpectationSet injects; + + { + InSequence s; + + injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(3, true))); + injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(1, true))); + injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(1, false))); + injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(2, true))); + injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(2, false))); + } + + EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsKeyEvent(3, false))) + .After(injects); + + key_tracker.InjectKeyEvent(KeyEvent(3, true)); + PressAndRelease(&key_tracker, 1); + PressAndRelease(&key_tracker, 2); + key_tracker.ReleaseAllKeys(); +} + +} // namespace remoting diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp index f9c6142..b3d9694 100644 --- a/remoting/remoting.gyp +++ b/remoting/remoting.gyp @@ -946,6 +946,7 @@ 'protocol/fake_session.h', 'protocol/jingle_messages_unittest.cc', 'protocol/jingle_session_unittest.cc', + 'protocol/key_event_tracker_unittest.cc', 'protocol/message_decoder_unittest.cc', 'protocol/message_reader_unittest.cc', 'protocol/pepper_session_unittest.cc', |