OLD | NEW |
| (Empty) |
1 // Copyright 2015 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. | |
4 | |
5 #include "core/events/PointerEventManager.h" | |
6 | |
7 #include "core/frame/FrameView.h" | |
8 #include "core/page/Page.h" | |
9 #include "public/platform/WebPointerProperties.h" | |
10 #include <climits> | |
11 #include <gtest/gtest.h> | |
12 | |
13 namespace blink { | |
14 | |
15 class PointerEventManagerTest : public ::testing::Test { | |
16 protected: | |
17 void SetUp() override; | |
18 PassRefPtrWillBeRawPtr<PointerEvent> createAndCheckTouchCancel( | |
19 WebPointerProperties::PointerType, int rawId, | |
20 int uniqueId, bool isPrimary); | |
21 PassRefPtrWillBeRawPtr<PointerEvent> createAndCheckTouchEvent( | |
22 WebPointerProperties::PointerType, int rawId, | |
23 int uniqueId, bool isPrimary); | |
24 PassRefPtrWillBeRawPtr<PointerEvent> createAndCheckMouseEvent( | |
25 WebPointerProperties::PointerType, int rawId, | |
26 int uniqueId, bool isPrimary); | |
27 | |
28 PointerEventManager m_pointerEventManager; | |
29 unsigned m_expectedMouseId; | |
30 unsigned m_mappedIdStart; | |
31 | |
32 class PlatformTouchPointBuilder : public PlatformTouchPoint { | |
33 public: | |
34 PlatformTouchPointBuilder(WebPointerProperties::PointerType, int); | |
35 }; | |
36 | |
37 class PlatformMouseEventBuilder : public PlatformMouseEvent { | |
38 public: | |
39 PlatformMouseEventBuilder(WebPointerProperties::PointerType, int); | |
40 }; | |
41 }; | |
42 | |
43 void PointerEventManagerTest::SetUp() | |
44 { | |
45 m_expectedMouseId = 1; | |
46 m_mappedIdStart = 2; | |
47 | |
48 } | |
49 | |
50 PointerEventManagerTest::PlatformTouchPointBuilder::PlatformTouchPointBuilder( | |
51 WebPointerProperties::PointerType pointerType, int id) | |
52 { | |
53 m_pointerProperties.id = id; | |
54 m_pointerProperties.pointerType = pointerType; | |
55 m_pointerProperties.force = 1.0; | |
56 } | |
57 | |
58 PointerEventManagerTest::PlatformMouseEventBuilder::PlatformMouseEventBuilder( | |
59 WebPointerProperties::PointerType pointerType, int id) | |
60 { | |
61 m_pointerProperties.pointerType = pointerType; | |
62 m_pointerProperties.id = id; | |
63 } | |
64 | |
65 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManagerTest::createAndCheckTouc
hCancel( | |
66 WebPointerProperties::PointerType pointerType, int rawId, | |
67 int uniqueId, bool isPrimary) | |
68 { | |
69 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventManager.create
PointerCancel( | |
70 PointerEventManagerTest::PlatformTouchPointBuilder(pointerType, rawId)); | |
71 EXPECT_EQ(uniqueId, pointerEvent->pointerId()); | |
72 EXPECT_EQ(isPrimary, pointerEvent->isPrimary()); | |
73 return pointerEvent; | |
74 } | |
75 | |
76 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManagerTest::createAndCheckTouc
hEvent( | |
77 WebPointerProperties::PointerType pointerType, int rawId, | |
78 int uniqueId, bool isPrimary) | |
79 { | |
80 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventManager.create
( | |
81 EventTypeNames::pointerdown, PointerEventManagerTest::PlatformTouchPoint
Builder(pointerType, rawId), PlatformEvent::NoModifiers, 0, 0, 0, 0); | |
82 EXPECT_EQ(uniqueId, pointerEvent->pointerId()); | |
83 EXPECT_EQ(isPrimary, pointerEvent->isPrimary()); | |
84 return pointerEvent; | |
85 } | |
86 | |
87 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManagerTest::createAndCheckMous
eEvent( | |
88 WebPointerProperties::PointerType pointerType, int rawId, int uniqueId, bool
isPrimary) | |
89 { | |
90 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventManager.create
( | |
91 EventTypeNames::pointerenter, PlatformMouseEventBuilder(pointerType, raw
Id), nullptr, nullptr); | |
92 EXPECT_EQ(uniqueId, pointerEvent->pointerId()); | |
93 EXPECT_EQ(isPrimary, pointerEvent->isPrimary()); | |
94 return pointerEvent; | |
95 } | |
96 | |
97 TEST_F(PointerEventManagerTest, MousePointer) | |
98 { | |
99 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(We
bPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true); | |
100 RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckMouseEvent(We
bPointerProperties::PointerType::Mouse, 0, m_expectedMouseId, true); | |
101 | |
102 m_pointerEventManager.remove(pointerEvent1); | |
103 | |
104 createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expe
ctedMouseId, true); | |
105 | |
106 m_pointerEventManager.remove(pointerEvent1); | |
107 m_pointerEventManager.remove(pointerEvent2); | |
108 | |
109 createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 1, m_expe
ctedMouseId, true); | |
110 createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 20, m_exp
ectedMouseId, true); | |
111 } | |
112 | |
113 TEST_F(PointerEventManagerTest, TouchPointerPrimaryRemovedWhileAnotherIsThere) | |
114 { | |
115 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true); | |
116 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mapp
edIdStart+1, false); | |
117 | |
118 m_pointerEventManager.remove(pointerEvent1); | |
119 | |
120 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 2, m_mapp
edIdStart+2, false); | |
121 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mapp
edIdStart+1, false); | |
122 } | |
123 | |
124 TEST_F(PointerEventManagerTest, TouchPointerReleasedAndPressedAgain) | |
125 { | |
126 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true); | |
127 RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 1, m_mappedIdStart+1, false); | |
128 | |
129 m_pointerEventManager.remove(pointerEvent1); | |
130 m_pointerEventManager.remove(pointerEvent2); | |
131 | |
132 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 1, m_mapp
edIdStart+2, true); | |
133 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart+3, false); | |
134 | |
135 m_pointerEventManager.clear(); | |
136 | |
137 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 10, m_map
pedIdStart, true); | |
138 } | |
139 | |
140 TEST_F(PointerEventManagerTest, TouchAndDrag) | |
141 { | |
142 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true); | |
143 RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true); | |
144 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart, true); | |
145 | |
146 m_pointerEventManager.remove(pointerEvent1); | |
147 m_pointerEventManager.remove(pointerEvent2); | |
148 | |
149 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart+1, true); | |
150 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart+1, true); | |
151 | |
152 // Remove an obsolete (i.e. already removed) pointer event which should have
no effect | |
153 m_pointerEventManager.remove(pointerEvent1); | |
154 | |
155 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart+1, true); | |
156 createAndCheckTouchCancel(WebPointerProperties::PointerType::Touch, 0, m_map
pedIdStart+1, true); | |
157 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart+1, true); | |
158 } | |
159 | |
160 TEST_F(PointerEventManagerTest, MouseAndTouchAndPen) | |
161 { | |
162 createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expe
ctedMouseId, true); | |
163 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 0, m_mappedIdStart, true); | |
164 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+1, true); | |
165 | |
166 RefPtrWillBeRawPtr<PointerEvent> pointerEvent2 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 1, m_mappedIdStart+2, false); | |
167 RefPtrWillBeRawPtr<PointerEvent> pointerEvent3 = createAndCheckTouchEvent(We
bPointerProperties::PointerType::Touch, 2, m_mappedIdStart+3, false); | |
168 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+1, true); | |
169 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 47213, m_ma
ppedIdStart+4, false); | |
170 | |
171 m_pointerEventManager.remove(pointerEvent1); | |
172 m_pointerEventManager.remove(pointerEvent2); | |
173 m_pointerEventManager.remove(pointerEvent3); | |
174 | |
175 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 100, m_ma
ppedIdStart+5, true); | |
176 | |
177 m_pointerEventManager.clear(); | |
178 | |
179 createAndCheckMouseEvent(WebPointerProperties::PointerType::Mouse, 0, m_expe
ctedMouseId, true); | |
180 createAndCheckTouchEvent(WebPointerProperties::PointerType::Touch, 0, m_mapp
edIdStart, true); | |
181 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+1, true); | |
182 } | |
183 | |
184 TEST_F(PointerEventManagerTest, PenAsTouchAndMouseEvent) | |
185 { | |
186 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(We
bPointerProperties::PointerType::Pen, 0, m_mappedIdStart, true); | |
187 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 1, m_mapped
IdStart+1, false); | |
188 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 2, m_mapped
IdStart+2, false); | |
189 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart, true); | |
190 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 1, m_mapped
IdStart+1, false); | |
191 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart, true); | |
192 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 1, m_mapped
IdStart+1, false); | |
193 | |
194 m_pointerEventManager.remove(pointerEvent1); | |
195 | |
196 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+3, false); | |
197 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+3, false); | |
198 createAndCheckTouchCancel(WebPointerProperties::PointerType::Pen, 0, m_mappe
dIdStart+3, false); | |
199 | |
200 m_pointerEventManager.clear(); | |
201 | |
202 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 1, m_mapped
IdStart, true); | |
203 createAndCheckTouchEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+1, false); | |
204 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 1, m_mapped
IdStart, true); | |
205 createAndCheckMouseEvent(WebPointerProperties::PointerType::Pen, 0, m_mapped
IdStart+1, false); | |
206 createAndCheckTouchCancel(WebPointerProperties::PointerType::Pen, 1, m_mappe
dIdStart, true); | |
207 createAndCheckTouchCancel(WebPointerProperties::PointerType::Pen, 0, m_mappe
dIdStart+1, false); | |
208 } | |
209 | |
210 | |
211 TEST_F(PointerEventManagerTest, OutOfRange) | |
212 { | |
213 RefPtrWillBeRawPtr<PointerEvent> pointerEvent1 = createAndCheckMouseEvent(We
bPointerProperties::PointerType::Unknown, 0, m_mappedIdStart, true); | |
214 createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 1, m_ma
ppedIdStart+1, false); | |
215 createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 2, m_ma
ppedIdStart+2, false); | |
216 createAndCheckTouchEvent(WebPointerProperties::PointerType::Unknown, 0, m_ma
ppedIdStart, true); | |
217 createAndCheckTouchEvent(WebPointerProperties::PointerType::Unknown, 3, m_ma
ppedIdStart+3, false); | |
218 createAndCheckMouseEvent(WebPointerProperties::PointerType::Unknown, 2, m_ma
ppedIdStart+2, false); | |
219 createAndCheckTouchCancel(WebPointerProperties::PointerType::Unknown, 3, m_m
appedIdStart+3, false); | |
220 | |
221 m_pointerEventManager.remove(pointerEvent1); | |
222 | |
223 createAndCheckTouchEvent(WebPointerProperties::PointerType::Unknown, 0, m_ma
ppedIdStart+4, false); | |
224 createAndCheckTouchEvent(WebPointerProperties::PointerType::Unknown, INT_MAX
, m_mappedIdStart+5, false); | |
225 | |
226 m_pointerEventManager.clear(); | |
227 | |
228 for (int i = 0; i < 100; ++i) { | |
229 createAndCheckMouseEvent(WebPointerProperties::PointerType::Touch, i, m_
mappedIdStart+i, i == 0); | |
230 } | |
231 | |
232 for (int i = 0; i < 100; ++i) { | |
233 createAndCheckTouchEvent(WebPointerProperties::PointerType::Mouse, i, m_
expectedMouseId, true); | |
234 } | |
235 createAndCheckTouchCancel(WebPointerProperties::PointerType::Mouse, 0, m_exp
ectedMouseId, true); | |
236 } | |
237 | |
238 } // namespace blink | |
OLD | NEW |