diff options
| author | Shawn Rutledge <shawn.rutledge@qt.io> | 2024-06-18 00:13:30 -0700 |
|---|---|---|
| committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2024-07-02 08:43:08 -0700 |
| commit | 99c6706b9208fcdf2e48f14bcd3f961567838ea4 (patch) | |
| tree | 6f7b18bf05b9cdc48ac1a51633614e0cc1b24687 /src/quicktestutils/quick/viewtestutils.cpp | |
| parent | 5b560981de765df16d41c7fccb976c184e9884c1 (diff) | |
Replace mouse-only flick, moveAndPress, moveAndRelease in tests
Since d7623d79ef4bc9533fced027bf1d173d68b4eba6 Flickable has worked
directly with touch events; and we are expected to have stylus devices
(QTabletEvents) working well too. So we need to be able to expand the
test coverage to more types of devices. This is the first step.
Pick-to: 6.8
Change-Id: I93a3a4b84424eb69e0cd7c9f4ebe58b9f27082d9
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quicktestutils/quick/viewtestutils.cpp')
| -rw-r--r-- | src/quicktestutils/quick/viewtestutils.cpp | 84 |
1 files changed, 46 insertions, 38 deletions
diff --git a/src/quicktestutils/quick/viewtestutils.cpp b/src/quicktestutils/quick/viewtestutils.cpp index 629849992a..b09def2552 100644 --- a/src/quicktestutils/quick/viewtestutils.cpp +++ b/src/quicktestutils/quick/viewtestutils.cpp @@ -53,33 +53,6 @@ void QQuickViewTestUtils::moveMouseAway(QQuickView *window) #endif } -void QQuickViewTestUtils::moveAndRelease(QQuickView *window, const QPoint &position) -{ - QTest::mouseMove(window, position); - QTest::mouseRelease(window, Qt::LeftButton, {}, position); -} - -void QQuickViewTestUtils::moveAndPress(QQuickView *window, const QPoint &position) -{ - QTest::mouseMove(window, position); - QTest::mousePress(window, Qt::LeftButton, {}, position); -} - -void QQuickViewTestUtils::flick(QQuickView *window, const QPoint &from, const QPoint &to, int duration) -{ - const int pointCount = 5; - QPoint diff = to - from; - - // send press, five equally spaced moves, and release. - moveAndPress(window, from); - - for (int i = 0; i < pointCount; ++i) - QTest::mouseMove(window, from + (i+1)*diff/pointCount, duration / pointCount); - - moveAndRelease(window, to); - QTest::qWait(50); -} - QList<int> QQuickViewTestUtils::adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count) { QList<int> result; @@ -528,14 +501,16 @@ namespace QQuickTest { static Qt::KeyboardModifiers pressedTabletModifiers = Qt::NoModifier; void pointerPress(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, - Qt::MouseButton button, Qt::KeyboardModifiers modifiers) + Qt::MouseButton button, Qt::KeyboardModifiers modifiers, int delay) { + const auto defaultDelay = QTest::defaultMouseDelay(); switch (dev->type()) { case QPointingDevice::DeviceType::Mouse: case QPointingDevice::DeviceType::TouchPad: - QTest::mousePress(window, button, modifiers, p); + QTest::mousePress(window, button, modifiers, p, delay >= 0 ? delay : defaultDelay ? defaultDelay : 1); break; case QPointingDevice::DeviceType::TouchScreen: + // TODO apply delay when QTBUG-95421 is fixed QTest::touchEvent(window, const_cast<QPointingDevice *>(dev)).press(pointId, p, window); QQuickTouchUtils::flush(window); break; @@ -544,8 +519,7 @@ namespace QQuickTest { case QPointingDevice::DeviceType::Airbrush:{ const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window); const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window); - const auto delay = QTest::defaultMouseDelay(); - QTest::lastMouseTimestamp += delay ? delay : 1; + QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1; pressedTabletButton = button; pressedTabletModifiers = modifiers; QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal, @@ -558,14 +532,16 @@ namespace QQuickTest { } } - void pointerMove(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p) + void pointerMove(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, int delay) { + const auto defaultDelay = QTest::defaultMouseDelay(); switch (dev->type()) { case QPointingDevice::DeviceType::Mouse: case QPointingDevice::DeviceType::TouchPad: - QTest::mouseMove(window, p); + QTest::mouseMove(window, p, delay >= 0 ? delay : defaultDelay ? defaultDelay : 1); break; case QPointingDevice::DeviceType::TouchScreen: + // TODO apply delay when QTBUG-95421 is fixed QTest::touchEvent(window, const_cast<QPointingDevice *>(dev)).move(pointId, p, window); QQuickTouchUtils::flush(window); break; @@ -576,7 +552,7 @@ namespace QQuickTest { const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window); const auto delay = QTest::defaultMouseDelay(); // often QTest::defaultMouseDelay() == 0; but avoid infinite velocity - QTest::lastMouseTimestamp += delay ? delay : 1; + QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1; QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal, pressedTabletButton, pressedTabletButton == Qt::NoButton ? 0 : 0.75, 0, 0, 0, 0, 0, pressedTabletModifiers); @@ -589,14 +565,16 @@ namespace QQuickTest { } void pointerRelease(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, - Qt::MouseButton button, Qt::KeyboardModifiers modifiers) + Qt::MouseButton button, Qt::KeyboardModifiers modifiers, int delay) { + const auto defaultDelay = QTest::defaultMouseDelay(); switch (dev->type()) { case QPointingDevice::DeviceType::Mouse: case QPointingDevice::DeviceType::TouchPad: - QTest::mouseRelease(window, button, modifiers, p); + QTest::mouseRelease(window, button, modifiers, p, delay >= 0 ? delay : defaultDelay ? defaultDelay : 1); break; case QPointingDevice::DeviceType::TouchScreen: + // TODO apply delay when QTBUG-95421 is fixed QTest::touchEvent(window, const_cast<QPointingDevice *>(dev)).release(pointId, p, window); QQuickTouchUtils::flush(window); break; @@ -605,8 +583,7 @@ namespace QQuickTest { case QPointingDevice::DeviceType::Airbrush: { const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window); const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window); - const auto delay = QTest::defaultMouseDelay(); - QTest::lastMouseTimestamp += delay ? delay : 1; + QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1; QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal, Qt::NoButton, 0, 0, 0, 0, 0, 0, modifiers); break; @@ -617,6 +594,37 @@ namespace QQuickTest { } } + void pointerMoveAndPress(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &p, Qt::MouseButton button, + Qt::KeyboardModifiers modifiers, int delay) + { + pointerMove(dev, window, pointId, p, delay); + pointerPress(dev, window, pointId, p, button, modifiers); + } + + void pointerMoveAndRelease(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &p, Qt::MouseButton button, + Qt::KeyboardModifiers modifiers, int delay) + { + pointerMove(dev, window, pointId, p, delay); + pointerRelease(dev, window, pointId, p, button, modifiers); + } + + void pointerFlick(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &from, const QPoint &to, int duration, + Qt::MouseButton button, Qt::KeyboardModifiers modifiers, int delay) + { + const int pointCount = 5; + const QPoint diff = to - from; + + // send press, five equally spaced moves, and release. + pointerMoveAndPress(dev, window, pointId, from, button, modifiers, delay); + + for (int i = 0; i < pointCount; ++i) + pointerMove(dev, window, pointId, from + (i + 1) * diff / pointCount, duration / pointCount); + + pointerMoveAndRelease(dev, window, pointId, to, button, modifiers); + } } QT_END_NAMESPACE |
