11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/input/synthetic_web_input_event_builders.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/renderer/pepper/event_conversion.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ppapi/shared_impl/ppb_input_event_shared.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass EventConversionTest : public ::testing::Test { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CompareWebTouchEvents(const blink::WebTouchEvent& expected, 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebTouchEvent& actual) { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.type, actual.type); 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(expected.touchesLength, actual.touchesLength); 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < expected.touchesLength; ++i) { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t j = 0; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (; j < actual.touchesLength; ++j) { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (actual.touches[j].id == expected.touches[i].id) 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_NE(j, actual.touchesLength); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].id, actual.touches[j].id); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].state, actual.touches[j].state); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].position.x, actual.touches[j].position.x); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].position.y, actual.touches[j].position.y); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].radiusX, actual.touches[j].radiusX); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].radiusY, actual.touches[j].radiusY); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].rotationAngle, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci actual.touches[j].rotationAngle); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(expected.touches[i].force, actual.touches[j].force); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EventConversionTest, TouchStart) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SyntheticWebTouchEvent touch; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(1.f, 2.f); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<ppapi::InputEventData> pp_events; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateInputEventData(touch, &pp_events); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_events.size()); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ppapi::InputEventData& pp_event = pp_events[0]; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHSTART, pp_event.event_type); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_event.touches.size()); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_event.changed_touches.size()); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_event.target_touches.size()); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<blink::WebInputEvent> event_out(CreateWebInputEvent(pp_event)); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebTouchEvent* touch_out = 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<const blink::WebTouchEvent*>(event_out.get()); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(touch_out); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.type, touch_out->type); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.touchesLength, touch_out->touchesLength); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CompareWebTouchEvents(touch, *touch_out); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EventConversionTest, TouchMove) { 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SyntheticWebTouchEvent touch; 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(1.f, 2.f); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ResetPoints(); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(3.f, 4.f); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ResetPoints(); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.MovePoint(1, 5.f, 6.f); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<ppapi::InputEventData> pp_events; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateInputEventData(touch, &pp_events); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_events.size()); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ppapi::InputEventData& pp_event = pp_events[0]; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHMOVE, pp_event.event_type); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(2U, pp_event.touches.size()); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_event.changed_touches.size()); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(2U, pp_event.target_touches.size()); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<blink::WebInputEvent> event_out(CreateWebInputEvent(pp_event)); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebTouchEvent* touch_out = 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<const blink::WebTouchEvent*>(event_out.get()); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(touch_out); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.type, touch_out->type); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.touchesLength, touch_out->touchesLength); 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CompareWebTouchEvents(touch, *touch_out); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EventConversionTest, TouchEnd) { 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SyntheticWebTouchEvent touch; 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(1.f, 2.f); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ResetPoints(); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(3.f, 4.f); 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ResetPoints(); 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ReleasePoint(0); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<ppapi::InputEventData> pp_events; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateInputEventData(touch, &pp_events); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_events.size()); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ppapi::InputEventData& pp_event = pp_events[0]; 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHEND, pp_event.event_type); 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_event.touches.size()); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_event.changed_touches.size()); 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(2U, pp_event.target_touches.size()); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<blink::WebInputEvent> event_out(CreateWebInputEvent(pp_event)); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebTouchEvent* touch_out = 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<const blink::WebTouchEvent*>(event_out.get()); 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(touch_out); 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.type, touch_out->type); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(touch.touchesLength, touch_out->touchesLength); 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CompareWebTouchEvents(touch, *touch_out); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EventConversionTest, TouchCancel) { 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SyntheticWebTouchEvent touch; 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(1.f, 2.f); 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ResetPoints(); 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.PressPoint(3.f, 4.f); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.ResetPoints(); 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.CancelPoint(1); 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.CancelPoint(0); 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<ppapi::InputEventData> pp_events; 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateInputEventData(touch, &pp_events); 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(1U, pp_events.size()); 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ppapi::InputEventData& pp_event = pp_events[0]; 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(PP_INPUTEVENT_TYPE_TOUCHCANCEL, pp_event.event_type); 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(0U, pp_event.touches.size()); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(2U, pp_event.changed_touches.size()); 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(2U, pp_event.target_touches.size()); 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<blink::WebInputEvent> event_out(CreateWebInputEvent(pp_event)); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebTouchEvent* touch_out = 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<const blink::WebTouchEvent*>(event_out.get()); 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(touch_out); 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.type, touch_out->type); 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(touch.touchesLength, touch_out->touchesLength); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CompareWebTouchEvents(touch, *touch_out); 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace content 146