From 44e3936db1000ac6445e707a3443661087031551 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Wed, 28 Oct 2020 09:36:33 +0100 Subject: Improve tst_TouchMouse::pinchOnFlickable - use for loops instead of tedious repetition - compare instead of verify to check negative bools - QTRY_COMPARE instead of qWait - move touchpoints by drag threshold to ensure repeatability: both flickable and pincharea wait for the threshold to start reacting Change-Id: I071fc05280e2156223af57d97079516987a744ab Reviewed-by: Shawn Rutledge --- tests/auto/quick/touchmouse/tst_touchmouse.cpp | 63 ++++++++++---------------- 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/tests/auto/quick/touchmouse/tst_touchmouse.cpp b/tests/auto/quick/touchmouse/tst_touchmouse.cpp index 2deaf31079..ac6b579d03 100644 --- a/tests/auto/quick/touchmouse/tst_touchmouse.cpp +++ b/tests/auto/quick/touchmouse/tst_touchmouse.cpp @@ -1043,6 +1043,7 @@ void tst_TouchMouse::pinchOnFlickable() QQuickViewTestUtil::centerOnScreen(window.data()); QVERIFY(QTest::qWaitForWindowActive(window.data())); QVERIFY(window->rootObject() != nullptr); + const int threshold = qApp->styleHints()->startDragDistance(); QQuickPinchArea *pinchArea = window->rootObject()->findChild("pincharea"); QVERIFY(pinchArea); @@ -1051,37 +1052,27 @@ void tst_TouchMouse::pinchOnFlickable() QQuickItem *rect = window->rootObject()->findChild("rect"); QVERIFY(rect); - // flickable - single touch point - QCOMPARE(flickable->contentX(), 0.0); + // flick the flickable with one touchpoint + QCOMPARE(flickable->contentX(), 0); QPoint p = QPoint(100, 100); QTest::touchEvent(window.data(), device).press(0, p, window.data()); QQuickTouchUtils::flush(window.data()); - QCOMPARE(rect->position(), QPointF(200.0, 200.0)); - p -= QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p, window.data()); - QQuickTouchUtils::flush(window.data()); - p -= QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p, window.data()); - QQuickTouchUtils::flush(window.data()); - p -= QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p, window.data()); - QQuickTouchUtils::flush(window.data()); - p -= QPoint(10, 0); - QTest::touchEvent(window.data(), device).move(0, p, window.data()); - QQuickTouchUtils::flush(window.data()); + QCOMPARE(rect->position(), QPointF(200, 200)); + for (int i = 0; i < 4; ++i) { + p -= QPoint(threshold, 0); + QTest::touchEvent(window.data(), device).move(0, p, window.data()); + QQuickTouchUtils::flush(window.data()); + if (!flickable->isAtXBeginning()) // currently happens when i == 3 + qCDebug(lcTests, "flicking after %d moves: %lf", i + 1, flickable->contentX()); + } QTest::touchEvent(window.data(), device).release(0, p, window.data()); - QQuickTouchUtils::flush(window.data()); - - QGuiApplication::processEvents(); - QTest::qWait(10); - QVERIFY(!flickable->isAtXBeginning()); + QTRY_COMPARE(flickable->isAtXBeginning(), false); // wait until flicking is done - QTRY_VERIFY(!flickable->isFlicking()); + QTRY_COMPARE(flickable->isFlicking(), false); - // pinch + // pinch with two touchpoints QPoint p1 = QPoint(40, 20); QPoint p2 = QPoint(60, 20); - QTest::QTouchEventSequence pinchSequence = QTest::touchEvent(window.data(), device); QQuickTouchUtils::flush(window.data()); pinchSequence.press(0, p1, window.data()).commit(); @@ -1093,27 +1084,19 @@ void tst_TouchMouse::pinchOnFlickable() // it is outside its bounds. pinchSequence.stationary(0).press(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); - p1 -= QPoint(10,10); - p2 += QPoint(10,10); - pinchSequence.move(0, p1, window.data()).move(1, p2, window.data()).commit(); - QQuickTouchUtils::flush(window.data()); - QCOMPARE(rect->scale(), 1.0); - p1 -= QPoint(10, 0); - p2 += QPoint(10, 0); - pinchSequence.move(0, p1, window.data()).move(1, p2, window.data()).commit(); - QQuickTouchUtils::flush(window.data()); - p1 -= QPoint(10, 0); - p2 += QPoint(10, 0); - pinchSequence.move(0, p1, window.data()).move(1, p2, window.data()).commit(); - QQuickTouchUtils::flush(window.data()); - p1 -= QPoint(10, 0); - p2 += QPoint(10, 0); - pinchSequence.move(0, p1, window.data()).move(1, p2, window.data()).commit(); + QCOMPARE(rect->scale(), 1); + for (int i = 0; i < 3; ++i) { + p1 -= QPoint(threshold, 0); + p2 += QPoint(threshold, 0); + pinchSequence.move(0, p1, window.data()).move(1, p2, window.data()).commit(); + QQuickTouchUtils::flush(window.data()); + qCDebug(lcTests, "pinch scale after %d moves: %lf", i + 1, rect->scale()); + } QVERIFY(!flickable->isDragging()); QQuickTouchUtils::flush(window.data()); pinchSequence.release(0, p1, window.data()).release(1, p2, window.data()).commit(); QQuickTouchUtils::flush(window.data()); - QVERIFY(rect->scale() > 1.0); + QVERIFY(rect->scale() > 1); // depends on threshold } void tst_TouchMouse::flickableOnPinch() -- cgit v1.2.3