summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/testlib/qtestmouse.h43
-rw-r--r--tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp6
2 files changed, 22 insertions, 27 deletions
diff --git a/src/testlib/qtestmouse.h b/src/testlib/qtestmouse.h
index 865b967b34..3e43434a50 100644
--- a/src/testlib/qtestmouse.h
+++ b/src/testlib/qtestmouse.h
@@ -84,13 +84,16 @@ namespace QTest
// to depend on platform themes.
static const int mouseDoubleClickInterval = 500;
-/*! \internal
-
- This function mocks all mouse events by bypassing the windowing system. The
- result is that the mouse events do not come from the system via Qt platform
- plugins, but are created on the spot and immediately available for processing
- by Qt.
-*/
+ /*! \internal
+ This function creates a QPA mouse event of type specified by \a action
+ and calls QWindowSystemInterface::handleMouseEvent(), simulating the
+ windowing system and bypassing the platform plugin. \a delay is the
+ amount of time to be added to the simulated clock so that
+ QInputEvent::timestamp() will be greater than that of the previous
+ event. We expect all event-handling code to rely on the event
+ timestamps, not the system clock; therefore tests can be run faster
+ than real-time.
+ */
static void mouseEvent(MouseAction action, QWindow *window, Qt::MouseButton button,
Qt::KeyboardModifiers stateKey, QPoint pos, int delay=-1)
{
@@ -106,10 +109,7 @@ namespace QTest
if (delay == -1 || delay < defaultMouseDelay())
delay = defaultMouseDelay();
- if (delay > 0) {
- QTest::qWait(delay);
- lastMouseTimestamp += delay;
- }
+ lastMouseTimestamp += qMax(1, delay);
if (pos.isNull())
pos = QPoint(window->width() / 2, window->height() / 2);
@@ -127,28 +127,28 @@ namespace QTest
case MouseDClick:
qtestMouseButtons.setFlag(button, true);
qt_handleMouseEvent(w, pos, global, qtestMouseButtons, button, QEvent::MouseButtonPress,
- stateKey, ++lastMouseTimestamp);
+ stateKey, lastMouseTimestamp);
qtestMouseButtons.setFlag(button, false);
qt_handleMouseEvent(w, pos, global, qtestMouseButtons, button, QEvent::MouseButtonRelease,
- stateKey, ++lastMouseTimestamp);
+ stateKey, lastMouseTimestamp);
Q_FALLTHROUGH();
case MousePress:
case MouseClick:
qtestMouseButtons.setFlag(button, true);
qt_handleMouseEvent(w, pos, global, qtestMouseButtons, button, QEvent::MouseButtonPress,
- stateKey, ++lastMouseTimestamp);
+ stateKey, lastMouseTimestamp);
if (action == MousePress)
break;
Q_FALLTHROUGH();
case MouseRelease:
qtestMouseButtons.setFlag(button, false);
qt_handleMouseEvent(w, pos, global, qtestMouseButtons, button, QEvent::MouseButtonRelease,
- stateKey, ++lastMouseTimestamp);
+ stateKey, lastMouseTimestamp);
lastMouseTimestamp += mouseDoubleClickInterval; // avoid double clicks being generated
break;
case MouseMove:
qt_handleMouseEvent(w, pos, global, qtestMouseButtons, Qt::NoButton, QEvent::MouseMove,
- stateKey, ++lastMouseTimestamp);
+ stateKey, lastMouseTimestamp);
break;
default:
QTEST_ASSERT(false);
@@ -193,10 +193,7 @@ namespace QTest
if (delay == -1 || delay < defaultMouseDelay())
delay = defaultMouseDelay();
- if (delay > 0) {
- QTest::qWait(delay);
- lastMouseTimestamp += delay;
- }
+ lastMouseTimestamp += qMax(1, delay);
if (action == MouseClick) {
mouseEvent(MousePress, widget, button, stateKey, pos);
@@ -226,17 +223,13 @@ namespace QTest
break;
case MouseMove:
QCursor::setPos(widget->mapToGlobal(pos));
-#ifdef Q_OS_MAC
- QTest::qWait(20);
-#else
qApp->processEvents();
-#endif
return;
default:
QTEST_ASSERT(false);
}
QMouseEvent me(meType, pos, widget->mapToGlobal(pos), button, meButton, stateKey, QPointingDevice::primaryPointingDevice());
- me.setTimestamp(++lastMouseTimestamp);
+ me.setTimestamp(lastMouseTimestamp);
if (action == MouseRelease) // avoid double clicks being generated
lastMouseTimestamp += mouseDoubleClickInterval;
diff --git a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp
index 32003f2124..9c3b1066a7 100644
--- a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp
+++ b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp
@@ -206,14 +206,16 @@ void tst_QToolButton::task176137_autoRepeatOfAction()
QSignalSpy spy(&action,SIGNAL(triggered()));
QTest::mousePress (toolButton, Qt::LeftButton);
- QTest::mouseRelease (toolButton, Qt::LeftButton, {}, QPoint (), 2000);
+ QTest::qWait(2000);
+ QTest::mouseRelease (toolButton, Qt::LeftButton, {}, {});
QCOMPARE(spy.count(),1);
// try again with auto repeat
toolButton->setAutoRepeat (true);
QSignalSpy repeatSpy(&action,SIGNAL(triggered())); // new spy
QTest::mousePress (toolButton, Qt::LeftButton);
- QTest::mouseRelease (toolButton, Qt::LeftButton, {}, QPoint (), 3000);
+ QTest::qWait(3000);
+ QTest::mouseRelease (toolButton, Qt::LeftButton, {}, {});
const qreal expected = (3000 - toolButton->autoRepeatDelay()) / toolButton->autoRepeatInterval() + 1;
//we check that the difference is small (on some systems timers are not super accurate)
qreal diff = (expected - repeatSpy.count()) / expected;