diff options
Diffstat (limited to 'tests/auto/quick')
13 files changed, 277 insertions, 12 deletions
diff --git a/tests/auto/quick/CMakeLists.txt b/tests/auto/quick/CMakeLists.txt index 1d38470b3..88cf8a3be 100644 --- a/tests/auto/quick/CMakeLists.txt +++ b/tests/auto/quick/CMakeLists.txt @@ -5,6 +5,7 @@ add_subdirectory(qtbug-70248) add_subdirectory(inspectorserver) add_subdirectory(qmltests) add_subdirectory(qquickwebengineview) +add_subdirectory(uidelegates) if(QT_FEATURE_webenginequick_testsupport) add_subdirectory(qquickwebengineviewgraphics) endif() diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/qmldir b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/qmldir deleted file mode 100644 index f0d8f33b7..000000000 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls1Delegates/qmldir +++ /dev/null @@ -1 +0,0 @@ -module QtWebEngine.Controls1Delegates diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/qmldir b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/qmldir deleted file mode 100644 index 5542aba58..000000000 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/qmldir +++ /dev/null @@ -1 +0,0 @@ -module QtWebEngine.Controls2Delegates diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/AlertDialog.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/AlertDialog.qml index 252678754..252678754 100644 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/AlertDialog.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/AlertDialog.qml diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/ConfirmDialog.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/ConfirmDialog.qml index c4d3dd183..c4d3dd183 100644 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/ConfirmDialog.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/ConfirmDialog.qml diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/FilePicker.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/FilePicker.qml index 0ba92f5ce..0ba92f5ce 100644 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/FilePicker.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/FilePicker.qml diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/Menu.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/Menu.qml index aa03a9d30..aa03a9d30 100644 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/Menu.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/Menu.qml diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/MenuItem.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/MenuItem.qml index dcc1ca4b6..dcc1ca4b6 100644 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/MenuItem.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/MenuItem.qml diff --git a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/PromptDialog.qml b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/PromptDialog.qml index 800481797..800481797 100644 --- a/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/Controls2Delegates/PromptDialog.qml +++ b/tests/auto/quick/qmltests/mock-delegates/QtWebEngine/ControlsDelegates/PromptDialog.qml diff --git a/tests/auto/quick/qmltests/qmltests.pro b/tests/auto/quick/qmltests/qmltests.pro index c5755e46a..bc034790e 100644 --- a/tests/auto/quick/qmltests/qmltests.pro +++ b/tests/auto/quick/qmltests/qmltests.pro @@ -134,17 +134,15 @@ OTHER_FILES += \ $$PWD/data/icons/qt32.ico \ $$PWD/data/icons/qtmulti.ico \ $$PWD/data/icons/small-favicon.png \ - $$PWD/mock-delegates/QtWebEngine/Controls1Delegates/qmldir \ $$PWD/mock-delegates/TestParams/FilePickerParams.qml \ $$PWD/mock-delegates/TestParams/JSDialogParams.qml \ $$PWD/mock-delegates/TestParams/qmldir \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/AlertDialog.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/ConfirmDialog.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/FilePicker.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/Menu.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/MenuItem.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/PromptDialog.qml \ - $$PWD/mock-delegates/QtWebEngine/Controls2Delegates/qmldir + $$PWD/mock-delegates/QtWebEngine/ControlsDelegates/AlertDialog.qml \ + $$PWD/mock-delegates/QtWebEngine/ControlsDelegates/ConfirmDialog.qml \ + $$PWD/mock-delegates/QtWebEngine/ControlsDelegates/FilePicker.qml \ + $$PWD/mock-delegates/QtWebEngine/ControlsDelegates/Menu.qml \ + $$PWD/mock-delegates/QtWebEngine/ControlsDelegates/MenuItem.qml \ + $$PWD/mock-delegates/QtWebEngine/ControlsDelegates/PromptDialog.qml OTHER_FILES += $$QML_TESTS diff --git a/tests/auto/quick/qmltests/tst_qmltests.cpp b/tests/auto/quick/qmltests/tst_qmltests.cpp index 653972dfd..a60994f85 100644 --- a/tests/auto/quick/qmltests/tst_qmltests.cpp +++ b/tests/auto/quick/qmltests/tst_qmltests.cpp @@ -153,8 +153,6 @@ int main(int argc, char **argv) sigaction(SIGSEGV, &sigAction, 0); #endif - // TODO: temporary solution. Remove when Quick Controls 1 is removed. - qputenv("QTWEBENGINE_DIALOG_SET", QByteArray("QtQuickControls2")); QScopedPointer<Application> app; // Force to use English language for testing due to error message checks QLocale::setDefault(QLocale("en")); diff --git a/tests/auto/quick/uidelegates/CMakeLists.txt b/tests/auto/quick/uidelegates/CMakeLists.txt new file mode 100644 index 000000000..d8699ccfc --- /dev/null +++ b/tests/auto/quick/uidelegates/CMakeLists.txt @@ -0,0 +1,14 @@ +include(../../httpserver/httpserver.cmake) +include(../../util/util.cmake) + +qt_internal_add_test(tst_uidelegates + SOURCES + tst_uidelegates.cpp + LIBRARIES + Qt::WebEngineCorePrivate + Qt::WebEngineQuick + Qt::GuiPrivate + Qt::WebEngineQuickPrivate + Test::HttpServer + Test::Util +) diff --git a/tests/auto/quick/uidelegates/tst_uidelegates.cpp b/tests/auto/quick/uidelegates/tst_uidelegates.cpp new file mode 100644 index 000000000..95f083f12 --- /dev/null +++ b/tests/auto/quick/uidelegates/tst_uidelegates.cpp @@ -0,0 +1,256 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testwindow.h" +#include "quickutil.h" + +#include <QScopedPointer> +#include <QtQml/QQmlEngine> +#include <QtTest/QtTest> +#include <QtWebEngineQuick/private/qquickwebengineview_p.h> +#include <httpserver.h> +#include <QNetworkProxy> +#include <QObject> + +class tst_UIDelegates : public QObject +{ + Q_OBJECT +public: + tst_UIDelegates(); + +private Q_SLOTS: + void init(); + void initTestCase(); + void cleanup(); + void javaScriptDialog(); + void javaScriptDialog_data(); + void fileDialog(); + void contextMenu(); + void tooltip(); + void colorDialog(); + void authenticationDialog_data(); + void authenticationDialog(); + +private: + inline QQuickWebEngineView *newWebEngineView(); + inline QQuickWebEngineView *webEngineView() const; + void runJavaScript(const QString &script); + QScopedPointer<TestWindow> m_window; + QScopedPointer<QQmlComponent> m_component; +}; + +tst_UIDelegates::tst_UIDelegates() +{ + QtWebEngineQuick::initialize(); + static QQmlEngine *engine = new QQmlEngine(this); + m_component.reset(new QQmlComponent(engine, this)); + m_component->setData(QByteArrayLiteral("import QtQuick\n" + "import QtWebEngine\n" + "WebEngineView {}"), + QUrl()); +} + +QQuickWebEngineView *tst_UIDelegates::newWebEngineView() +{ + QObject *viewInstance = m_component->create(); + QQuickWebEngineView *webEngineView = qobject_cast<QQuickWebEngineView *>(viewInstance); + return webEngineView; +} + +void tst_UIDelegates::init() +{ + m_window.reset(new TestWindow(newWebEngineView())); +} + +void tst_UIDelegates::initTestCase() +{ + QNetworkProxy proxy; + proxy.setType(QNetworkProxy::HttpProxy); + proxy.setHostName("localhost"); + proxy.setPort(5555); + QNetworkProxy::setApplicationProxy(proxy); +} + +void tst_UIDelegates::cleanup() +{ + m_window.reset(); +} + +inline QQuickWebEngineView *tst_UIDelegates::webEngineView() const +{ + return static_cast<QQuickWebEngineView *>(m_window->webEngineView.data()); +} + +void tst_UIDelegates::runJavaScript(const QString &script) +{ + webEngineView()->runJavaScript(script); +} + +void tst_UIDelegates::javaScriptDialog_data() +{ + QTest::addColumn<QString>("javaScriptCode"); + QTest::addColumn<QString>("expectedObjectName"); + + QTest::newRow("AlertDialog") << QString("alert('This is the Alert Dialog!');") + << QString("alertDialog"); + QTest::newRow("ConfirmDialog") << QString("confirm('This is the Confirm Dialog.');") + << QString("confirmDialog"); + QTest::newRow("PromptDialog") << QString("prompt('Is this the Prompt Dialog?', 'Yes');") + << QString("promptDialog"); +} + +void tst_UIDelegates::javaScriptDialog() +{ + QFETCH(QString, javaScriptCode); + QFETCH(QString, expectedObjectName); + + m_window->show(); + QTRY_VERIFY(qApp->focusObject()); + QQuickWebEngineView *view = webEngineView(); + + view->loadHtml("<html><body>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + + runJavaScript(javaScriptCode); + QTRY_VERIFY(view->findChild<QObject *>(expectedObjectName)); +} + +void tst_UIDelegates::fileDialog() +{ + QSKIP("There is no FilePicker Control in Quick Controls 2."); + m_window->show(); + QTRY_VERIFY(qApp->focusObject()); + QQuickWebEngineView *view = webEngineView(); + + view->loadHtml("<html><body>" + "<input type='file' id='filePicker'/>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + QString filePickerStr = QStringLiteral("filePicker"); + + QPoint filePickerCenter = elementCenter(view, filePickerStr); + QTest::mouseClick(view->window(), Qt::LeftButton, {}, filePickerCenter); + QTRY_VERIFY(view->findChild<QObject *>(filePickerStr)); +} + +void tst_UIDelegates::contextMenu() +{ + m_window->show(); + QTRY_VERIFY(qApp->focusObject()); + QQuickWebEngineView *view = webEngineView(); + + view->loadHtml("<html><body>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + + QTest::mouseClick(view->window(), Qt::RightButton); + QTRY_VERIFY(view->findChild<QObject *>(QStringLiteral("menu"))); +} + +void tst_UIDelegates::tooltip() +{ + m_window->show(); + QTRY_VERIFY(qApp->focusObject()); + QQuickWebEngineView *view = webEngineView(); + + view->loadHtml("<html><body>" + "<p id='toolTip' title='I'm a tooltip.'>Hover this text to display a tooltip</p>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + QString toolTipStr = QStringLiteral("toolTip"); + + QPoint tooltipCenter = elementCenter(view, toolTipStr); + QPoint windowCenter = QPoint(view->window()->width() / 2, view->window()->height() / 2); + QVERIFY(tooltipCenter.x() == windowCenter.x()); + + int distance = windowCenter.y() - tooltipCenter.y(); + for (int i = 3; i > 0; i--) { + QTest::mouseMove(view->window(), QPoint(windowCenter.x(), windowCenter.y() - distance / i)); + } + QTRY_VERIFY(view->findChild<QObject *>(toolTipStr)); +} + +void tst_UIDelegates::colorDialog() +{ + QSKIP("There is no ColorPicker Control in Quick Controls 2."); + m_window->show(); + QTRY_VERIFY(qApp->focusObject()); + QQuickWebEngineView *view = webEngineView(); + + view->loadHtml("<html><body>" + "<input type='color' id='colorPicker'>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + + QPoint filePickerCenter = elementCenter(view, QStringLiteral("colorPicker")); + QTest::mouseClick(view->window(), Qt::LeftButton, {}, filePickerCenter); + QTRY_VERIFY(view->findChild<QObject *>(QStringLiteral("colorDialog"))); +} + +void tst_UIDelegates::authenticationDialog_data() +{ + QTest::addColumn<QUrl>("url"); + QTest::addColumn<QByteArray>("response"); + + QTest::newRow("Http Authentication Dialog") + << QUrl("http://localhost:5555/") + << QByteArrayLiteral("HTTP/1.1 401 Unauthorized\nWWW-Authenticate: " + "Basic realm=\"Very Restricted Area\"\r\n\r\n"); + QTest::newRow("Proxy Authentication Dialog") + << QUrl("http://qt.io/") + << QByteArrayLiteral("HTTP/1.1 407 Proxy Auth Required\nProxy-Authenticate: " + "Basic realm=\"Proxy requires authentication\"\r\n" + "content-length: 0\r\n\r\n"); +} + +void tst_UIDelegates::authenticationDialog() +{ + QFETCH(QUrl, url); + QFETCH(QByteArray, response); + + HttpServer server(QHostAddress::LocalHost, 5555); + connect(&server, &HttpServer::newRequest, + [url, response](HttpReqRep *rr) { rr->sendResponse(response); }); + QVERIFY(server.start()); + + m_window->show(); + QTRY_VERIFY(qApp->focusObject()); + QQuickWebEngineView *view = webEngineView(); + view->loadHtml("<html><body>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + + view->setUrl(url); + QTRY_VERIFY(view->findChild<QObject *>(QStringLiteral("authenticationDialog"))); + QVERIFY(server.stop()); +} + +QTEST_MAIN(tst_UIDelegates) +#include "tst_uidelegates.moc" +#include "moc_quickutil.cpp" |