diff options
author | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-30 20:54:37 +0000 |
---|---|---|
committer | wez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-30 20:54:37 +0000 |
commit | f5d62e36705c2a21f3d4fe309a8fb26514c26cbb (patch) | |
tree | 68d57dd83207feb4ca618cccba168d32e257023f /remoting/protocol/mouse_input_filter_unittest.cc | |
parent | da804b66ac50539447c777f809d6829d074137a0 (diff) | |
download | chromium_src-f5d62e36705c2a21f3d4fe309a8fb26514c26cbb.zip chromium_src-f5d62e36705c2a21f3d4fe309a8fb26514c26cbb.tar.gz chromium_src-f5d62e36705c2a21f3d4fe309a8fb26514c26cbb.tar.bz2 |
Clamp events before they are sent to EventExecutors.
* MouseInputFilter is moved from remoting/client/ to remoting/protocol/.
* ClientSession now implements clamping using MouseInputFilter.
* EventExecutors no longer drop out-of-bounds events.
BUG=118511
Review URL: http://codereview.chromium.org/10255007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134594 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/protocol/mouse_input_filter_unittest.cc')
-rw-r--r-- | remoting/protocol/mouse_input_filter_unittest.cc | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/remoting/protocol/mouse_input_filter_unittest.cc b/remoting/protocol/mouse_input_filter_unittest.cc new file mode 100644 index 0000000..376decd --- /dev/null +++ b/remoting/protocol/mouse_input_filter_unittest.cc @@ -0,0 +1,165 @@ +// 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/mouse_input_filter.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" +#include "third_party/skia/include/core/SkPoint.h" + +using ::testing::_; +using ::testing::InSequence; + +namespace remoting { +namespace protocol { + +MATCHER_P2(EqualsMouseMoveEvent, x, y, "") { + return arg.x() == x && arg.y() == y; +} + +static MouseEvent MouseMoveEvent(int x, int y) { + MouseEvent event; + event.set_x(x); + event.set_y(y); + return event; +} + +static void InjectTestSequence(InputStub* input_stub) { + static const SkIPoint input_sequence[] = { + {-5, 10}, {0, 10}, {-1, 10}, {15, 40}, {15, 45}, {15, 39}, {15, 25} + }; + for (unsigned int i=0; i<arraysize(input_sequence); ++i) { + const SkIPoint& point = input_sequence[i]; + input_stub->InjectMouseEvent(MouseMoveEvent(point.x(), point.y())); + } + for (unsigned int i=0; i<arraysize(input_sequence); ++i) { + const SkIPoint& point = input_sequence[i]; + input_stub->InjectMouseEvent(MouseMoveEvent(point.y(), point.x())); + } +} + +// Verify that no events get through if we don't set either dimensions. +TEST(MouseInputFilterTest, BothDimensionsZero) { + MockInputStub mock_stub; + MouseInputFilter mouse_filter(&mock_stub); + + EXPECT_CALL(mock_stub, InjectMouseEvent(_)) + .Times(0); + + InjectTestSequence(&mouse_filter); +} + +// Verify that no events get through if there's no input size. +TEST(MouseInputFilterTest, InputDimensionsZero) { + MockInputStub mock_stub; + MouseInputFilter mouse_filter(&mock_stub); + mouse_filter.set_output_size(SkISize::Make(50,50)); + + EXPECT_CALL(mock_stub, InjectMouseEvent(_)) + .Times(0); + + InjectTestSequence(&mouse_filter); +} + +// Verify that no events get through if there's no output size. +TEST(MouseInputFilterTest, OutputDimensionsZero) { + MockInputStub mock_stub; + MouseInputFilter mouse_filter(&mock_stub); + mouse_filter.set_input_size(SkISize::Make(50,50)); + + EXPECT_CALL(mock_stub, InjectMouseEvent(_)) + .Times(0); + + InjectTestSequence(&mouse_filter); +} + +// Verify that all events get through, clamped to the output. +TEST(MouseInputFilterTest, NoScalingOrClipping) { + MockInputStub mock_stub; + MouseInputFilter mouse_filter(&mock_stub); + mouse_filter.set_output_size(SkISize::Make(40,40)); + mouse_filter.set_input_size(SkISize::Make(40,40)); + + { + InSequence s; + + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(0, 10))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(15, 39))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(15, 25))). + Times(1); + + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(10, 0))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(39, 15))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(25, 15))). + Times(1); + } + + InjectTestSequence(&mouse_filter); +} + +// Verify that we can up-scale with clamping. +TEST(MouseInputFilterTest, UpScalingAndClamping) { + MockInputStub mock_stub; + MouseInputFilter mouse_filter(&mock_stub); + mouse_filter.set_output_size(SkISize::Make(80,80)); + mouse_filter.set_input_size(SkISize::Make(40,40)); + + { + InSequence s; + + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(0, 20))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(30, 79))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(30, 51))). + Times(1); + + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(20, 0))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(79, 30))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(51, 30))). + Times(1); + } + + InjectTestSequence(&mouse_filter); +} + +// Verify that we can down-scale with clamping. +TEST(MouseInputFilterTest, DownScalingAndClamping) { + MockInputStub mock_stub; + MouseInputFilter mouse_filter(&mock_stub); + mouse_filter.set_output_size(SkISize::Make(30,30)); + mouse_filter.set_input_size(SkISize::Make(40,40)); + + { + InSequence s; + + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(0, 7))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(11, 29))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(11, 19))). + Times(1); + + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(7, 0))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(29, 11))). + Times(3); + EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseMoveEvent(19, 11))). + Times(1); + + } + + InjectTestSequence(&mouse_filter); +} + +} // namespace protocol +} // namespace remoting |