aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktestutils/quick/viewtestutils.cpp
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2024-06-18 00:13:30 -0700
committerShawn Rutledge <shawn.rutledge@qt.io>2024-07-02 08:43:08 -0700
commit99c6706b9208fcdf2e48f14bcd3f961567838ea4 (patch)
tree6f7b18bf05b9cdc48ac1a51633614e0cc1b24687 /src/quicktestutils/quick/viewtestutils.cpp
parent5b560981de765df16d41c7fccb976c184e9884c1 (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.cpp84
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