| Index: content/common/input/touch_event_stream_validator_unittest.cc
|
| diff --git a/content/common/input/touch_event_stream_validator_unittest.cc b/content/common/input/touch_event_stream_validator_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5e3b767fb1d09364de01342fc5736bc0e349ed71
|
| --- /dev/null
|
| +++ b/content/common/input/touch_event_stream_validator_unittest.cc
|
| @@ -0,0 +1,173 @@
|
| +// Copyright 2014 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 "content/common/input/touch_event_stream_validator.h"
|
| +
|
| +#include "content/common/input/synthetic_web_input_event_builders.h"
|
| +#include "content/common/input/web_touch_event_traits.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using blink::WebInputEvent;
|
| +using blink::WebTouchEvent;
|
| +using blink::WebTouchPoint;
|
| +
|
| +namespace content {
|
| +
|
| +TEST(TouchEventStreamValidator, ValidTouchStream) {
|
| + TouchEventStreamValidator validator;
|
| + SyntheticWebTouchEvent event;
|
| + std::string error_msg;
|
| +
|
| + event.PressPoint(0, 1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.PressPoint(1, 0);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.MovePoint(1, 1, 1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.ReleasePoint(1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.MovePoint(0, -1, 0);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.CancelPoint(0);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.PressPoint(-1, -1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| +}
|
| +
|
| +TEST(TouchEventStreamValidator, ResetOnNewTouchStream) {
|
| + TouchEventStreamValidator validator;
|
| + SyntheticWebTouchEvent event;
|
| + std::string error_msg;
|
| +
|
| + event.PressPoint(0, 1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.CancelPoint(0);
|
| + event.ResetPoints();
|
| + event.PressPoint(1, 0);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| +}
|
| +
|
| +TEST(TouchEventStreamValidator, MissedTouchStart) {
|
| + TouchEventStreamValidator validator;
|
| + SyntheticWebTouchEvent event;
|
| + std::string error_msg;
|
| +
|
| + event.PressPoint(0, 1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| +
|
| + event.PressPoint(1, 0);
|
| + event.ResetPoints();
|
| + event.PressPoint(1, 1);
|
| + EXPECT_FALSE(validator.Validate(event, &error_msg));
|
| + EXPECT_FALSE(error_msg.empty());
|
| +}
|
| +
|
| +TEST(TouchEventStreamValidator, MissedTouchEnd) {
|
| + TouchEventStreamValidator validator;
|
| + SyntheticWebTouchEvent event;
|
| + std::string error_msg;
|
| +
|
| + event.PressPoint(0, 1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.PressPoint(0, 1);
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + event.ResetPoints();
|
| +
|
| + event.ReleasePoint(1);
|
| + event.ResetPoints();
|
| + event.PressPoint(1, 1);
|
| + EXPECT_FALSE(validator.Validate(event, &error_msg));
|
| + EXPECT_FALSE(error_msg.empty());
|
| +}
|
| +
|
| +TEST(TouchEventStreamValidator, EmptyEvent) {
|
| + TouchEventStreamValidator validator;
|
| + WebTouchEvent event;
|
| + std::string error_msg;
|
| +
|
| + EXPECT_FALSE(validator.Validate(event, &error_msg));
|
| + EXPECT_FALSE(error_msg.empty());
|
| +}
|
| +
|
| +TEST(TouchEventStreamValidator, InvalidEventType) {
|
| + TouchEventStreamValidator validator;
|
| + WebTouchEvent event;
|
| + std::string error_msg;
|
| +
|
| + event.type = WebInputEvent::GestureScrollBegin;
|
| + event.touchesLength = 1;
|
| + event.touches[0].state = WebTouchPoint::StatePressed;
|
| +
|
| + EXPECT_FALSE(validator.Validate(event, &error_msg));
|
| + EXPECT_FALSE(error_msg.empty());
|
| +}
|
| +
|
| +TEST(TouchEventStreamValidator, InvalidPointStates) {
|
| + TouchEventStreamValidator validator;
|
| + std::string error_msg;
|
| +
|
| + WebInputEvent::Type kTouchTypes[4] = {
|
| + WebInputEvent::TouchStart, WebInputEvent::TouchMove,
|
| + WebInputEvent::TouchEnd, WebInputEvent::TouchCancel,
|
| + };
|
| +
|
| + WebTouchPoint::State kValidTouchPointStatesForType[4] = {
|
| + WebTouchPoint::StatePressed, WebTouchPoint::StateMoved,
|
| + WebTouchPoint::StateReleased, WebTouchPoint::StateCancelled,
|
| + };
|
| +
|
| + SyntheticWebTouchEvent start;
|
| + start.PressPoint(0, 0);
|
| + for (size_t i = 0; i < 4; ++i) {
|
| + // Always start with a touchstart to reset the stream validation.
|
| + EXPECT_TRUE(validator.Validate(start, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| +
|
| + WebTouchEvent event;
|
| + event.touchesLength = 1;
|
| + event.type = kTouchTypes[i];
|
| + for (size_t j = WebTouchPoint::StateUndefined;
|
| + j <= WebTouchPoint::StateCancelled;
|
| + ++j) {
|
| + event.touches[0].state = static_cast<WebTouchPoint::State>(j);
|
| + if (event.touches[0].state == kValidTouchPointStatesForType[i]) {
|
| + EXPECT_TRUE(validator.Validate(event, &error_msg));
|
| + EXPECT_TRUE(error_msg.empty());
|
| + } else {
|
| + EXPECT_FALSE(validator.Validate(event, &error_msg));
|
| + EXPECT_FALSE(error_msg.empty());
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|