summaryrefslogtreecommitdiffstats
path: root/remoting/protocol/mouse_input_filter_unittest.cc
diff options
context:
space:
mode:
authorwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-30 20:54:37 +0000
committerwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-30 20:54:37 +0000
commitf5d62e36705c2a21f3d4fe309a8fb26514c26cbb (patch)
tree68d57dd83207feb4ca618cccba168d32e257023f /remoting/protocol/mouse_input_filter_unittest.cc
parentda804b66ac50539447c777f809d6829d074137a0 (diff)
downloadchromium_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.cc165
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