diff options
Diffstat (limited to 'tests/auto/widgets/qwebengineview')
3 files changed, 189 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebengineview/resources/keyboardEvents.html b/tests/auto/widgets/qwebengineview/resources/keyboardEvents.html new file mode 100644 index 000000000..d536d849f --- /dev/null +++ b/tests/auto/widgets/qwebengineview/resources/keyboardEvents.html @@ -0,0 +1,98 @@ +<html> +<head> + <style> + div { + width: 300px; + margin-bottom: 10px; + } + + #div_container { + display: inline-block; + } + + #div_container div { + width: 100px; + height: 100px; + border: 2px solid black; + padding: 10px; + margin: 0 10px 0 10px; + float: left; + } + + #div_container div:focus { + border: 2px solid red; + } + + #form_container span { + display: block; + padding-bottom: 10px; + } + + #form_container label { + float: left; + text-align: right; + width: 50px; + margin-right: 20px; + } + </style> +</head> + +<body onload="document.getElementById('first_div').focus()"> + <div id="div_container"> + <div id="first_div" tabindex="0">First</div> + <div id="second_div" tabindex="0">Second</div> + </div> + + <div id="form_container"> + <form><fieldset> + <legend>Form</legend> + + <span> + <label for="text_input">text</label> + <input id="text_input" type="text" /> + </span> + + <span> + <input id="radio1" type="radio" name="radio">radio1</input> + <input id="radio2" type="radio" name="radio">radio2</input> + </span> + + <span> + <input id="checkbox1" type="checkbox" name="checkbox1" checked="true">checkbox1</input> + <input id="checkbox2" type="checkbox" name="checkbox2" checked="true">checkbox2</input> + </span> + + <span> + <label for="number_input">number</label> + <input id="number_input" type="number" min="0" max="10" value="5" /> + </span> + + <span> + <label for="range_input">range</label> + <input id="range_input" type="range" min="0" max="10" value="5" /> + </span> + + <span> + <label for="search_input">search</label> + <input id="search_input" type="search" value="test" /> + </span> + + <input id="submit_button" type="submit" value="Submit" /> + </fieldset></form> + </div> + + <div> + <select id="combobox"> + <option value="a">a</option> + <option value="b">b</option> + <option value="c">c</option> + </select> + </div> + + <div> + <a id="first_hyperlink" href="">First</a> + <br /> + <a id="second_hyperlink" href="">Second</a> + </div> +</body> +</html> diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 156c56933..9966ad9ee 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -82,6 +82,7 @@ private Q_SLOTS: void changeLocale(); void inputMethodsTextFormat_data(); void inputMethodsTextFormat(); + void keyboardEvents(); }; // This will be called before the first test function is executed. @@ -924,5 +925,94 @@ void tst_QWebEngineView::inputMethodsTextFormat() QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('input1').value").toString(), string); } +void tst_QWebEngineView::keyboardEvents() +{ + QWebEngineView view; + view.show(); + QSignalSpy loadFinishedSpy(&view, SIGNAL(loadFinished(bool))); + view.load(QUrl("qrc:///resources/keyboardEvents.html")); + QVERIFY(loadFinishedSpy.wait()); + + QStringList elements; + elements << "first_div" << "second_div"; + elements << "text_input" << "radio1" << "checkbox1" << "checkbox2"; + elements << "number_input" << "range_input" << "search_input"; + elements << "submit_button" << "combobox" << "first_hyperlink" << "second_hyperlink"; + + // Iterate over the elements of the test page with the Tab key. This tests whether any + // element blocks the in-page navigation by Tab. + for (const QString &elementId : elements) { + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), elementId); + QTest::keyPress(view.focusProxy(), Qt::Key_Tab); + } + + // Move back to the radio buttons with the Shift+Tab key combination + for (int i = 0; i < 10; ++i) + QTest::keyPress(view.focusProxy(), Qt::Key_Tab, Qt::ShiftModifier); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), QStringLiteral("radio2")); + + // Test the Space key by checking a radio button + QVERIFY(!evaluateJavaScriptSync(view.page(), "document.getElementById('radio2').checked").toBool()); + QTest::keyClick(view.focusProxy(), Qt::Key_Space); + QTRY_VERIFY(evaluateJavaScriptSync(view.page(), "document.getElementById('radio2').checked").toBool()); + + // Test the Left key by switching the radio button + QVERIFY(!evaluateJavaScriptSync(view.page(), "document.getElementById('radio1').checked").toBool()); + QTest::keyPress(view.focusProxy(), Qt::Key_Left); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.activeElement.id").toString(), QStringLiteral("radio1")); + QVERIFY(!evaluateJavaScriptSync(view.page(), "document.getElementById('radio2').checked").toBool()); + QVERIFY(evaluateJavaScriptSync(view.page(), "document.getElementById('radio1').checked").toBool()); + + // Test the Space key by unchecking a checkbox + evaluateJavaScriptSync(view.page(), "document.getElementById('checkbox1').focus()"); + QVERIFY(evaluateJavaScriptSync(view.page(), "document.getElementById('checkbox1').checked").toBool()); + QTest::keyClick(view.focusProxy(), Qt::Key_Space); + QTRY_VERIFY(!evaluateJavaScriptSync(view.page(), "document.getElementById('checkbox1').checked").toBool()); + + // Test the Up and Down keys by changing the value of a spinbox + evaluateJavaScriptSync(view.page(), "document.getElementById('number_input').focus()"); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('number_input').value").toInt(), 5); + QTest::keyPress(view.focusProxy(), Qt::Key_Up); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('number_input').value").toInt(), 6); + QTest::keyPress(view.focusProxy(), Qt::Key_Down); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('number_input').value").toInt(), 5); + + // Test the Left, Right, Home, PageUp, End and PageDown keys by changing the value of a slider + evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').focus()"); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("5")); + QTest::keyPress(view.focusProxy(), Qt::Key_Left); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("4")); + QTest::keyPress(view.focusProxy(), Qt::Key_Right); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("5")); + QTest::keyPress(view.focusProxy(), Qt::Key_Home); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("0")); + QTest::keyPress(view.focusProxy(), Qt::Key_PageUp); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("1")); + QTest::keyPress(view.focusProxy(), Qt::Key_End); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("10")); + QTest::keyPress(view.focusProxy(), Qt::Key_PageDown); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('range_input').value").toString(), QStringLiteral("9")); + + // Test the Escape key by removing the content of a search field + evaluateJavaScriptSync(view.page(), "document.getElementById('search_input').focus()"); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('search_input').value").toString(), QStringLiteral("test")); + QTest::keyPress(view.focusProxy(), Qt::Key_Escape); + QTRY_VERIFY(evaluateJavaScriptSync(view.page(), "document.getElementById('search_input').value").toString().isEmpty()); + + // Test the alpha keys by changing the values in a combobox + evaluateJavaScriptSync(view.page(), "document.getElementById('combobox').focus()"); + QCOMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('combobox').value").toString(), QStringLiteral("a")); + QTest::keyPress(view.focusProxy(), Qt::Key_B); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('combobox').value").toString(), QStringLiteral("b")); + // Must wait with the second key press to simulate selection of another element + QTest::keyPress(view.focusProxy(), Qt::Key_C, Qt::NoModifier, 1000); + QTRY_COMPARE(evaluateJavaScriptSync(view.page(), "document.getElementById('combobox').value").toString(), QStringLiteral("c")); + + // Test the Enter key by loading a page with a hyperlink + evaluateJavaScriptSync(view.page(), "document.getElementById('first_hyperlink').focus()"); + QTest::keyPress(view.focusProxy(), Qt::Key_Enter); + QVERIFY(loadFinishedSpy.wait()); +} + QTEST_MAIN(tst_QWebEngineView) #include "tst_qwebengineview.moc" diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc b/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc index b32b533c2..4809bbebf 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.qrc @@ -5,5 +5,6 @@ <file>resources/input_types.html</file> <file>resources/scrolltest_page.html</file> <file>resources/basic_printing_page.html</file> + <file>resources/keyboardEvents.html</file> </qresource> </RCC> |