diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/webengine/api/qquickwebenginetestsupport.cpp | 69 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginetestsupport_p.h | 19 | ||||
-rw-r--r-- | src/webengine/plugin/testsupport/plugin.cpp | 2 | ||||
-rw-r--r-- | src/webengine/webengine.pro | 2 |
4 files changed, 92 insertions, 0 deletions
diff --git a/src/webengine/api/qquickwebenginetestsupport.cpp b/src/webengine/api/qquickwebenginetestsupport.cpp index 41f374766..b3290d3cc 100644 --- a/src/webengine/api/qquickwebenginetestsupport.cpp +++ b/src/webengine/api/qquickwebenginetestsupport.cpp @@ -40,9 +40,15 @@ #include "qquickwebenginetestsupport_p.h" #include "qquickwebengineloadrequest_p.h" +#include <QQuickWindow> +#include <QtTest/qtest.h> QT_BEGIN_NAMESPACE +namespace QTest { + int Q_TESTLIB_EXPORT defaultMouseDelay(); +} + QQuickWebEngineErrorPage::QQuickWebEngineErrorPage() { } @@ -101,9 +107,67 @@ bool QQuickWebEngineTestInputContext::isInputPanelVisible() const } +QQuickWebEngineTestEvent::QQuickWebEngineTestEvent() +{ +} + +bool QQuickWebEngineTestEvent::mouseMultiClick(QObject *item, qreal x, qreal y, int clickCount) +{ + QTEST_ASSERT(item); + + QWindow *view = eventWindow(item); + if (!view) + return false; + + for (int i = 0; i < clickCount; ++i) { + mouseEvent(QMouseEvent::MouseButtonPress, view, item, QPointF(x, y)); + mouseEvent(QMouseEvent::MouseButtonRelease, view, item, QPointF(x, y)); + } + QTest::lastMouseTimestamp += QTest::mouseDoubleClickInterval; + + return true; +} + +QWindow *QQuickWebEngineTestEvent::eventWindow(QObject *item) +{ + QWindow *window = qobject_cast<QWindow *>(item); + if (window) + return window; + + QQuickItem *quickItem = qobject_cast<QQuickItem *>(item); + if (quickItem) + return quickItem->window(); + + QQuickItem *testParentItem = qobject_cast<QQuickItem *>(parent()); + if (testParentItem) + return testParentItem->window(); + + return nullptr; +} + +void QQuickWebEngineTestEvent::mouseEvent(QEvent::Type type, QWindow *window, QObject *item, const QPointF &_pos) +{ + QTest::qWait(QTest::defaultMouseDelay()); + QTest::lastMouseTimestamp += QTest::defaultMouseDelay(); + + QPoint pos; + QQuickItem *sgitem = qobject_cast<QQuickItem *>(item); + if (sgitem) + pos = sgitem->mapToScene(_pos).toPoint(); + + QMouseEvent me(type, pos, window->mapFromGlobal(pos), Qt::LeftButton, Qt::LeftButton, 0); + me.setTimestamp(++QTest::lastMouseTimestamp); + + QSpontaneKeyEvent::setSpontaneous(&me); + if (!qApp->notify(window, &me)) + QTest::qWarn("Mouse click event not accepted by receiving window"); +} + + QQuickWebEngineTestSupport::QQuickWebEngineTestSupport() : m_errorPage(new QQuickWebEngineErrorPage) , m_testInputContext(new QQuickWebEngineTestInputContext) + , m_testEvent(new QQuickWebEngineTestEvent) { } @@ -117,6 +181,11 @@ QQuickWebEngineTestInputContext *QQuickWebEngineTestSupport::testInputContext() return m_testInputContext.data(); } +QQuickWebEngineTestEvent * QQuickWebEngineTestSupport::testEvent() const +{ + return m_testEvent.data(); +} + QT_END_NAMESPACE #include "moc_qquickwebenginetestsupport_p.cpp" diff --git a/src/webengine/api/qquickwebenginetestsupport_p.h b/src/webengine/api/qquickwebenginetestsupport_p.h index a84d00307..b601fb47c 100644 --- a/src/webengine/api/qquickwebenginetestsupport_p.h +++ b/src/webengine/api/qquickwebenginetestsupport_p.h @@ -54,12 +54,14 @@ #include <private/qinputmethod_p.h> #include <private/qtwebengineglobal_p.h> +#include <QEvent> #include <QObject> #include <QUrl> QT_BEGIN_NAMESPACE class QQuickWebEngineLoadRequest; +class QWindow; class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineErrorPage : public QObject { Q_OBJECT @@ -92,15 +94,31 @@ private: bool m_visible; }; +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineTestEvent : public QObject { + Q_OBJECT + +public: + QQuickWebEngineTestEvent(); + +public Q_SLOTS: + bool mouseMultiClick(QObject *item, qreal x, qreal y, int clickCount); + +private: + QWindow *eventWindow(QObject *item = 0); + void mouseEvent(QEvent::Type type, QWindow *window, QObject *item, const QPointF &_pos); +}; + class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineTestSupport : public QObject { Q_OBJECT Q_PROPERTY(QQuickWebEngineErrorPage *errorPage READ errorPage CONSTANT FINAL) Q_PROPERTY(QQuickWebEngineTestInputContext *testInputContext READ testInputContext CONSTANT FINAL) + Q_PROPERTY(QQuickWebEngineTestEvent *testEvent READ testEvent CONSTANT FINAL) public: QQuickWebEngineTestSupport(); QQuickWebEngineErrorPage *errorPage() const; QQuickWebEngineTestInputContext *testInputContext() const; + QQuickWebEngineTestEvent *testEvent() const; Q_SIGNALS: void windowCloseRejected(); @@ -109,6 +127,7 @@ Q_SIGNALS: private: QScopedPointer<QQuickWebEngineErrorPage> m_errorPage; QScopedPointer<QQuickWebEngineTestInputContext> m_testInputContext; + QScopedPointer<QQuickWebEngineTestEvent> m_testEvent; }; QT_END_NAMESPACE diff --git a/src/webengine/plugin/testsupport/plugin.cpp b/src/webengine/plugin/testsupport/plugin.cpp index c7eda2405..d5c43a859 100644 --- a/src/webengine/plugin/testsupport/plugin.cpp +++ b/src/webengine/plugin/testsupport/plugin.cpp @@ -60,6 +60,8 @@ public: tr("Cannot create a separate instance of WebEngineErrorPage")); qmlRegisterUncreatableType<QQuickWebEngineTestInputContext>(uri, 1, 0, "TestInputContext", tr("Cannot create a separate instance of WebEngineErrorPage")); + qmlRegisterUncreatableType<QQuickWebEngineTestEvent>(uri, 1, 0, "WebEngineTestEvent", + tr("Cannot create a separate instance of WebEngineTestEvent")); } }; diff --git a/src/webengine/webengine.pro b/src/webengine/webengine.pro index f8df714c0..f4bc65edb 100644 --- a/src/webengine/webengine.pro +++ b/src/webengine/webengine.pro @@ -56,6 +56,8 @@ HEADERS = \ ui_delegates_manager.h isQMLTestSupportApiEnabled() { + QT += testlib + SOURCES += api/qquickwebenginetestsupport.cpp HEADERS += api/qquickwebenginetestsupport_p.h |