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 "base/logging.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "content/common/input/synthetic_web_input_event_builders.h"
8 #include "content/renderer/pepper/event_conversion.h"
9 #include "ppapi/shared_impl/ppb_input_event_shared.h"
10 #include "testing/gtest/include/gtest/gtest.h"
14 class EventConversionTest
: public ::testing::Test
{
16 void CompareWebTouchEvents(const blink::WebTouchEvent
& expected
,
17 const blink::WebTouchEvent
& actual
) {
18 EXPECT_EQ(expected
.type
, actual
.type
);
19 ASSERT_EQ(expected
.touchesLength
, actual
.touchesLength
);
20 for (size_t i
= 0; i
< expected
.touchesLength
; ++i
) {
22 for (; j
< actual
.touchesLength
; ++j
) {
23 if (actual
.touches
[j
].id
== expected
.touches
[i
].id
)
26 ASSERT_NE(j
, actual
.touchesLength
);
27 EXPECT_EQ(expected
.touches
[i
].id
, actual
.touches
[j
].id
);
28 EXPECT_EQ(expected
.touches
[i
].state
, actual
.touches
[j
].state
);
29 EXPECT_EQ(expected
.touches
[i
].position
.x
, actual
.touches
[j
].position
.x
);
30 EXPECT_EQ(expected
.touches
[i
].position
.y
, actual
.touches
[j
].position
.y
);
31 EXPECT_EQ(expected
.touches
[i
].radiusX
, actual
.touches
[j
].radiusX
);
32 EXPECT_EQ(expected
.touches
[i
].radiusY
, actual
.touches
[j
].radiusY
);
33 EXPECT_EQ(expected
.touches
[i
].rotationAngle
,
34 actual
.touches
[j
].rotationAngle
);
35 EXPECT_EQ(expected
.touches
[i
].force
, actual
.touches
[j
].force
);
40 TEST_F(EventConversionTest
, TouchStart
) {
41 SyntheticWebTouchEvent touch
;
42 touch
.PressPoint(1.f
, 2.f
);
44 std::vector
<ppapi::InputEventData
> pp_events
;
45 CreateInputEventData(touch
, &pp_events
);
46 ASSERT_EQ(1U, pp_events
.size());
48 const ppapi::InputEventData
& pp_event
= pp_events
[0];
49 ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHSTART
, pp_event
.event_type
);
50 ASSERT_EQ(1U, pp_event
.touches
.size());
51 ASSERT_EQ(1U, pp_event
.changed_touches
.size());
52 ASSERT_EQ(1U, pp_event
.target_touches
.size());
54 scoped_ptr
<blink::WebInputEvent
> event_out(CreateWebInputEvent(pp_event
));
55 const blink::WebTouchEvent
* touch_out
=
56 static_cast<const blink::WebTouchEvent
*>(event_out
.get());
57 ASSERT_TRUE(touch_out
);
58 EXPECT_EQ(touch
.type
, touch_out
->type
);
59 EXPECT_EQ(touch
.touchesLength
, touch_out
->touchesLength
);
60 CompareWebTouchEvents(touch
, *touch_out
);
63 TEST_F(EventConversionTest
, TouchMove
) {
64 SyntheticWebTouchEvent touch
;
65 touch
.PressPoint(1.f
, 2.f
);
67 touch
.PressPoint(3.f
, 4.f
);
69 touch
.MovePoint(1, 5.f
, 6.f
);
71 std::vector
<ppapi::InputEventData
> pp_events
;
72 CreateInputEventData(touch
, &pp_events
);
73 ASSERT_EQ(1U, pp_events
.size());
75 const ppapi::InputEventData
& pp_event
= pp_events
[0];
76 ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHMOVE
, pp_event
.event_type
);
77 ASSERT_EQ(2U, pp_event
.touches
.size());
78 ASSERT_EQ(1U, pp_event
.changed_touches
.size());
79 ASSERT_EQ(2U, pp_event
.target_touches
.size());
81 scoped_ptr
<blink::WebInputEvent
> event_out(CreateWebInputEvent(pp_event
));
82 const blink::WebTouchEvent
* touch_out
=
83 static_cast<const blink::WebTouchEvent
*>(event_out
.get());
84 ASSERT_TRUE(touch_out
);
85 EXPECT_EQ(touch
.type
, touch_out
->type
);
86 EXPECT_EQ(touch
.touchesLength
, touch_out
->touchesLength
);
87 CompareWebTouchEvents(touch
, *touch_out
);
90 TEST_F(EventConversionTest
, TouchEnd
) {
91 SyntheticWebTouchEvent touch
;
92 touch
.PressPoint(1.f
, 2.f
);
94 touch
.PressPoint(3.f
, 4.f
);
96 touch
.ReleasePoint(0);
98 std::vector
<ppapi::InputEventData
> pp_events
;
99 CreateInputEventData(touch
, &pp_events
);
100 ASSERT_EQ(1U, pp_events
.size());
102 const ppapi::InputEventData
& pp_event
= pp_events
[0];
103 ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHEND
, pp_event
.event_type
);
104 ASSERT_EQ(1U, pp_event
.touches
.size());
105 ASSERT_EQ(1U, pp_event
.changed_touches
.size());
106 ASSERT_EQ(2U, pp_event
.target_touches
.size());
108 scoped_ptr
<blink::WebInputEvent
> event_out(CreateWebInputEvent(pp_event
));
109 const blink::WebTouchEvent
* touch_out
=
110 static_cast<const blink::WebTouchEvent
*>(event_out
.get());
111 ASSERT_TRUE(touch_out
);
112 EXPECT_EQ(touch
.type
, touch_out
->type
);
113 ASSERT_EQ(touch
.touchesLength
, touch_out
->touchesLength
);
114 CompareWebTouchEvents(touch
, *touch_out
);
117 TEST_F(EventConversionTest
, TouchCancel
) {
118 SyntheticWebTouchEvent touch
;
119 touch
.PressPoint(1.f
, 2.f
);
121 touch
.PressPoint(3.f
, 4.f
);
123 touch
.CancelPoint(1);
124 touch
.CancelPoint(0);
126 std::vector
<ppapi::InputEventData
> pp_events
;
127 CreateInputEventData(touch
, &pp_events
);
128 ASSERT_EQ(1U, pp_events
.size());
130 const ppapi::InputEventData
& pp_event
= pp_events
[0];
131 ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHCANCEL
, pp_event
.event_type
);
132 ASSERT_EQ(0U, pp_event
.touches
.size());
133 ASSERT_EQ(2U, pp_event
.changed_touches
.size());
134 ASSERT_EQ(2U, pp_event
.target_touches
.size());
136 scoped_ptr
<blink::WebInputEvent
> event_out(CreateWebInputEvent(pp_event
));
137 const blink::WebTouchEvent
* touch_out
=
138 static_cast<const blink::WebTouchEvent
*>(event_out
.get());
139 ASSERT_TRUE(touch_out
);
140 EXPECT_EQ(touch
.type
, touch_out
->type
);
141 EXPECT_EQ(touch
.touchesLength
, touch_out
->touchesLength
);
142 CompareWebTouchEvents(touch
, *touch_out
);
145 } // namespace content