aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktestutils
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2025-12-15 16:14:22 +0200
committerTarja Sundqvist <tarja.sundqvist@qt.io>2025-12-15 16:14:22 +0200
commitb58ec3b086518da5aa573f99426235854c23e35f (patch)
tree861a9935d8f1cdba2fdca546836a351736dbddbf /src/quicktestutils
parent4826f86e274f1b29bd769e6790824f9e62a40f62 (diff)
parent22032227d16c39211e2ebceef97d21f4d89c7c87 (diff)
Merge tag 'v6.5.8-lts-lgpl' into 6.56.5
Qt 6.5.8-lts-lgpl release
Diffstat (limited to 'src/quicktestutils')
-rw-r--r--src/quicktestutils/quick/viewtestutils.cpp109
-rw-r--r--src/quicktestutils/quick/viewtestutils_p.h22
-rw-r--r--src/quicktestutils/quick/visualtestutils.cpp4
3 files changed, 86 insertions, 49 deletions
diff --git a/src/quicktestutils/quick/viewtestutils.cpp b/src/quicktestutils/quick/viewtestutils.cpp
index 79c34168e5..1263d7667c 100644
--- a/src/quicktestutils/quick/viewtestutils.cpp
+++ b/src/quicktestutils/quick/viewtestutils.cpp
@@ -8,6 +8,7 @@
#include <QtQuick/QQuickView>
#include <QtQuick/QQuickView>
#include <QtGui/QScreen>
+#include <QtGui/private/qhighdpiscaling_p.h>
#include <QtGui/qpa/qwindowsysteminterface.h>
#include <QtTest/QTest>
@@ -52,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;
@@ -524,50 +498,63 @@ 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;
case QPointingDevice::DeviceType::Puck:
case QPointingDevice::DeviceType::Stylus:
- case QPointingDevice::DeviceType::Airbrush:
- QTest::lastMouseTimestamp += QTest::defaultMouseDelay();
+ case QPointingDevice::DeviceType::Airbrush:{
+ const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window);
+ const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window);
+ QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1;
pressedTabletButton = button;
pressedTabletModifiers = modifiers;
- QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, p, window->mapToGlobal(p),
+ QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal,
button, 0.8, 0, 0, 0, 0, 0, modifiers);
break;
+ }
default:
qWarning() << "can't send a press event from" << dev;
break;
}
}
- 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;
case QPointingDevice::DeviceType::Puck:
case QPointingDevice::DeviceType::Stylus:
- case QPointingDevice::DeviceType::Airbrush:
- QTest::lastMouseTimestamp += QTest::defaultMouseDelay();
- QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, p, window->mapToGlobal(p),
- pressedTabletButton, 0, 0, 0, 0, 0, 0, pressedTabletModifiers);
+ 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();
+ // often QTest::defaultMouseDelay() == 0; but avoid infinite velocity
+ 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);
break;
+ }
default:
qWarning() << "can't send a move event from" << dev;
break;
@@ -575,30 +562,66 @@ 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;
case QPointingDevice::DeviceType::Puck:
case QPointingDevice::DeviceType::Stylus:
- case QPointingDevice::DeviceType::Airbrush:
- QTest::lastMouseTimestamp += QTest::defaultMouseDelay();
- QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, p, window->mapToGlobal(p),
+ case QPointingDevice::DeviceType::Airbrush: {
+ const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window);
+ const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window);
+ 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;
+ }
default:
qWarning() << "can't send a press event from" << dev;
break;
}
}
+ 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
diff --git a/src/quicktestutils/quick/viewtestutils_p.h b/src/quicktestutils/quick/viewtestutils_p.h
index 28666786f0..aec1b5063a 100644
--- a/src/quicktestutils/quick/viewtestutils_p.h
+++ b/src/quicktestutils/quick/viewtestutils_p.h
@@ -31,12 +31,9 @@ namespace QQuickViewTestUtils
{
QQuickView *createView();
- void flick(QQuickView *window, const QPoint &from, const QPoint &to, int duration);
void centerOnScreen(QQuickView *window, const QSize &size);
void centerOnScreen(QQuickView *window);
void moveMouseAway(QQuickView *window);
- void moveAndPress(QQuickView *window, const QPoint &position);
- void moveAndRelease(QQuickView *window, const QPoint &position);
QList<int> adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count);
QList<int> adjustIndexesForMove(const QList<int> &indexes, int from, int to, int count);
@@ -185,14 +182,27 @@ namespace QQuickTest {
void pointerPress(const QPointingDevice *dev, QQuickWindow *window,
int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton,
- Qt::KeyboardModifiers modifiers = Qt::NoModifier);
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1);
void pointerMove(const QPointingDevice *dev, QQuickWindow *window, int pointId,
- const QPoint &p);
+ const QPoint &p, int delay = -1);
void pointerRelease(const QPointingDevice *dev, QQuickWindow *window, int pointId,
const QPoint &p, Qt::MouseButton button = Qt::LeftButton,
- Qt::KeyboardModifiers modifiers = Qt::NoModifier);
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1);
+
+ void pointerMoveAndPress(const QPointingDevice *dev, QQuickWindow *window,
+ int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton,
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1);
+
+ void pointerMoveAndRelease(const QPointingDevice *dev, QQuickWindow *window,
+ int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton,
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1);
+
+ void pointerFlick(const QPointingDevice *dev, QQuickWindow *window,
+ int pointId, const QPoint &from, const QPoint &to, int duration,
+ Qt::MouseButton button = Qt::LeftButton,
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1);
}
QT_END_NAMESPACE
diff --git a/src/quicktestutils/quick/visualtestutils.cpp b/src/quicktestutils/quick/visualtestutils.cpp
index c5e41f33f1..5a593ba9d0 100644
--- a/src/quicktestutils/quick/visualtestutils.cpp
+++ b/src/quicktestutils/quick/visualtestutils.cpp
@@ -145,6 +145,10 @@ bool QQuickVisualTestUtils::compareImages(const QImage &ia, const QImage &ib, QS
QDebug(errorMessage) << "Images are of different formats:" << ia.format() << ib.format();
return false;
}
+ if (ia.depth() != 32) {
+ QDebug(errorMessage) << "This function only supports bit depths of 32 - depth of images is:" << ia.depth();
+ return false;
+ }
int w = ia.width();
int h = ia.height();