summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2015-03-10 07:18:31 -0700
committerSzabolcs David <davidsz@inf.u-szeged.hu>2015-03-11 15:57:51 +0000
commitd3905d85925a950ca32aa78eead6db7228be1330 (patch)
tree19c09ceafa14c87bf335b52992d98a90b3fbaddf
parent769b3a61f5d2abcb3f694ade95e1e8f1c505b75a (diff)
Add tst_javaScriptDialogs QML testv5.5.0-alpha1
Test alert, confirm and prompt dialogs via test support API. Change-Id: I9057a887491ac68e86ccd87181d4091323f6ee6f Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu> Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
-rw-r--r--src/webengine/api/qquickwebenginetestsupport.cpp50
-rw-r--r--src/webengine/api/qquickwebenginetestsupport_p.h25
-rw-r--r--src/webengine/api/qquickwebengineview.cpp6
-rw-r--r--src/webengine/plugin/testsupport/plugin.cpp2
-rw-r--r--tests/auto/quick/qmltests/data/alert.html8
-rw-r--r--tests/auto/quick/qmltests/data/confirm.html19
-rw-r--r--tests/auto/quick/qmltests/data/prompt.html12
-rw-r--r--tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml109
-rw-r--r--tests/auto/quick/qmltests/qmltests.pro4
9 files changed, 235 insertions, 0 deletions
diff --git a/src/webengine/api/qquickwebenginetestsupport.cpp b/src/webengine/api/qquickwebenginetestsupport.cpp
index d85e56e5..0bb16ae1 100644
--- a/src/webengine/api/qquickwebenginetestsupport.cpp
+++ b/src/webengine/api/qquickwebenginetestsupport.cpp
@@ -39,6 +39,34 @@
#include "qquickwebengineloadrequest_p.h"
QT_BEGIN_NAMESPACE
+using namespace QtWebEngineCore;
+
+QQuickWebEngineJavaScriptDialog::QQuickWebEngineJavaScriptDialog(QSharedPointer<JavaScriptDialogController> controller)
+{
+ m_dialogController = controller;
+}
+
+QString QQuickWebEngineJavaScriptDialog::message() const
+{
+ return m_dialogController->message();
+}
+
+QString QQuickWebEngineJavaScriptDialog::defaultValue() const
+{
+ return m_dialogController->defaultPrompt();
+}
+
+void QQuickWebEngineJavaScriptDialog::reject()
+{
+ QMetaObject::invokeMethod(m_dialogController.data(), "reject");
+}
+
+void QQuickWebEngineJavaScriptDialog::accept(const QString &input)
+{
+ if (!input.isNull())
+ QMetaObject::invokeMethod(m_dialogController.data(), "textProvided", Q_ARG(QString, input));
+ QMetaObject::invokeMethod(m_dialogController.data(), "accept");
+}
QQuickWebEngineErrorPage::QQuickWebEngineErrorPage()
{
@@ -70,6 +98,28 @@ QQuickWebEngineErrorPage *QQuickWebEngineTestSupport::errorPage() const
return m_errorPage.data();
}
+void QQuickWebEngineTestSupport::testDialog(QSharedPointer<JavaScriptDialogController> dialogController)
+{
+ Q_ASSERT(!dialogController.isNull());
+
+ QQuickWebEngineJavaScriptDialog dialog(dialogController);
+ switch (dialogController->type()) {
+ case WebContentsAdapterClient::AlertDialog:
+ Q_EMIT alertDialog(&dialog);
+ break;
+ case WebContentsAdapterClient::ConfirmDialog:
+ Q_EMIT confirmDialog(&dialog);
+ break;
+ case WebContentsAdapterClient::PromptDialog:
+ Q_EMIT promptDialog(&dialog);
+ break;
+ case WebContentsAdapterClient::InternalAuthorizationDialog:
+ break;
+ default:
+ Q_UNREACHABLE();
+ }
+}
+
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 832ac280..06950e41 100644
--- a/src/webengine/api/qquickwebenginetestsupport_p.h
+++ b/src/webengine/api/qquickwebenginetestsupport_p.h
@@ -39,6 +39,7 @@
#include <private/qtwebengineglobal_p.h>
+#include "javascript_dialog_controller.h"
#include <QObject>
#include <QUrl>
@@ -46,6 +47,24 @@ QT_BEGIN_NAMESPACE
class QQuickWebEngineLoadRequest;
+class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineJavaScriptDialog : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QString message READ message CONSTANT)
+ Q_PROPERTY(QString defaultValue READ defaultValue CONSTANT)
+
+public:
+ QQuickWebEngineJavaScriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>);
+ QString message() const;
+ QString defaultValue() const;
+
+public Q_SLOTS:
+ void reject();
+ void accept(const QString &input = QString());
+
+private:
+ QSharedPointer<QtWebEngineCore::JavaScriptDialogController> m_dialogController;
+};
+
class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineErrorPage : public QObject {
Q_OBJECT
@@ -66,6 +85,12 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineTestSupport : public QObject {
public:
QQuickWebEngineTestSupport();
QQuickWebEngineErrorPage *errorPage() const;
+ void testDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController> dialog);
+
+Q_SIGNALS:
+ void alertDialog(QQuickWebEngineJavaScriptDialog *dialog);
+ void confirmDialog(QQuickWebEngineJavaScriptDialog *dialog);
+ void promptDialog(QQuickWebEngineJavaScriptDialog *dialog);
private:
QScopedPointer<QQuickWebEngineErrorPage> m_errorPage;
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index f10ddbb0..4bc6cd08 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -229,6 +229,12 @@ void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const Q
void QQuickWebEngineViewPrivate::javascriptDialog(QSharedPointer<JavaScriptDialogController> dialog)
{
+#ifdef ENABLE_QML_TESTSUPPORT_API
+ if (m_testSupport) {
+ m_testSupport->testDialog(dialog);
+ return;
+ }
+#endif
ui()->showDialog(dialog);
}
diff --git a/src/webengine/plugin/testsupport/plugin.cpp b/src/webengine/plugin/testsupport/plugin.cpp
index 60e56062..667ffffd 100644
--- a/src/webengine/plugin/testsupport/plugin.cpp
+++ b/src/webengine/plugin/testsupport/plugin.cpp
@@ -55,6 +55,8 @@ public:
qmlRegisterType<QQuickWebEngineTestSupport>(uri, 1, 0, "WebEngineTestSupport");
qmlRegisterUncreatableType<QQuickWebEngineErrorPage>(uri, 1, 0, "WebEngineErrorPage",
QObject::tr("Cannot create a separate instance of WebEngineErrorPage"));
+ qmlRegisterUncreatableType<QQuickWebEngineJavaScriptDialog>(uri, 1, 0, "WebEngineJavaScriptDialog",
+ QObject::tr("Cannot create a separate instance of WebEngineJavaScriptDialog"));
}
};
diff --git a/tests/auto/quick/qmltests/data/alert.html b/tests/auto/quick/qmltests/data/alert.html
new file mode 100644
index 00000000..39a85351
--- /dev/null
+++ b/tests/auto/quick/qmltests/data/alert.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<html>
+<head>
+ <script> alert("Hello Qt"); </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/auto/quick/qmltests/data/confirm.html b/tests/auto/quick/qmltests/data/confirm.html
new file mode 100644
index 00000000..d7256a88
--- /dev/null
+++ b/tests/auto/quick/qmltests/data/confirm.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<html>
+<head>
+ <script>
+ document.title = "";
+ function updateTitle(accepted) {
+ if (accepted)
+ document.title += " ACCEPTED";
+ else
+ document.title += " REJECTED";
+ }
+
+ updateTitle(confirm("ACCEPT"));
+ updateTitle(confirm("REJECT"));
+ </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/auto/quick/qmltests/data/prompt.html b/tests/auto/quick/qmltests/data/prompt.html
new file mode 100644
index 00000000..ae5fbd07
--- /dev/null
+++ b/tests/auto/quick/qmltests/data/prompt.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<html>
+<head>
+ <script>
+ document.title = prompt("Please, reverse the default value", "Hello Qt");
+ if (prompt("REJECT") !== null)
+ document.title = "FAIL";
+ </script>
+</head>
+<body>
+</body>
+</html>
diff --git a/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml b/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml
new file mode 100644
index 00000000..da04fbd9
--- /dev/null
+++ b/tests/auto/quick/qmltests/data/tst_javaScriptDialogs.qml
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Quick Controls module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtTest 1.0
+import QtWebEngine 1.0
+import QtWebEngine.testsupport 1.0
+
+TestWebEngineView {
+ id: webEngineView
+
+ property string messageFromAlertDialog: ""
+ property int confirmCount: 0
+ property int promptCount: 0
+
+ testSupport: WebEngineTestSupport {
+ onAlertDialog: {
+ webEngineView.messageFromAlertDialog = dialog.message
+ dialog.accept()
+ }
+
+ onConfirmDialog: {
+ webEngineView.confirmCount += 1
+ if (dialog.message == "ACCEPT")
+ dialog.accept()
+ else
+ dialog.reject()
+ }
+
+ onPromptDialog: {
+ webEngineView.promptCount += 1
+ if (dialog.message == "REJECT")
+ dialog.reject()
+ else {
+ var reversedDefaultValue = dialog.defaultValue.split("").reverse().join("")
+ dialog.accept(reversedDefaultValue)
+ }
+ }
+ }
+
+ TestCase {
+ id: test
+ name: "WebEngineViewJavaScriptDialogs"
+
+ function init() {
+ webEngineView.messageFromAlertDialog = ""
+ webEngineView.confirmCount = 0
+ webEngineView.promptCount = 0
+ }
+
+ function test_alert() {
+ webEngineView.url = Qt.resolvedUrl("alert.html")
+ verify(webEngineView.waitForLoadSucceeded())
+ compare(webEngineView.messageFromAlertDialog, "Hello Qt")
+ }
+
+ function test_confirm() {
+ webEngineView.url = Qt.resolvedUrl("confirm.html")
+ verify(webEngineView.waitForLoadSucceeded())
+ compare(webEngineView.confirmCount, 2)
+ compare(webEngineView.title, "ACCEPTED REJECTED")
+ }
+
+ function test_prompt() {
+ webEngineView.url = Qt.resolvedUrl("prompt.html")
+ verify(webEngineView.waitForLoadSucceeded())
+ compare(webEngineView.promptCount, 2)
+ compare(webEngineView.title, "tQ olleH")
+ }
+ }
+}
diff --git a/tests/auto/quick/qmltests/qmltests.pro b/tests/auto/quick/qmltests/qmltests.pro
index b71f1beb..4b6795ae 100644
--- a/tests/auto/quick/qmltests/qmltests.pro
+++ b/tests/auto/quick/qmltests/qmltests.pro
@@ -6,11 +6,14 @@ IMPORTPATH += $$PWD/data
OTHER_FILES += \
$$PWD/data/TestWebEngineView.qml \
+ $$PWD/data/alert.html \
+ $$PWD/data/confirm.html \
$$PWD/data/favicon.html \
$$PWD/data/favicon.png \
$$PWD/data/favicon2.html \
$$PWD/data/javascript.html \
$$PWD/data/link.html \
+ $$PWD/data/prompt.html \
$$PWD/data/redirect.html \
$$PWD/data/small-favicon.png \
$$PWD/data/test1.html \
@@ -20,6 +23,7 @@ OTHER_FILES += \
$$PWD/data/keyboardModifierMapping.html \
$$PWD/data/tst_desktopBehaviorLoadHtml.qml \
$$PWD/data/tst_favIconLoad.qml \
+ $$PWD/data/tst_javaScriptDialogs.qml \
$$PWD/data/tst_linkHovered.qml \
$$PWD/data/tst_loadFail.qml \
$$PWD/data/tst_loadHtml.qml \