From 656b7fdd2d972946fe980f4089f5e9d01160dc68 Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Wed, 22 Mar 2017 16:29:46 +0100 Subject: Add auto tests for MultipleMouseClickHelper Qt WebEngine implements a custom handler for multiple mouse clicks. These tests are intended to test whether the mouse click events are properly forwarded to the Chromium's RenderWidgetHost. Custom mouse click test functions have been also added for the custom mouse click handler. Change-Id: Ifdc7d09f5e0f0f76c37e137e5743482bf3fb8abb Reviewed-by: Allan Sandfeld Jensen --- .../widgets/qwebengineview/tst_qwebengineview.cpp | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) (limited to 'tests/auto/widgets/qwebengineview') diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 2ed461e57..5fe02ce5d 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -92,6 +92,30 @@ static QRect elementGeometry(QWebEnginePage *page, const QString &id) return QRect(coords[0].toInt(), coords[1].toInt(), coords[2].toInt(), coords[3].toInt()); } +QT_BEGIN_NAMESPACE +namespace QTest { + int Q_TESTLIB_EXPORT defaultMouseDelay(); + + static void mouseEvent(QEvent::Type type, QWidget *widget, const QPoint &pos) + { + QTest::qWait(QTest::defaultMouseDelay()); + lastMouseTimestamp += QTest::defaultMouseDelay(); + QMouseEvent me(type, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + me.setTimestamp(++lastMouseTimestamp); + QSpontaneKeyEvent::setSpontaneous(&me); + qApp->sendEvent(widget, &me); + } + + static void mouseMultiClick(QWidget *widget, const QPoint pos, int clickCount) + { + for (int i = 0; i < clickCount; ++i) { + mouseEvent(QMouseEvent::MouseButtonPress, widget, pos); + mouseEvent(QMouseEvent::MouseButtonRelease, widget, pos); + } + lastMouseTimestamp += mouseDoubleClickInterval; + } +} +QT_END_NAMESPACE class tst_QWebEngineView : public QObject { @@ -133,6 +157,7 @@ private Q_SLOTS: void inputMethodsTextFormat(); void keyboardEvents(); void keyboardFocusAfterPopup(); + void mouseClick(); void postData(); void inputFieldOverridesShortcuts(); @@ -1222,6 +1247,76 @@ void tst_QWebEngineView::keyboardFocusAfterPopup() QTRY_COMPARE(evaluateJavaScriptSync(webView->page(), "document.getElementById('input1').value").toString(), QStringLiteral("x")); } +void tst_QWebEngineView::mouseClick() +{ + QWebEngineView view; + view.show(); + view.resize(200, 200); + QTest::qWaitForWindowExposed(&view); + + QSignalSpy loadFinishedSpy(&view, SIGNAL(loadFinished(bool))); + QSignalSpy selectionChangedSpy(&view, SIGNAL(selectionChanged())); + QPoint textInputCenter; + + // Single Click + view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, false); + selectionChangedSpy.clear(); + + view.setHtml("" + "
" + ""); + QVERIFY(loadFinishedSpy.wait()); + + QVERIFY(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString().isEmpty()); + textInputCenter = elementCenter(view.page(), "input"); + QTest::mouseClick(view.focusProxy(), Qt::LeftButton, 0, textInputCenter); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), QStringLiteral("input")); + QCOMPARE(selectionChangedSpy.count(), 0); + QVERIFY(view.focusProxy()->inputMethodQuery(Qt::ImCurrentSelection).toString().isEmpty()); + + // Double click + view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true); + selectionChangedSpy.clear(); + + view.setHtml("" + "
" + ""); + QVERIFY(loadFinishedSpy.wait()); + + textInputCenter = elementCenter(view.page(), "input"); + QTest::mouseMultiClick(view.focusProxy(), textInputCenter, 2); + QVERIFY(selectionChangedSpy.wait()); + QCOMPARE(selectionChangedSpy.count(), 1); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), QStringLiteral("input")); + QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImCurrentSelection).toString(), QStringLiteral("Company")); + + QTest::mouseClick(view.focusProxy(), Qt::LeftButton, 0, textInputCenter); + QVERIFY(selectionChangedSpy.wait()); + QCOMPARE(selectionChangedSpy.count(), 2); + QVERIFY(view.focusProxy()->inputMethodQuery(Qt::ImCurrentSelection).toString().isEmpty()); + + // Triple click + view.settings()->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true); + selectionChangedSpy.clear(); + + view.setHtml("" + "
" + ""); + QVERIFY(loadFinishedSpy.wait()); + + textInputCenter = elementCenter(view.page(), "input"); + QTest::mouseMultiClick(view.focusProxy(), textInputCenter, 3); + QVERIFY(selectionChangedSpy.wait()); + QTRY_COMPARE(selectionChangedSpy.count(), 2); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), QStringLiteral("input")); + QCOMPARE(view.focusProxy()->inputMethodQuery(Qt::ImCurrentSelection).toString(), QStringLiteral("The Qt Company")); + + QTest::mouseClick(view.focusProxy(), Qt::LeftButton, 0, textInputCenter); + QVERIFY(selectionChangedSpy.wait()); + QCOMPARE(selectionChangedSpy.count(), 3); + QVERIFY(view.focusProxy()->inputMethodQuery(Qt::ImCurrentSelection).toString().isEmpty()); +} + void tst_QWebEngineView::postData() { QMap postData; -- cgit v1.2.3