1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/common/input/touch_event_stream_validator.h"
7 #include "content/common/input/synthetic_web_input_event_builders.h"
8 #include "content/common/input/web_touch_event_traits.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 using blink::WebInputEvent
;
12 using blink::WebTouchEvent
;
13 using blink::WebTouchPoint
;
17 TEST(TouchEventStreamValidator
, ValidTouchStream
) {
18 TouchEventStreamValidator validator
;
19 SyntheticWebTouchEvent event
;
20 std::string error_msg
;
22 event
.PressPoint(0, 1);
23 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
24 EXPECT_TRUE(error_msg
.empty());
27 event
.PressPoint(1, 0);
28 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
29 EXPECT_TRUE(error_msg
.empty());
32 event
.MovePoint(1, 1, 1);
33 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
34 EXPECT_TRUE(error_msg
.empty());
37 event
.ReleasePoint(1);
38 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
39 EXPECT_TRUE(error_msg
.empty());
42 event
.MovePoint(0, -1, 0);
43 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
44 EXPECT_TRUE(error_msg
.empty());
48 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
49 EXPECT_TRUE(error_msg
.empty());
52 event
.PressPoint(-1, -1);
53 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
54 EXPECT_TRUE(error_msg
.empty());
57 TEST(TouchEventStreamValidator
, ResetOnNewTouchStream
) {
58 TouchEventStreamValidator validator
;
59 SyntheticWebTouchEvent event
;
60 std::string error_msg
;
62 event
.PressPoint(0, 1);
63 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
64 EXPECT_TRUE(error_msg
.empty());
69 event
.PressPoint(1, 0);
70 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
71 EXPECT_TRUE(error_msg
.empty());
74 TEST(TouchEventStreamValidator
, MissedTouchStart
) {
75 TouchEventStreamValidator validator
;
76 SyntheticWebTouchEvent event
;
77 std::string error_msg
;
79 event
.PressPoint(0, 1);
80 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
81 EXPECT_TRUE(error_msg
.empty());
83 event
.PressPoint(1, 0);
85 event
.PressPoint(1, 1);
86 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
87 EXPECT_FALSE(error_msg
.empty());
90 TEST(TouchEventStreamValidator
, MissedTouchEnd
) {
91 TouchEventStreamValidator validator
;
92 SyntheticWebTouchEvent event
;
93 std::string error_msg
;
95 event
.PressPoint(0, 1);
96 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
97 EXPECT_TRUE(error_msg
.empty());
100 event
.PressPoint(0, 1);
101 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
102 EXPECT_TRUE(error_msg
.empty());
105 event
.ReleasePoint(1);
107 event
.PressPoint(1, 1);
108 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
109 EXPECT_FALSE(error_msg
.empty());
112 TEST(TouchEventStreamValidator
, EmptyEvent
) {
113 TouchEventStreamValidator validator
;
115 std::string error_msg
;
117 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
118 EXPECT_FALSE(error_msg
.empty());
121 TEST(TouchEventStreamValidator
, InvalidEventType
) {
122 TouchEventStreamValidator validator
;
124 std::string error_msg
;
126 event
.type
= WebInputEvent::GestureScrollBegin
;
127 event
.touchesLength
= 1;
128 event
.touches
[0].state
= WebTouchPoint::StatePressed
;
130 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
131 EXPECT_FALSE(error_msg
.empty());
134 TEST(TouchEventStreamValidator
, InvalidPointStates
) {
135 TouchEventStreamValidator validator
;
136 std::string error_msg
;
138 WebInputEvent::Type kTouchTypes
[4] = {
139 WebInputEvent::TouchStart
, WebInputEvent::TouchMove
,
140 WebInputEvent::TouchEnd
, WebInputEvent::TouchCancel
,
143 WebTouchPoint::State kValidTouchPointStatesForType
[4] = {
144 WebTouchPoint::StatePressed
, WebTouchPoint::StateMoved
,
145 WebTouchPoint::StateReleased
, WebTouchPoint::StateCancelled
,
148 SyntheticWebTouchEvent start
;
149 start
.PressPoint(0, 0);
150 for (size_t i
= 0; i
< 4; ++i
) {
151 // Always start with a touchstart to reset the stream validation.
152 EXPECT_TRUE(validator
.Validate(start
, &error_msg
));
153 EXPECT_TRUE(error_msg
.empty());
156 event
.touchesLength
= 1;
157 event
.type
= kTouchTypes
[i
];
158 for (size_t j
= WebTouchPoint::StateUndefined
;
159 j
<= WebTouchPoint::StateCancelled
;
161 event
.touches
[0].state
= static_cast<WebTouchPoint::State
>(j
);
162 if (event
.touches
[0].state
== kValidTouchPointStatesForType
[i
]) {
163 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
164 EXPECT_TRUE(error_msg
.empty());
166 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
167 EXPECT_FALSE(error_msg
.empty());
173 } // namespace content