From: Daniel d'Andrada Date: Wed, 19 Dec 2012 17:29:49 +0000 (-0200) Subject: Test case for tapping on stacked mouse areas X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=5644e4f46c39964c0541d29740a9f741a0830f66;p=konrad%2Fqtdeclarative.git Test case for tapping on stacked mouse areas Shows bug where the bottom mouse area could get a double click event out of a single tap. Change-Id: I4907a1506db2b4ccc5299d698c6e05fd02db963c Reviewed-by: Shawn Rutledge --- diff --git a/tests/auto/quick/touchmouse/data/twoMouseAreas.qml b/tests/auto/quick/touchmouse/data/twoMouseAreas.qml new file mode 100644 index 0000000..a02a6a4 --- /dev/null +++ b/tests/auto/quick/touchmouse/data/twoMouseAreas.qml @@ -0,0 +1,33 @@ +import QtQuick 2.0 + +Rectangle { + width: 320 + height: 480 + color: "#0c6d49" + objectName: "top rect" + + Rectangle { + id: greyRectangle + objectName: "grey rect" + anchors { + left: parent.left + right: parent.right + top: parent.top + } + height: parent.height / 2 + color: "grey" + } + + MouseArea { + objectName: "rear mouseArea" + anchors.fill: parent + } + + MouseArea { + objectName: "front mouseArea" + anchors.fill: greyRectangle + onPressed: { + mouse.accepted = false; + } + } +} diff --git a/tests/auto/quick/touchmouse/tst_touchmouse.cpp b/tests/auto/quick/touchmouse/tst_touchmouse.cpp index 1af70e3..fc4d0c4 100644 --- a/tests/auto/quick/touchmouse/tst_touchmouse.cpp +++ b/tests/auto/quick/touchmouse/tst_touchmouse.cpp @@ -160,6 +160,8 @@ private slots: void flickableOnPinch(); void mouseOnFlickableOnPinch(); + void tapOnDismissiveTopMouseAreaClicksBottomOne(); + private: QQuickView *createView(); QTouchDevice *device; @@ -918,6 +920,53 @@ void tst_TouchMouse::mouseOnFlickableOnPinch() pinchSequence.release(0, p, window).commit(); } +/* + Regression test for the following use case: + You have two mouse areas, on on top of the other. + 1 - You tap the top one. + 2 - That top mouse area receives a mouse press event but doesn't accept it + Expected outcome: + 3 - the bottom mouse area gets clicked (besides press and release mouse events) + Bogus outcome: + 3 - the bottom mouse area gets double clicked. + */ +void tst_TouchMouse::tapOnDismissiveTopMouseAreaClicksBottomOne() +{ + QQuickView *window = createView(); + + window->setSource(testFileUrl("twoMouseAreas.qml")); + window->show(); + window->requestActivate(); + QVERIFY(QTest::qWaitForWindowExposed(window)); + QVERIFY(window->rootObject() != 0); + + QQuickMouseArea *bottomMouseArea = + window->rootObject()->findChild("rear mouseArea"); + + QSignalSpy bottomClickedSpy(bottomMouseArea, SIGNAL(clicked(QQuickMouseEvent*))); + QSignalSpy bottomDoubleClickedSpy(bottomMouseArea, + SIGNAL(doubleClicked(QQuickMouseEvent*))); + + // tap the front mouse area (see qml file) + QPoint p1(20, 20); + QTest::touchEvent(window, device).press(0, p1, window); + QTest::qWait(1); + QTest::touchEvent(window, device).release(0, p1, window); + + QCOMPARE(bottomClickedSpy.count(), 1); + QCOMPARE(bottomDoubleClickedSpy.count(), 0); + QTest::qWait(15); + + QTest::touchEvent(window, device).press(0, p1, window); + QTest::qWait(1); + QTest::touchEvent(window, device).release(0, p1, window); + + QCOMPARE(bottomClickedSpy.count(), 1); + QCOMPARE(bottomDoubleClickedSpy.count(), 1); + + delete window; +} + QTEST_MAIN(tst_TouchMouse) #include "tst_touchmouse.moc"