diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/quick/qmltests/data/tst_unhandledKeyEventPropagation.qml | 46 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp | 43 |
2 files changed, 58 insertions, 31 deletions
diff --git a/tests/auto/quick/qmltests/data/tst_unhandledKeyEventPropagation.qml b/tests/auto/quick/qmltests/data/tst_unhandledKeyEventPropagation.qml index 906dc1658..69aa76b77 100644 --- a/tests/auto/quick/qmltests/data/tst_unhandledKeyEventPropagation.qml +++ b/tests/auto/quick/qmltests/data/tst_unhandledKeyEventPropagation.qml @@ -57,24 +57,40 @@ Item { } function test_keyboardModifierMapping() { - webEngineView.loadHtml("<input type='text'/>") - webEngineView.waitForLoadSucceeded() - webEngineView.runJavaScript("document.body.firstChild.focus()") + webEngineView.url = Qt.resolvedUrl("keyboardEvents.html"); + verify(webEngineView.waitForLoadSucceeded()); - keyPress(Qt.Key_A) - keyRelease(Qt.Key_A) - keyPress(Qt.Key_Left) - keyRelease(Qt.Key_Left) - keyPress(Qt.Key_Left) - keyRelease(Qt.Key_Left) + webEngineView.runJavaScript("document.getElementById('first_div').focus()"); + webEngineView.verifyElementHasFocus("first_div"); - tryCompare(parentItem.pressEvents, "length", 1) - compare(parentItem.pressEvents[0], Qt.Key_Left) + keyPress(Qt.Key_Right); + keyRelease(Qt.Key_Right); + // Right arrow key is unhandled thus focus is not changed + tryCompare(parentItem.releaseEvents, "length", 1); + webEngineView.verifyElementHasFocus("first_div"); - tryCompare(parentItem.releaseEvents, "length", 3) - compare(parentItem.releaseEvents[0], Qt.Key_A) - compare(parentItem.releaseEvents[1], Qt.Key_Left) - compare(parentItem.releaseEvents[2], Qt.Key_Left) + keyPress(Qt.Key_Tab); + keyRelease(Qt.Key_Tab); + // Tab key is handled thus focus is changed + tryCompare(parentItem.releaseEvents, "length", 2); + webEngineView.verifyElementHasFocus("second_div"); + + keyPress(Qt.Key_Left); + keyRelease(Qt.Key_Left); + // Left arrow key is unhandled thus focus is not changed + tryCompare(parentItem.releaseEvents, "length", 3); + webEngineView.verifyElementHasFocus("second_div"); + + // The page will consume the Tab key to change focus between elements while the arrow + // keys won't be used. + compare(parentItem.pressEvents.length, 2); + compare(parentItem.pressEvents[0], Qt.Key_Right); + compare(parentItem.pressEvents[1], Qt.Key_Left); + + // Key releases will all come back unconsumed. + compare(parentItem.releaseEvents[0], Qt.Key_Right); + compare(parentItem.releaseEvents[1], Qt.Key_Tab); + compare(parentItem.releaseEvents[2], Qt.Key_Left); } } } diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 0451a8c0f..3b683e541 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -378,29 +378,40 @@ void tst_QWebEngineView::unhandledKeyEventPropagation() parentWidget.show(); QTest::qWaitForWindowExposed(&webView); - QSignalSpy loadSpy(&webView, SIGNAL(loadFinished(bool))); - webView.setHtml("<input type='text'/>"); - QTRY_COMPARE(loadSpy.count(), 1); + QSignalSpy loadFinishedSpy(&webView, SIGNAL(loadFinished(bool))); + webView.load(QUrl("qrc:///resources/keyboardEvents.html")); + QVERIFY(loadFinishedSpy.wait()); - evaluateJavaScriptSync(webView.page(), "document.body.firstChild.focus()"); + evaluateJavaScriptSync(webView.page(), "document.getElementById('first_div').focus()"); + QTRY_COMPARE(evaluateJavaScriptSync(webView.page(), "document.activeElement.id").toString(), QStringLiteral("first_div")); + + QTest::sendKeyEvent(QTest::Press, webView.focusProxy(), Qt::Key_Right, QString(), Qt::NoModifier); + QTest::sendKeyEvent(QTest::Release, webView.focusProxy(), Qt::Key_Right, QString(), Qt::NoModifier); + // Right arrow key is unhandled thus focus is not changed + QTRY_COMPARE(parentWidget.releaseEvents.size(), 1); + QCOMPARE(evaluateJavaScriptSync(webView.page(), "document.activeElement.id").toString(), QStringLiteral("first_div")); + + QTest::sendKeyEvent(QTest::Press, webView.focusProxy(), Qt::Key_Tab, QString(), Qt::NoModifier); + QTest::sendKeyEvent(QTest::Release, webView.focusProxy(), Qt::Key_Tab, QString(), Qt::NoModifier); + // Tab key is handled thus focus is changed + QTRY_COMPARE(parentWidget.releaseEvents.size(), 2); + QCOMPARE(evaluateJavaScriptSync(webView.page(), "document.activeElement.id").toString(), QStringLiteral("second_div")); - QTest::sendKeyEvent(QTest::Press, webView.focusProxy(), Qt::Key_A, 'a', Qt::NoModifier); - QTest::sendKeyEvent(QTest::Release, webView.focusProxy(), Qt::Key_A, 'a', Qt::NoModifier); - QTest::sendKeyEvent(QTest::Press, webView.focusProxy(), Qt::Key_Left, QString(), Qt::NoModifier); - QTest::sendKeyEvent(QTest::Release, webView.focusProxy(), Qt::Key_Left, QString(), Qt::NoModifier); QTest::sendKeyEvent(QTest::Press, webView.focusProxy(), Qt::Key_Left, QString(), Qt::NoModifier); QTest::sendKeyEvent(QTest::Release, webView.focusProxy(), Qt::Key_Left, QString(), Qt::NoModifier); - - // All this happens asychronously, wait for the last release event to know when we're done. + // Left arrow key is unhandled thus focus is not changed QTRY_COMPARE(parentWidget.releaseEvents.size(), 3); + QCOMPARE(evaluateJavaScriptSync(webView.page(), "document.activeElement.id").toString(), QStringLiteral("second_div")); + + // The page will consume the Tab key to change focus between elements while the arrow + // keys won't be used. + QCOMPARE(parentWidget.pressEvents.size(), 2); + QCOMPARE(parentWidget.pressEvents[0].key(), (int)Qt::Key_Right); + QCOMPARE(parentWidget.pressEvents[1].key(), (int)Qt::Key_Left); - // The page will consume the 'a' and the first left key presses, the second left won't be - // used since the cursor will already be at the left end of the text input. // Key releases will all come back unconsumed. - QCOMPARE(parentWidget.pressEvents.size(), 1); - QCOMPARE(parentWidget.pressEvents[0].key(), (int)Qt::Key_Left); - QCOMPARE(parentWidget.releaseEvents[0].key(), (int)Qt::Key_A); - QCOMPARE(parentWidget.releaseEvents[1].key(), (int)Qt::Key_Left); + QCOMPARE(parentWidget.releaseEvents[0].key(), (int)Qt::Key_Right); + QCOMPARE(parentWidget.releaseEvents[1].key(), (int)Qt::Key_Tab); QCOMPARE(parentWidget.releaseEvents[2].key(), (int)Qt::Key_Left); } |