From c42f0a618271b845cda3ba179f8b7831d2aaca39 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Tue, 3 Jul 2018 14:38:46 +0200 Subject: Quick tests: remember positions of stationary points MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need Items to receive accurate positions for stationary touch points: that is, the last-known position from the previous touch event. (And we hope that all actual touch-capable platforms also send proper QPA events with correct positions for stationary points. We assert that it's a bug if they don't.) As explained in qtbase 7cef4b6463fdb73ff602ade64b222333dd23e46c, it's OK to retain a copy of a QTest::QTouchEventSequence for this purpose, so that the QMap previousPoints will not be discarded between events. Change-Id: I12a04323b0d82dc325348c0fa3e067a4b63f57e9 Reviewed-by: Jan Arve Sæther --- tests/auto/quick/touchmouse/tst_touchmouse.cpp | 50 +++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) (limited to 'tests/auto/quick/touchmouse') diff --git a/tests/auto/quick/touchmouse/tst_touchmouse.cpp b/tests/auto/quick/touchmouse/tst_touchmouse.cpp index a69cd5bc34..2fc56c2ad8 100644 --- a/tests/auto/quick/touchmouse/tst_touchmouse.cpp +++ b/tests/auto/quick/touchmouse/tst_touchmouse.cpp @@ -824,6 +824,7 @@ void tst_TouchMouse::buttonOnTouch() EventItem *eventItem4 = window->rootObject()->findChild("eventItem4"); QVERIFY(eventItem4); + QTest::QTouchEventSequence touchSeq = QTest::touchEvent(window.data(), device, false); // Test the common case of a mouse area on top of pinch eventItem1->setAcceptedMouseButtons(Qt::LeftButton); @@ -835,9 +836,9 @@ void tst_TouchMouse::buttonOnTouch() // Normal touch click QPoint p1 = QPoint(10, 110); - QTest::touchEvent(window.data(), device).press(0, p1, window.data()); + touchSeq.press(0, p1, window.data()).commit(); QQuickTouchUtils::flush(window.data()); - QTest::touchEvent(window.data(), device).release(0, p1, window.data()); + touchSeq.release(0, p1, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(eventItem1->eventList.size(), 5); QCOMPARE(eventItem1->eventList.at(0).type, QEvent::TouchBegin); @@ -860,9 +861,9 @@ void tst_TouchMouse::buttonOnTouch() QPoint p2 = QPoint(60, 10); // Start the events after each other - QTest::touchEvent(window.data(), device).press(0, p1, window.data()); + touchSeq.press(0, p1, window.data()).commit(); QQuickTouchUtils::flush(window.data()); - QTest::touchEvent(window.data(), device).stationary(0).press(1, p2, window.data()); + touchSeq.stationary(0).press(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(button1->scale(), 1.0); @@ -870,24 +871,24 @@ void tst_TouchMouse::buttonOnTouch() // This event seems to be discarded, let's ignore it for now until someone digs into pincharea p1 -= QPoint(10, 0); p2 += QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p1, window.data()).move(1, p2, window.data()); + touchSeq.move(0, p1, window.data()).move(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); p1 -= QPoint(10, 0); p2 += QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p1, window.data()).move(1, p2, window.data()); + touchSeq.move(0, p1, window.data()).move(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); // QCOMPARE(button1->scale(), 1.5); qDebug() << "Button scale: " << button1->scale(); p1 -= QPoint(10, 0); p2 += QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p1, window.data()).move(1, p2, window.data()); + touchSeq.move(0, p1, window.data()).move(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); // QCOMPARE(button1->scale(), 2.0); qDebug() << "Button scale: " << button1->scale(); - QTest::touchEvent(window.data(), device).release(0, p1, window.data()).release(1, p2, window.data()); + touchSeq.release(0, p1, window.data()).release(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); // QVERIFY(eventItem1->eventList.isEmpty()); // QCOMPARE(button1->scale(), 2.0); @@ -901,7 +902,7 @@ void tst_TouchMouse::buttonOnTouch() button1->setScale(1.0); p1 = QPoint(40, 110); p2 = QPoint(60, 110); - QTest::touchEvent(window.data(), device).press(0, p1, window.data()).press(1, p2, window.data()); + touchSeq.press(0, p1, window.data()).press(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(button1->scale(), 1.0); QCOMPARE(eventItem1->eventList.count(), 2); @@ -911,24 +912,24 @@ void tst_TouchMouse::buttonOnTouch() // This event seems to be discarded, let's ignore it for now until someone digs into pincharea p1 -= QPoint(10, 0); p2 += QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p1, window.data()).move(1, p2, window.data()); + touchSeq.move(0, p1, window.data()).move(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); p1 -= QPoint(10, 0); p2 += QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p1, window.data()).move(1, p2, window.data()); + touchSeq.move(0, p1, window.data()).move(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); //QCOMPARE(button1->scale(), 1.5); qDebug() << button1->scale(); p1 -= QPoint(10, 0); p2 += QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p1, window.data()).move(1, p2, window.data()); + touchSeq.move(0, p1, window.data()).move(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); qDebug() << button1->scale(); //QCOMPARE(button1->scale(), 2.0); - QTest::touchEvent(window.data(), device).release(0, p1, window.data()).release(1, p2, window.data()); + touchSeq.release(0, p1, window.data()).release(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); // QCOMPARE(eventItem1->eventList.size(), 99); qDebug() << button1->scale(); @@ -1334,6 +1335,7 @@ void tst_TouchMouse::touchPointDeliveryOrder() QPoint pLeftMiddle = QPoint(200, 100); QPoint pRightMiddle = QPoint(350, 100); + QTest::QTouchEventSequence touchSeq = QTest::touchEvent(window.data(), device, false); QVector events; EventItem *background = window->rootObject()->findChild("background"); @@ -1349,7 +1351,7 @@ void tst_TouchMouse::touchPointDeliveryOrder() connect(middle, &EventItem::onTouchEvent, [&events](QQuickItem* receiver){ events.append(receiver); }); connect(right, &EventItem::onTouchEvent, [&events](QQuickItem* receiver){ events.append(receiver); }); - QTest::touchEvent(window.data(), device).press(0, pLeft, window.data()); + touchSeq.press(0, pLeft, window.data()).commit(); QQuickTouchUtils::flush(window.data()); // Touch on left, then background @@ -1359,7 +1361,7 @@ void tst_TouchMouse::touchPointDeliveryOrder() events.clear(); // New press events are deliverd first, the stationary point was not accepted, thus it doesn't get delivered - QTest::touchEvent(window.data(), device).stationary(0).press(1, pRightMiddle, window.data()); + touchSeq.stationary(0).press(1, pRightMiddle, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(events.size(), 3); QCOMPARE(events.at(0), middle); @@ -1367,49 +1369,49 @@ void tst_TouchMouse::touchPointDeliveryOrder() QCOMPARE(events.at(2), background); events.clear(); - QTest::touchEvent(window.data(), device).release(0, pLeft, window.data()).release(1, pRightMiddle, window.data()); + touchSeq.release(0, pLeft, window.data()).release(1, pRightMiddle, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(events.size(), 0); // no accepted events // Two presses, the first point should come first - QTest::touchEvent(window.data(), device).press(0, pLeft, window.data()).press(1, pRight, window.data()); + touchSeq.press(0, pLeft, window.data()).press(1, pRight, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(events.size(), 3); QCOMPARE(events.at(0), left); QCOMPARE(events.at(1), right); QCOMPARE(events.at(2), background); - QTest::touchEvent(window.data(), device).release(0, pLeft, window.data()).release(1, pRight, window.data()); + touchSeq.release(0, pLeft, window.data()).release(1, pRight, window.data()).commit(); events.clear(); // Again, pressing right first - QTest::touchEvent(window.data(), device).press(0, pRight, window.data()).press(1, pLeft, window.data()); + touchSeq.press(0, pRight, window.data()).press(1, pLeft, window.data()).commit(); QQuickTouchUtils::flush(window.data()); QCOMPARE(events.size(), 3); QCOMPARE(events.at(0), right); QCOMPARE(events.at(1), left); QCOMPARE(events.at(2), background); - QTest::touchEvent(window.data(), device).release(0, pRight, window.data()).release(1, pLeft, window.data()); + touchSeq.release(0, pRight, window.data()).release(1, pLeft, window.data()).commit(); events.clear(); // Two presses, both hitting the middle item on top, then branching left and right, then bottom // Each target should be offered the events exactly once, middle first, left must come before right (id 0) - QTest::touchEvent(window.data(), device).press(0, pLeftMiddle, window.data()).press(1, pRightMiddle, window.data()); + touchSeq.press(0, pLeftMiddle, window.data()).press(1, pRightMiddle, window.data()).commit(); QCOMPARE(events.size(), 4); QCOMPARE(events.at(0), middle); QCOMPARE(events.at(1), left); QCOMPARE(events.at(2), right); QCOMPARE(events.at(3), background); - QTest::touchEvent(window.data(), device).release(0, pLeftMiddle, window.data()).release(1, pRightMiddle, window.data()); + touchSeq.release(0, pLeftMiddle, window.data()).release(1, pRightMiddle, window.data()).commit(); events.clear(); - QTest::touchEvent(window.data(), device).press(0, pRightMiddle, window.data()).press(1, pLeftMiddle, window.data()); + touchSeq.press(0, pRightMiddle, window.data()).press(1, pLeftMiddle, window.data()).commit(); qDebug() << events; QCOMPARE(events.size(), 4); QCOMPARE(events.at(0), middle); QCOMPARE(events.at(1), right); QCOMPARE(events.at(2), left); QCOMPARE(events.at(3), background); - QTest::touchEvent(window.data(), device).release(0, pRightMiddle, window.data()).release(1, pLeftMiddle, window.data()); + touchSeq.release(0, pRightMiddle, window.data()).release(1, pLeftMiddle, window.data()).commit(); } void tst_TouchMouse::hoverEnabled() -- cgit v1.2.3