summaryrefslogtreecommitdiff
path: root/tests/auto/qml/WebChannelTest.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/WebChannelTest.qml')
-rw-r--r--tests/auto/qml/WebChannelTest.qml157
1 files changed, 157 insertions, 0 deletions
diff --git a/tests/auto/qml/WebChannelTest.qml b/tests/auto/qml/WebChannelTest.qml
new file mode 100644
index 0000000..9a0baa9
--- /dev/null
+++ b/tests/auto/qml/WebChannelTest.qml
@@ -0,0 +1,157 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebChannel 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 QtWebChannel 1.0
+
+TestCase {
+ property var lastLoadStatus
+ property bool useWebViewTransport: false
+
+ // only run after the webchannel has finished initialization
+ when: webSocketTransport.baseUrl != ""
+
+ WebViewTransport {
+ id: webViewTransport
+ webViewExperimental: defaultView.experimental
+ }
+ WebSocketTransport {
+ id: webSocketTransport
+ }
+
+ TestWebView {
+ id: defaultView
+ }
+
+ WebChannel {
+ id: webChannel
+ }
+ property var webChannel: webChannel
+
+ SignalSpy {
+ id: rawMessageSpy
+ target: useWebViewTransport ? webViewTransport : webSocketTransport;
+ signalName: "onMessageReceived"
+ }
+ property var rawMessageSpy: rawMessageSpy
+ property var rawMessageIdx: 0;
+
+ function urlForFile(file)
+ {
+ verify(useWebViewTransport || webSocketTransport.baseUrl != "", "webSocketTransport.baseUrl is empty");
+ return "data/" + file + (!useWebViewTransport ? "?webChannelBaseUrl=" + webSocketTransport.baseUrl : "");
+ }
+
+ // load file in the given view or use the global one by default
+ function loadUrl(file, view)
+ {
+ if (useWebViewTransport) {
+ webChannel.disconnectFrom(webSocketTransport);
+ webChannel.connectTo(webViewTransport);
+ } else {
+ webChannel.disconnectFrom(webViewTransport);
+ webChannel.connectTo(webSocketTransport);
+ }
+ if (!view) {
+ view = defaultView;
+ }
+ view.url = urlForFile(file);
+ view.waitForLoaded();
+ }
+
+ function cleanup()
+ {
+ defaultView.clear();
+ rawMessageSpy.clear();
+ rawMessageIdx = 0;
+ }
+
+ function awaitRawMessage()
+ {
+ rawMessageSpy.wait(500);
+ if (rawMessageSpy.signalArguments.length <= rawMessageIdx) {
+ // still no message received, fail
+ return null;
+ }
+ return rawMessageSpy.signalArguments[rawMessageIdx++][0];
+ }
+
+ function awaitMessage()
+ {
+ var msg = awaitRawMessage()
+ if (!msg) {
+ return msg;
+ }
+ return JSON.parse(msg);
+ }
+
+ function awaitInit()
+ {
+ var msg = awaitMessage();
+ verify(msg);
+ verify(msg.data);
+ verify(msg.data.type);
+ compare(msg.data.type, qWebChannelMessageTypes.init);
+ }
+
+ function awaitIdle()
+ {
+ var msg = awaitMessage();
+ verify(msg);
+ verify(msg.data);
+ compare(msg.data.type, qWebChannelMessageTypes.idle);
+ verify(webChannel.test_clientIsIdle())
+ }
+
+ property var qWebChannelMessageTypes: ({
+ signal: 1,
+ propertyUpdate: 2,
+ init: 3,
+ idle: 4,
+ debug: 5,
+ invokeMethod: 6,
+ connectToSignal: 7,
+ disconnectFromSignal: 8,
+ setProperty: 9,
+ });
+}