Index: Source/web/tests/WebInputEventConversionTest.cpp |
diff --git a/Source/web/tests/WebInputEventConversionTest.cpp b/Source/web/tests/WebInputEventConversionTest.cpp |
index 0b5b606da4867be874e61399b8ec5e28e0cf18c0..4ebd7fa8108c1eb03a20a996133662586fa9b539 100644 |
--- a/Source/web/tests/WebInputEventConversionTest.cpp |
+++ b/Source/web/tests/WebInputEventConversionTest.cpp |
@@ -85,13 +85,139 @@ TEST(WebInputEventConversionTest, WebKeyboardEventBuilder) |
EXPECT_FALSE(modifiers & WebInputEvent::IsLeft || modifiers & WebInputEvent::IsRight); |
} |
-TEST(WebInputEventConversionTest, WebTouchEventBuilder) |
+TEST(WebInputEventConversionTest, WebMouseEventBuilder) |
{ |
RefPtrWillBeRawPtr<TouchEvent> event = TouchEvent::create(); |
WebMouseEventBuilder mouse(0, 0, *event); |
EXPECT_EQ(WebInputEvent::Undefined, mouse.type); |
} |
+TEST(WebInputEventConversionTest, WebTouchEventBuilder) |
+{ |
+ const std::string baseURL("http://www.test0.com/"); |
+ const std::string fileName("fixed_layout.html"); |
+ |
+ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_str()), WebString::fromUTF8("fixed_layout.html")); |
+ FrameTestHelpers::WebViewHelper webViewHelper; |
+ WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(baseURL + fileName, true); |
+ int pageWidth = 640; |
+ int pageHeight = 480; |
+ webViewImpl->resize(WebSize(pageWidth, pageHeight)); |
+ webViewImpl->layout(); |
+ |
+ FrameView* view = toLocalFrame(webViewImpl->page()->mainFrame())->view(); |
+ RefPtrWillBeRawPtr<Document> document = toLocalFrame(webViewImpl->page()->mainFrame())->document(); |
+ LocalDOMWindow* domWindow = document->domWindow(); |
+ RenderView* documentRenderView = document->renderView(); |
+ |
+ WebTouchPoint p0, p1; |
+ p0.id = 1; |
+ p1.id = 2; |
+ p0.screenPosition = WebFloatPoint(100.f, 50.f); |
+ p1.screenPosition = WebFloatPoint(150.f, 25.f); |
+ p0.position = WebFloatPoint(10.f, 10.f); |
+ p1.position = WebFloatPoint(5.f, 5.f); |
+ p0.radiusX = p1.radiusY = 10.f; |
+ p0.radiusY = p1.radiusX = 5.f; |
+ p0.rotationAngle = p1.rotationAngle = 1.f; |
+ p0.force = p1.force = 25.f; |
+ |
+ RefPtrWillBeRawPtr<Touch> touch0 = Touch::create(toLocalFrame(webViewImpl->page()->mainFrame()), document.get(), p0.id, p0.screenPosition, p0.position, FloatSize(p0.radiusX, p0.radiusY), p0.rotationAngle, p0.force); |
+ RefPtrWillBeRawPtr<Touch> touch1 = Touch::create(toLocalFrame(webViewImpl->page()->mainFrame()), document.get(), p1.id, p1.screenPosition, p1.position, FloatSize(p1.radiusX, p1.radiusY), p1.rotationAngle, p1.force); |
+ |
+ // Test touchstart. |
+ { |
+ RefPtrWillBeRawPtr<TouchList> touchList = TouchList::create(); |
+ touchList->append(touch0); |
+ RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create(touchList.get(), touchList.get(), touchList.get(), EventTypeNames::touchstart, domWindow, false, false, false, false, false); |
+ |
+ WebTouchEventBuilder webTouchBuilder(view, documentRenderView, *touchEvent); |
+ ASSERT_EQ(1u, webTouchBuilder.touchesLength); |
+ ASSERT_EQ(0u, webTouchBuilder.changedTouchesLength); |
+ EXPECT_EQ(WebInputEvent::TouchStart, webTouchBuilder.type); |
+ EXPECT_EQ(WebTouchPoint::StatePressed, webTouchBuilder.touches[0].state); |
+ EXPECT_FLOAT_EQ(p0.screenPosition.x, webTouchBuilder.touches[0].screenPosition.x); |
+ EXPECT_FLOAT_EQ(p0.screenPosition.y, webTouchBuilder.touches[0].screenPosition.y); |
+ EXPECT_FLOAT_EQ(p0.position.x, webTouchBuilder.touches[0].position.x); |
+ EXPECT_FLOAT_EQ(p0.position.y, webTouchBuilder.touches[0].position.y); |
+ EXPECT_FLOAT_EQ(p0.radiusX, webTouchBuilder.touches[0].radiusX); |
+ EXPECT_FLOAT_EQ(p0.radiusY, webTouchBuilder.touches[0].radiusY); |
+ EXPECT_FLOAT_EQ(p0.rotationAngle, webTouchBuilder.touches[0].rotationAngle); |
+ EXPECT_FLOAT_EQ(p0.force, webTouchBuilder.touches[0].force); |
+ } |
+ |
+ // Test touchmove. |
+ { |
+ RefPtrWillBeRawPtr<TouchList> activeTouchList = TouchList::create(); |
+ RefPtrWillBeRawPtr<TouchList> movedTouchList = TouchList::create(); |
+ activeTouchList->append(touch0); |
+ activeTouchList->append(touch1); |
+ movedTouchList->append(touch0); |
+ RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create(activeTouchList.get(), activeTouchList.get(), movedTouchList.get(), EventTypeNames::touchmove, domWindow, false, false, false, false, false); |
+ |
+ WebTouchEventBuilder webTouchBuilder(view, documentRenderView, *touchEvent); |
+ ASSERT_EQ(2u, webTouchBuilder.touchesLength); |
+ ASSERT_EQ(0u, webTouchBuilder.changedTouchesLength); |
+ EXPECT_EQ(WebInputEvent::TouchMove, webTouchBuilder.type); |
+ EXPECT_EQ(WebTouchPoint::StateMoved, webTouchBuilder.touches[0].state); |
+ EXPECT_EQ(WebTouchPoint::StateStationary, webTouchBuilder.touches[1].state); |
+ EXPECT_EQ(p0.id, webTouchBuilder.touches[0].id); |
+ EXPECT_EQ(p1.id, webTouchBuilder.touches[1].id); |
+ } |
+ |
+ // Test touchend. |
+ { |
+ RefPtrWillBeRawPtr<TouchList> activeTouchList = TouchList::create(); |
+ RefPtrWillBeRawPtr<TouchList> releasedTouchList = TouchList::create(); |
+ activeTouchList->append(touch0); |
+ releasedTouchList->append(touch1); |
+ RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create(activeTouchList.get(), activeTouchList.get(), releasedTouchList.get(), EventTypeNames::touchend, domWindow, false, false, false, false, false); |
+ |
+ WebTouchEventBuilder webTouchBuilder(view, documentRenderView, *touchEvent); |
+ ASSERT_EQ(2u, webTouchBuilder.touchesLength); |
+ ASSERT_EQ(0u, webTouchBuilder.changedTouchesLength); |
+ EXPECT_EQ(WebInputEvent::TouchEnd, webTouchBuilder.type); |
+ EXPECT_EQ(WebTouchPoint::StateReleased, webTouchBuilder.touches[0].state); |
+ EXPECT_EQ(WebTouchPoint::StateStationary, webTouchBuilder.touches[1].state); |
+ EXPECT_EQ(p1.id, webTouchBuilder.touches[0].id); |
+ EXPECT_EQ(p0.id, webTouchBuilder.touches[1].id); |
+ } |
+ |
+ // Test touchcancel. |
+ { |
+ RefPtrWillBeRawPtr<TouchList> activeTouchList = TouchList::create(); |
+ RefPtrWillBeRawPtr<TouchList> cancelledTouchList = TouchList::create(); |
+ cancelledTouchList->append(touch0); |
+ cancelledTouchList->append(touch1); |
+ RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create(activeTouchList.get(), activeTouchList.get(), cancelledTouchList.get(), EventTypeNames::touchcancel, domWindow, false, false, false, false, false); |
+ |
+ WebTouchEventBuilder webTouchBuilder(view, documentRenderView, *touchEvent); |
+ ASSERT_EQ(2u, webTouchBuilder.touchesLength); |
+ ASSERT_EQ(0u, webTouchBuilder.changedTouchesLength); |
+ EXPECT_EQ(WebInputEvent::TouchCancel, webTouchBuilder.type); |
+ EXPECT_EQ(WebTouchPoint::StateCancelled, webTouchBuilder.touches[0].state); |
+ EXPECT_EQ(WebTouchPoint::StateCancelled, webTouchBuilder.touches[1].state); |
+ EXPECT_EQ(p0.id, webTouchBuilder.touches[0].id); |
+ EXPECT_EQ(p1.id, webTouchBuilder.touches[1].id); |
+ } |
+ |
+ // Test max point limit. |
+ { |
+ RefPtrWillBeRawPtr<TouchList> touchList = TouchList::create(); |
+ RefPtrWillBeRawPtr<TouchList> changedTouchList = TouchList::create(); |
+ for (unsigned i = 0; i <= static_cast<unsigned>(WebTouchEvent::touchesLengthCap) * 2; ++i) { |
+ RefPtrWillBeRawPtr<Touch> touch = Touch::create(toLocalFrame(webViewImpl->page()->mainFrame()), document.get(), i, p0.screenPosition, p0.position, FloatSize(p0.radiusX, p0.radiusY), p0.rotationAngle, p0.force); |
+ touchList->append(touch); |
+ changedTouchList->append(touch); |
+ } |
+ RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create(touchList.get(), touchList.get(), touchList.get(), EventTypeNames::touchstart, domWindow, false, false, false, false, false); |
+ |
+ WebTouchEventBuilder webTouchBuilder(view, documentRenderView, *touchEvent); |
+ ASSERT_EQ(static_cast<unsigned>(WebTouchEvent::touchesLengthCap), webTouchBuilder.touchesLength); |
+ ASSERT_EQ(0u, webTouchBuilder.changedTouchesLength); |
+ } |
+} |
+ |
TEST(WebInputEventConversionTest, InputEventsScaling) |
{ |
const std::string baseURL("http://www.test.com/"); |