From 43472c1e8218ed692aaf3bb32c325d018e6a4527 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 22 Aug 2017 09:24:17 +0200 Subject: Fix finding test data on Android The standard way of doing Qt Quick testing requires having qml files available in the deployment somewhere in the regular file system. This is not how Android works, where all test data should be deployed as resources. To allow this, we simply hardcode the test path as a resource path on Android instead of checking on the disk. Task-number: QTBUG-45576 Change-Id: I0729f5004a6206d2a10b782eb5b7d83a833c4f51 Reviewed-by: BogDan Vatra --- src/qmltest/quicktest.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/qmltest') diff --git a/src/qmltest/quicktest.cpp b/src/qmltest/quicktest.cpp index f62f66170e..8cf0d2918e 100644 --- a/src/qmltest/quicktest.cpp +++ b/src/qmltest/quicktest.cpp @@ -277,6 +277,11 @@ int quick_test_main(int argc, char **argv, const char *name, const char *sourceD } #endif +#ifdef Q_OS_ANDROID + if (testPath.isEmpty()) + testPath = QLatin1String(":/"); +#endif + // Determine where to look for the test data. if (testPath.isEmpty() && sourceDir) { const QString s = QString::fromLocal8Bit(sourceDir); -- cgit v1.2.3 From 4c46dce8fd9c9dddddd1d07f56396b3eabb2efc4 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Wed, 28 Jun 2017 14:39:19 +0200 Subject: Make QtQuickTest::mouseEvent use QTest::mouseX Fixes QQuickItem::isUnderMouse returning wrong information when moving the mouse cursor with QtQuickTest::mouseX Also changes TestCase.mouseDrag to actually resemble more what real life does, i.e. send mouse moves with the same localPos if the item has already moved and update tst_drag.qml accordingly Change-Id: I80e4ab097da90d21ba987466c1b82467755a6b56 Reviewed-by: Shawn Rutledge --- src/qmltest/quicktestevent.cpp | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) (limited to 'src/qmltest') diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index dc7b917bc4..21c467ed1f 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -39,6 +39,7 @@ #include "quicktestevent_p.h" #include +#include #include #include #include @@ -125,8 +126,6 @@ namespace QtQuickTest { enum MouseAction { MousePress, MouseRelease, MouseClick, MouseDoubleClick, MouseMove, MouseDoubleClickSequence }; - int lastMouseTimestamp = 0; - static void mouseEvent(MouseAction action, QWindow *window, QObject *item, Qt::MouseButton button, Qt::KeyboardModifiers stateKey, const QPointF &_pos, int delay=-1) @@ -138,7 +137,7 @@ namespace QtQuickTest delay = QTest::defaultMouseDelay(); if (delay > 0) { QTest::qWait(delay); - lastMouseTimestamp += delay; + QTest::lastMouseTimestamp += delay; } if (action == MouseClick) { @@ -165,37 +164,32 @@ namespace QtQuickTest stateKey &= static_cast(Qt::KeyboardModifierMask); - QMouseEvent me(QEvent::User, QPoint(), Qt::LeftButton, button, stateKey); + if (action == MouseDoubleClick) { + // the QWindow variant of QTest::mouseEvent doesn't have MouseDoubleClick as event + // its MouseDClick is actually like the MouseDoubleClickSequence here + QMouseEvent me(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); + me.setTimestamp(++QTest::lastMouseTimestamp); + QSpontaneKeyEvent::setSpontaneous(&me); + if (!qApp->notify(window, &me)) { + QWARN("Mouse event \"MouseDoubleClick\" not accepted by receiving window"); + } + return; + } + switch (action) { case MousePress: - me = QMouseEvent(QEvent::MouseButtonPress, pos, window->mapToGlobal(pos), button, button, stateKey); - me.setTimestamp(++lastMouseTimestamp); + QTest::mousePress(window, button, stateKey, pos, /*delay*/ 0); break; case MouseRelease: - me = QMouseEvent(QEvent::MouseButtonRelease, pos, window->mapToGlobal(pos), button, 0, stateKey); - me.setTimestamp(++lastMouseTimestamp); - lastMouseTimestamp += 500; // avoid double clicks being generated - break; - case MouseDoubleClick: - me = QMouseEvent(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); - me.setTimestamp(++lastMouseTimestamp); + QTest::mouseRelease(window, button, stateKey, pos, /*delay*/ 0); break; case MouseMove: - // with move event the button is NoButton, but 'buttons' holds the currently pressed buttons - me = QMouseEvent(QEvent::MouseMove, pos, window->mapToGlobal(pos), Qt::NoButton, button, stateKey); - me.setTimestamp(++lastMouseTimestamp); + QTest::mouseMove(window, pos, /*delay*/ 0); break; default: QTEST_ASSERT(false); } - QSpontaneKeyEvent::setSpontaneous(&me); - if (!qApp->notify(window, &me)) { - static const char *mouseActionNames[] = - { "MousePress", "MouseRelease", "MouseClick", "MouseDoubleClick", "MouseMove", "MouseDoubleClickSequence" }; - QString warning = QString::fromLatin1("Mouse event \"%1\" not accepted by receiving window"); - QWARN(warning.arg(QString::fromLatin1(mouseActionNames[static_cast(action)])).toLatin1().data()); - } } #if QT_CONFIG(wheelevent) -- cgit v1.2.3 From e41b519cfa8c9932b88db35b2d72588a13f19e4d Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Fri, 1 Sep 2017 18:18:56 +0200 Subject: QtQuickTest::mouseEvent: when clicking a Window, use the given coords If the given item is a Window, pos was left default-initialized, and then a later check for isNull converted it to the center of the window. Use the given coordinates instead in this case. Change-Id: I659af9b665890084c29415394a84874e381ffcbe Reviewed-by: J-P Nurmi --- src/qmltest/quicktestevent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/qmltest') diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index 21c467ed1f..09b7c95eef 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -155,7 +155,7 @@ namespace QtQuickTest return; } - QPoint pos; + QPoint pos = _pos.toPoint(); QQuickItem *sgitem = qobject_cast(item); if (sgitem) pos = sgitem->mapToScene(_pos).toPoint(); -- cgit v1.2.3 From 8f93d3627a9b76bf77896501129990e33a77f32c Mon Sep 17 00:00:00 2001 From: Jani Heikkinen Date: Fri, 1 Sep 2017 10:59:54 +0000 Subject: Revert "Make QtQuickTest::mouseEvent use QTest::mouseX" It seems this is causing QTBUG-62925 and QTBUG-62926 so revert is the best option at this point to proceed This reverts commit 4c46dce8fd9c9dddddd1d07f56396b3eabb2efc4. Change-Id: Ia8ea85c1ac1ada1752b29c9fbd8439f5963d46d2 Reviewed-by: J-P Nurmi Reviewed-by: Albert Astals Cid Reviewed-by: Frederik Gladhorn Reviewed-by: Shawn Rutledge --- src/qmltest/quicktestevent.cpp | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to 'src/qmltest') diff --git a/src/qmltest/quicktestevent.cpp b/src/qmltest/quicktestevent.cpp index 09b7c95eef..663d3c64e1 100644 --- a/src/qmltest/quicktestevent.cpp +++ b/src/qmltest/quicktestevent.cpp @@ -39,7 +39,6 @@ #include "quicktestevent_p.h" #include -#include #include #include #include @@ -126,6 +125,8 @@ namespace QtQuickTest { enum MouseAction { MousePress, MouseRelease, MouseClick, MouseDoubleClick, MouseMove, MouseDoubleClickSequence }; + int lastMouseTimestamp = 0; + static void mouseEvent(MouseAction action, QWindow *window, QObject *item, Qt::MouseButton button, Qt::KeyboardModifiers stateKey, const QPointF &_pos, int delay=-1) @@ -137,7 +138,7 @@ namespace QtQuickTest delay = QTest::defaultMouseDelay(); if (delay > 0) { QTest::qWait(delay); - QTest::lastMouseTimestamp += delay; + lastMouseTimestamp += delay; } if (action == MouseClick) { @@ -164,32 +165,37 @@ namespace QtQuickTest stateKey &= static_cast(Qt::KeyboardModifierMask); - if (action == MouseDoubleClick) { - // the QWindow variant of QTest::mouseEvent doesn't have MouseDoubleClick as event - // its MouseDClick is actually like the MouseDoubleClickSequence here - QMouseEvent me(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); - me.setTimestamp(++QTest::lastMouseTimestamp); - QSpontaneKeyEvent::setSpontaneous(&me); - if (!qApp->notify(window, &me)) { - QWARN("Mouse event \"MouseDoubleClick\" not accepted by receiving window"); - } - return; - } - + QMouseEvent me(QEvent::User, QPoint(), Qt::LeftButton, button, stateKey); switch (action) { case MousePress: - QTest::mousePress(window, button, stateKey, pos, /*delay*/ 0); + me = QMouseEvent(QEvent::MouseButtonPress, pos, window->mapToGlobal(pos), button, button, stateKey); + me.setTimestamp(++lastMouseTimestamp); break; case MouseRelease: - QTest::mouseRelease(window, button, stateKey, pos, /*delay*/ 0); + me = QMouseEvent(QEvent::MouseButtonRelease, pos, window->mapToGlobal(pos), button, 0, stateKey); + me.setTimestamp(++lastMouseTimestamp); + lastMouseTimestamp += 500; // avoid double clicks being generated + break; + case MouseDoubleClick: + me = QMouseEvent(QEvent::MouseButtonDblClick, pos, window->mapToGlobal(pos), button, button, stateKey); + me.setTimestamp(++lastMouseTimestamp); break; case MouseMove: - QTest::mouseMove(window, pos, /*delay*/ 0); + // with move event the button is NoButton, but 'buttons' holds the currently pressed buttons + me = QMouseEvent(QEvent::MouseMove, pos, window->mapToGlobal(pos), Qt::NoButton, button, stateKey); + me.setTimestamp(++lastMouseTimestamp); break; default: QTEST_ASSERT(false); } + QSpontaneKeyEvent::setSpontaneous(&me); + if (!qApp->notify(window, &me)) { + static const char *mouseActionNames[] = + { "MousePress", "MouseRelease", "MouseClick", "MouseDoubleClick", "MouseMove", "MouseDoubleClickSequence" }; + QString warning = QString::fromLatin1("Mouse event \"%1\" not accepted by receiving window"); + QWARN(warning.arg(QString::fromLatin1(mouseActionNames[static_cast(action)])).toLatin1().data()); + } } #if QT_CONFIG(wheelevent) -- cgit v1.2.3