From 284979ae8a6522ef6454966be69085e618c5c478 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Tue, 3 Jul 2018 13:59:12 +0200 Subject: Input handler tests: remember positions of stationary points MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need Handlers 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. We have done this in other tests, but not consistently; e.g. 468626e99a90d6ac21cb311cde05c658ccb3b781 fixed the PinchArea test. Change-Id: I4dbe69f8dcc4b1cca30fd7ce91d7d2ecf5ec4bc3 Reviewed-by: Jan Arve Sæther --- .../flickableinterop/tst_flickableinterop.cpp | 17 +++++++++-------- .../qquickdraghandler/tst_qquickdraghandler.cpp | 13 +++++++------ .../qquicktaphandler/tst_qquicktaphandler.cpp | 19 ++++++++++--------- 3 files changed, 26 insertions(+), 23 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp b/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp index 187463be2e..73d9b0b464 100644 --- a/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp +++ b/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp @@ -576,6 +576,7 @@ void tst_FlickableInterop::touchDragSliderAndFlickable() QVERIFY(knob); QQuickFlickable *flickable = window->rootObject()->findChild(); QVERIFY(flickable); + QTest::QTouchEventSequence touchSeq = QTest::touchEvent(window, touchDevice, false); // The knob is initially centered over the slider's "groove" qreal initialXOffset = qAbs(knob->mapToScene(knob->clipRect().center()).x() - slider->mapToScene @@ -584,32 +585,32 @@ void tst_FlickableInterop::touchDragSliderAndFlickable() // Drag the slider in the allowed (vertical) direction with one finger QPoint p1 = knob->mapToScene(knob->clipRect().center()).toPoint(); - QTest::touchEvent(window, touchDevice).press(1, p1, window); + touchSeq.press(1, p1, window).commit(); QQuickTouchUtils::flush(window); p1 += QPoint(0, dragThreshold); - QTest::touchEvent(window, touchDevice).move(1, p1, window); + touchSeq.move(1, p1, window).commit(); QQuickTouchUtils::flush(window); p1 += QPoint(0, dragThreshold); - QTest::touchEvent(window, touchDevice).move(1, p1, window); + touchSeq.move(1, p1, window).commit(); QQuickTouchUtils::flush(window); p1 += QPoint(0, dragThreshold); - QTest::touchEvent(window, touchDevice).move(1, p1, window); + touchSeq.move(1, p1, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(slider->property("value").toInt() < 49); QVERIFY(!flickable->isMoving()); // Drag the Flickable with a second finger QPoint p2(300,300); - QTest::touchEvent(window, touchDevice).stationary(1).press(2, p2, window); + touchSeq.stationary(1).press(2, p2, window).commit(); QQuickTouchUtils::flush(window); for (int i = 0; i < 4; ++i) { p1 += QPoint(-10, -10); p2 += QPoint(dragThreshold, 0); - QTest::touchEvent(window, touchDevice).move(1, p1, window).stationary(2); + touchSeq.move(1, p1, window).stationary(2).commit(); QQuickTouchUtils::flush(window); p1 += QPoint(-10, -10); p2 += QPoint(dragThreshold, 0); - QTest::touchEvent(window, touchDevice).stationary(1).move(2, p2, window); + touchSeq.stationary(1).move(2, p2, window).commit(); QQuickTouchUtils::flush(window); qCDebug(lcPointerTests) << "step" << i << ": fingers @" << p1 << p2 << "is Flickable moving yet?" << flickable->isMoving(); } @@ -622,7 +623,7 @@ void tst_FlickableInterop::touchDragSliderAndFlickable() QVERIFY(qAbs(knobSliderXOffset) <= 1); // Release - QTest::touchEvent(window, touchDevice).release(1, p1, window).release(2, p2, window); + touchSeq.release(1, p1, window).release(2, p2, window).commit(); } QTEST_MAIN(tst_FlickableInterop) diff --git a/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp b/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp index 53bb10b7b8..0271924c9b 100644 --- a/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp +++ b/tests/auto/quick/pointerhandlers/qquickdraghandler/tst_qquickdraghandler.cpp @@ -256,8 +256,9 @@ void tst_DragHandler::touchDragMulti() QPointF ball2Center = ball2->clipRect().center(); QPointF scenePressPos2 = ball2->mapToScene(ball2Center); QPoint p2 = scenePressPos2.toPoint(); + QTest::QTouchEventSequence touchSeq = QTest::touchEvent(window, touchDevice, false); - QTest::touchEvent(window, touchDevice).press(1, p1, window).press(2, p2, window); + touchSeq.press(1, p1, window).press(2, p2, window).commit(); QQuickTouchUtils::flush(window); QVERIFY(!dragHandler1->active()); QCOMPARE(dragHandler1->point().position(), ball1Center); @@ -271,12 +272,12 @@ void tst_DragHandler::touchDragMulti() QCOMPARE(dragHandler2->point().scenePressPosition(), scenePressPos2); p1 += QPoint(dragThreshold, 0); p2 += QPoint(0, dragThreshold); - QTest::touchEvent(window, touchDevice).move(1, p1, window).move(2, p2, window); + touchSeq.move(1, p1, window).move(2, p2, window).commit(); QQuickTouchUtils::flush(window); QVERIFY(!dragHandler1->active()); p1 += QPoint(1, 0); p2 += QPoint(0, 1); - QTest::touchEvent(window, touchDevice).move(1, p1, window).move(2, p2, window); + touchSeq.move(1, p1, window).move(2, p2, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(dragHandler1->active()); QVERIFY(dragHandler2->active()); @@ -292,7 +293,7 @@ void tst_DragHandler::touchDragMulti() QCOMPARE(translationChangedSpy2.count(), 0); QCOMPARE(dragHandler2->translation().x(), 0.0); QCOMPARE(dragHandler2->point().sceneGrabPosition(), sceneGrabPos2); - QTest::touchEvent(window, touchDevice).move(1, p1, window).move(2, p2, window); + touchSeq.move(1, p1, window).move(2, p2, window).commit(); QQuickTouchUtils::flush(window); QVERIFY(dragHandler1->active()); QVERIFY(dragHandler2->active()); @@ -310,14 +311,14 @@ void tst_DragHandler::touchDragMulti() QCOMPARE(dragHandler2->point().sceneGrabPosition(), sceneGrabPos2); QCOMPARE(dragHandler2->translation().x(), 0.0); QCOMPARE(dragHandler2->translation().y(), dragThreshold + 20.0); - QTest::touchEvent(window, touchDevice).release(1, p1, window).stationary(2); + touchSeq.release(1, p1, window).stationary(2).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(!dragHandler1->active()); QVERIFY(dragHandler2->active()); QCOMPARE(dragHandler1->point().pressedButtons(), Qt::NoButton); QCOMPARE(ball1->mapToScene(ball1Center).toPoint(), p1); QCOMPARE(translationChangedSpy1.count(), 1); - QTest::touchEvent(window, touchDevice).release(2, p2, window); + touchSeq.release(2, p2, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(!dragHandler2->active()); QCOMPARE(ball2->mapToScene(ball2Center).toPoint(), p2); diff --git a/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp b/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp index 6d2c1ab3f9..f9970df9f0 100644 --- a/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp +++ b/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp @@ -526,23 +526,24 @@ void tst_TapHandler::buttonsMultiTouch() QQuickItem *buttonReleaseWithinBounds = window->rootObject()->findChild("ReleaseWithinBounds"); QVERIFY(buttonReleaseWithinBounds); QSignalSpy releaseWithinBoundsTappedSpy(buttonReleaseWithinBounds, SIGNAL(tapped())); + QTest::QTouchEventSequence touchSeq = QTest::touchEvent(window, touchDevice, false); // can press multiple buttons at the same time QPoint p1 = buttonDragThreshold->mapToScene(QPointF(20, 20)).toPoint(); - QTest::touchEvent(window, touchDevice).press(1, p1, window); + touchSeq.press(1, p1, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(buttonDragThreshold->property("pressed").toBool()); QPoint p2 = buttonWithinBounds->mapToScene(QPointF(20, 20)).toPoint(); - QTest::touchEvent(window, touchDevice).stationary(1).press(2, p2, window); + touchSeq.stationary(1).press(2, p2, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(buttonWithinBounds->property("pressed").toBool()); QPoint p3 = buttonReleaseWithinBounds->mapToScene(QPointF(20, 20)).toPoint(); - QTest::touchEvent(window, touchDevice).stationary(1).stationary(2).press(3, p3, window); + touchSeq.stationary(1).stationary(2).press(3, p3, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(buttonReleaseWithinBounds->property("pressed").toBool()); // can release top button and press again: others stay pressed the whole time - QTest::touchEvent(window, touchDevice).stationary(2).stationary(3).release(1, p1, window); + touchSeq.stationary(2).stationary(3).release(1, p1, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(!buttonDragThreshold->property("pressed").toBool()); QCOMPARE(dragThresholdTappedSpy.count(), 1); @@ -550,14 +551,14 @@ void tst_TapHandler::buttonsMultiTouch() QCOMPARE(withinBoundsTappedSpy.count(), 0); QVERIFY(buttonReleaseWithinBounds->property("pressed").toBool()); QCOMPARE(releaseWithinBoundsTappedSpy.count(), 0); - QTest::touchEvent(window, touchDevice).stationary(2).stationary(3).press(1, p1, window); + touchSeq.stationary(2).stationary(3).press(1, p1, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(buttonDragThreshold->property("pressed").toBool()); QVERIFY(buttonWithinBounds->property("pressed").toBool()); QVERIFY(buttonReleaseWithinBounds->property("pressed").toBool()); // can release middle button and press again: others stay pressed the whole time - QTest::touchEvent(window, touchDevice).stationary(1).stationary(3).release(2, p2, window); + touchSeq.stationary(1).stationary(3).release(2, p2, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(!buttonWithinBounds->property("pressed").toBool()); QCOMPARE(withinBoundsTappedSpy.count(), 1); @@ -565,21 +566,21 @@ void tst_TapHandler::buttonsMultiTouch() QCOMPARE(dragThresholdTappedSpy.count(), 1); QVERIFY(buttonReleaseWithinBounds->property("pressed").toBool()); QCOMPARE(releaseWithinBoundsTappedSpy.count(), 0); - QTest::touchEvent(window, touchDevice).stationary(1).stationary(3).press(2, p2, window); + touchSeq.stationary(1).stationary(3).press(2, p2, window).commit(); QQuickTouchUtils::flush(window); QVERIFY(buttonDragThreshold->property("pressed").toBool()); QVERIFY(buttonWithinBounds->property("pressed").toBool()); QVERIFY(buttonReleaseWithinBounds->property("pressed").toBool()); // can release bottom button and press again: others stay pressed the whole time - QTest::touchEvent(window, touchDevice).stationary(1).stationary(2).release(3, p3, window); + touchSeq.stationary(1).stationary(2).release(3, p3, window).commit(); QQuickTouchUtils::flush(window); QCOMPARE(releaseWithinBoundsTappedSpy.count(), 1); QVERIFY(buttonWithinBounds->property("pressed").toBool()); QCOMPARE(withinBoundsTappedSpy.count(), 1); QVERIFY(!buttonReleaseWithinBounds->property("pressed").toBool()); QCOMPARE(dragThresholdTappedSpy.count(), 1); - QTest::touchEvent(window, touchDevice).stationary(1).stationary(2).press(3, p3, window); + touchSeq.stationary(1).stationary(2).press(3, p3, window).commit(); QQuickTouchUtils::flush(window); QTRY_VERIFY(buttonDragThreshold->property("pressed").toBool()); QVERIFY(buttonWithinBounds->property("pressed").toBool()); -- cgit v1.2.3