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/gesture_event_stream_validator.h"
7 #include "content/common/input/synthetic_web_input_event_builders.h"
8 #include "testing/gtest/include/gtest/gtest.h"
10 using blink::WebInputEvent
;
11 using blink::WebGestureEvent
;
16 const blink::WebGestureDevice kDefaultGestureDevice
=
17 blink::WebGestureDeviceTouchscreen
;
19 blink::WebGestureEvent
Build(WebInputEvent::Type type
) {
20 blink::WebGestureEvent event
=
21 SyntheticWebGestureEventBuilder::Build(type
, kDefaultGestureDevice
);
22 // Default to providing a (valid) non-zero fling velocity.
23 if (type
== WebInputEvent::GestureFlingStart
)
24 event
.data
.flingStart
.velocityX
= 5;
30 TEST(GestureEventStreamValidator
, ValidScroll
) {
31 GestureEventStreamValidator validator
;
32 std::string error_msg
;
33 WebGestureEvent event
;
35 event
= Build(WebInputEvent::GestureScrollBegin
);
36 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
37 EXPECT_TRUE(error_msg
.empty());
39 event
= Build(WebInputEvent::GestureScrollUpdate
);
40 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
41 EXPECT_TRUE(error_msg
.empty());
43 event
= Build(WebInputEvent::GestureScrollEnd
);
44 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
45 EXPECT_TRUE(error_msg
.empty());
48 TEST(GestureEventStreamValidator
, InvalidScroll
) {
49 GestureEventStreamValidator validator
;
50 std::string error_msg
;
51 WebGestureEvent event
;
53 // No preceding ScrollBegin.
54 event
= Build(WebInputEvent::GestureScrollUpdate
);
55 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
56 EXPECT_FALSE(error_msg
.empty());
58 // No preceding ScrollBegin.
59 event
= Build(WebInputEvent::GestureScrollEnd
);
60 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
61 EXPECT_FALSE(error_msg
.empty());
63 event
= Build(WebInputEvent::GestureScrollBegin
);
64 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
65 EXPECT_TRUE(error_msg
.empty());
68 event
= Build(WebInputEvent::GestureScrollBegin
);
69 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
70 EXPECT_FALSE(error_msg
.empty());
72 event
= Build(WebInputEvent::GestureScrollEnd
);
73 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
74 EXPECT_TRUE(error_msg
.empty());
76 // Scroll already ended.
77 event
= Build(WebInputEvent::GestureScrollEnd
);
78 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
79 EXPECT_FALSE(error_msg
.empty());
82 TEST(GestureEventStreamValidator
, ValidFling
) {
83 GestureEventStreamValidator validator
;
84 std::string error_msg
;
85 WebGestureEvent event
;
87 event
= Build(WebInputEvent::GestureScrollBegin
);
88 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
89 EXPECT_TRUE(error_msg
.empty());
91 event
= Build(WebInputEvent::GestureFlingStart
);
92 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
93 EXPECT_TRUE(error_msg
.empty());
96 TEST(GestureEventStreamValidator
, InvalidFling
) {
97 GestureEventStreamValidator validator
;
98 std::string error_msg
;
99 WebGestureEvent event
;
101 // No preceding ScrollBegin.
102 event
= Build(WebInputEvent::GestureFlingStart
);
103 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
104 EXPECT_FALSE(error_msg
.empty());
107 event
= Build(WebInputEvent::GestureScrollBegin
);
108 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
109 EXPECT_TRUE(error_msg
.empty());
111 event
= Build(WebInputEvent::GestureFlingStart
);
112 event
.data
.flingStart
.velocityX
= 0;
113 event
.data
.flingStart
.velocityY
= 0;
114 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
115 EXPECT_FALSE(error_msg
.empty());
118 TEST(GestureEventStreamValidator
, ValidPinch
) {
119 GestureEventStreamValidator validator
;
120 std::string error_msg
;
121 WebGestureEvent event
;
123 event
= Build(WebInputEvent::GesturePinchBegin
);
124 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
125 EXPECT_TRUE(error_msg
.empty());
127 event
= Build(WebInputEvent::GesturePinchUpdate
);
128 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
129 EXPECT_TRUE(error_msg
.empty());
131 event
= Build(WebInputEvent::GesturePinchEnd
);
132 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
133 EXPECT_TRUE(error_msg
.empty());
136 TEST(GestureEventStreamValidator
, InvalidPinch
) {
137 GestureEventStreamValidator validator
;
138 std::string error_msg
;
139 WebGestureEvent event
;
141 // No preceding PinchBegin.
142 event
= Build(WebInputEvent::GesturePinchUpdate
);
143 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
144 EXPECT_FALSE(error_msg
.empty());
146 event
= Build(WebInputEvent::GesturePinchBegin
);
147 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
148 EXPECT_TRUE(error_msg
.empty());
150 // ScrollBegin while pinching.
151 event
= Build(WebInputEvent::GestureScrollBegin
);
152 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
153 EXPECT_FALSE(error_msg
.empty());
155 // ScrollEnd while pinching.
156 event
= Build(WebInputEvent::GestureScrollEnd
);
157 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
158 EXPECT_FALSE(error_msg
.empty());
160 // Pinch already begun.
161 event
= Build(WebInputEvent::GesturePinchBegin
);
162 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
163 EXPECT_FALSE(error_msg
.empty());
165 event
= Build(WebInputEvent::GesturePinchEnd
);
166 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
167 EXPECT_TRUE(error_msg
.empty());
169 // Pinch already ended.
170 event
= Build(WebInputEvent::GesturePinchEnd
);
171 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
172 EXPECT_FALSE(error_msg
.empty());
175 TEST(GestureEventStreamValidator
, ValidTap
) {
176 GestureEventStreamValidator validator
;
177 std::string error_msg
;
178 WebGestureEvent event
;
180 event
= Build(WebInputEvent::GestureTapDown
);
181 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
182 EXPECT_TRUE(error_msg
.empty());
184 event
= Build(WebInputEvent::GestureTapCancel
);
185 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
186 EXPECT_TRUE(error_msg
.empty());
188 event
= Build(WebInputEvent::GestureTapDown
);
189 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
190 EXPECT_TRUE(error_msg
.empty());
192 event
= Build(WebInputEvent::GestureTapUnconfirmed
);
193 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
194 EXPECT_TRUE(error_msg
.empty());
196 event
= Build(WebInputEvent::GestureTapCancel
);
197 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
198 EXPECT_TRUE(error_msg
.empty());
200 event
= Build(WebInputEvent::GestureTapDown
);
201 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
202 EXPECT_TRUE(error_msg
.empty());
204 event
= Build(WebInputEvent::GestureTap
);
205 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
206 EXPECT_TRUE(error_msg
.empty());
208 // DoubleTap does not require a TapDown (unlike Tap, TapUnconfirmed and
210 event
= Build(WebInputEvent::GestureDoubleTap
);
211 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
212 EXPECT_TRUE(error_msg
.empty());
215 TEST(GestureEventStreamValidator
, InvalidTap
) {
216 GestureEventStreamValidator validator
;
217 std::string error_msg
;
218 WebGestureEvent event
;
220 // No preceding TapDown.
221 event
= Build(WebInputEvent::GestureTapUnconfirmed
);
222 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
223 EXPECT_FALSE(error_msg
.empty());
225 event
= Build(WebInputEvent::GestureTapCancel
);
226 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
227 EXPECT_FALSE(error_msg
.empty());
229 event
= Build(WebInputEvent::GestureTap
);
230 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
231 EXPECT_FALSE(error_msg
.empty());
233 // TapDown already terminated.
234 event
= Build(WebInputEvent::GestureTapDown
);
235 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
236 EXPECT_TRUE(error_msg
.empty());
238 event
= Build(WebInputEvent::GestureDoubleTap
);
239 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
240 EXPECT_TRUE(error_msg
.empty());
242 event
= Build(WebInputEvent::GestureTapCancel
);
243 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
244 EXPECT_FALSE(error_msg
.empty());
246 // TapDown already terminated.
247 event
= Build(WebInputEvent::GestureTapDown
);
248 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
249 EXPECT_TRUE(error_msg
.empty());
251 event
= Build(WebInputEvent::GestureTap
);
252 EXPECT_TRUE(validator
.Validate(event
, &error_msg
));
253 EXPECT_TRUE(error_msg
.empty());
255 event
= Build(WebInputEvent::GestureTapCancel
);
256 EXPECT_FALSE(validator
.Validate(event
, &error_msg
));
257 EXPECT_FALSE(error_msg
.empty());
260 } // namespace content