summaryrefslogtreecommitdiff
path: root/tests/auto/qml/tst_multiclient.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/tst_multiclient.qml')
-rw-r--r--tests/auto/qml/tst_multiclient.qml156
1 files changed, 149 insertions, 7 deletions
diff --git a/tests/auto/qml/tst_multiclient.qml b/tests/auto/qml/tst_multiclient.qml
index b696391..d646349 100644
--- a/tests/auto/qml/tst_multiclient.qml
+++ b/tests/auto/qml/tst_multiclient.qml
@@ -1,7 +1,8 @@
/****************************************************************************
**
** 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
+** Copyright (C) 2014 basysKom GmbH, info@basyskom.com, author Lutz Schönemann <lutz.schoenemann@basyskom.com>
+** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtWebChannel module of the Qt Toolkit.
**
@@ -10,9 +11,9 @@
** 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.
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
@@ -23,8 +24,8 @@
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** 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
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
@@ -37,6 +38,8 @@ import QtTest 1.0
import QtWebChannel 1.0
import QtWebChannel.Tests 1.0
+import "qrc:///qtwebchannel/qwebchannel.js" as JSClient
+
TestCase {
name: "MultiClient"
@@ -62,18 +65,86 @@ TestCase {
WebChannel.id: "foo"
}
+ property var lastMethodArg
+ QtObject {
+ id: myObj
+ property int myProperty: 1
+
+ signal mySignal(var arg)
+
+ function myMethod(arg)
+ {
+ lastMethodArg = arg;
+ }
+
+ WebChannel.id: "myObj"
+ }
+
+ QtObject {
+ id: myOtherObj
+ property var foo: 1
+ property var bar: 1
+ WebChannel.id: "myOtherObj"
+ }
+
+ property var lastFactoryObj
+ property var createdFactoryObjects: []
+ QtObject {
+ id: myFactory
+
+ function cleanup() {
+ while (createdFactoryObjects.length) {
+ var obj = createdFactoryObjects.shift();
+ if (obj) {
+ obj.destroy();
+ }
+ }
+ }
+
+ function create(id)
+ {
+ lastFactoryObj = component.createObject(myFactory, {objectName: id});
+ createdFactoryObjects.push(lastFactoryObj);
+ return lastFactoryObj;
+ }
+ WebChannel.id: "myFactory"
+ }
+
+ Component {
+ id: component
+ QtObject {
+ property var myProperty : 0
+ function myMethod(arg) {
+ lastMethodArg = arg;
+ }
+ signal mySignal(var arg1, var arg2)
+ }
+ }
+
TestWebChannel {
id: webChannel
transports: [client1.serverTransport, client2.serverTransport]
- registeredObjects: [foo]
+ registeredObjects: [foo, myObj, myOtherObj, myFactory]
}
function init()
{
+ myObj.myProperty = 1
client1.cleanup();
client2.cleanup();
}
+ function cleanup() {
+ client1.debug = false;
+ client2.debug = false;
+ // delete all created objects
+ myFactory.cleanup();
+ lastFactoryObj = undefined;
+ createdFactoryObjects = [];
+ // reschedule current task to end of event loop
+ wait(1);
+ }
+
function clientInitCallback(channel)
{
channel.objects.foo.ping.connect(function() {
@@ -103,4 +174,75 @@ TestCase {
compare(c1.pongAnswer, 1);
compare(c2.pongAnswer, 2);
}
+
+ function test_autowrappedObjectsNotInInit() {
+ var testObj1;
+ var testObj1Id;
+
+ var channel1 = client1.createChannel(function (channel1) {
+ channel1.objects.myFactory.create("testObj1", function (obj1) {
+ testObj1 = lastFactoryObj;
+ testObj1Id = obj1.__id__;
+
+ // create second channel after factory has created first
+ // object to make sure that a dynamically created object
+ // exists but does not get exposed to new channels
+ createSecondChannel();
+ });
+ });
+ var channel2;
+ function createSecondChannel() {
+ // dismiss all messges received before channel creation
+ client2.cleanup();
+
+ channel2 = client2.createChannel(function (channel2) {
+ });
+ }
+
+ client1.awaitInit();
+ var msg1 = client1.awaitMessage();
+ compare(msg1.type, JSClient.QWebChannelMessageTypes.invokeMethod); // create
+
+ client1.awaitIdle();
+
+ client2.awaitInit();
+ client2.awaitIdle();
+
+ compare(typeof channel2.objects[testObj1Id], "undefined")
+ }
+
+ function test_autowrappedObjectsNotBroadcasted() {
+ var testObj2;
+ var testObj2Id;
+
+ var channel1 = client1.createChannel(function (channel1) {
+ // create second channel after first channel to make sure
+ // that a dynamically created object do not get exposed to
+ // existing channels
+ createSecondChannel();
+ });
+ var channel2;
+ function createSecondChannel() {
+ // dismiss all messges received before channel creation
+ client2.cleanup();
+
+ channel2 = client2.createChannel(function (channel2) {
+ channel2.objects.myFactory.create("testObj2", function (obj2) {
+ testObj2 = lastFactoryObj;
+ testObj2Id = obj2.__id__;
+ });
+ });
+ }
+
+ client1.awaitInit();
+ client1.awaitIdle();
+
+ client2.awaitInit();
+ var msg2 = client2.awaitMessage();
+ compare(msg2.type, JSClient.QWebChannelMessageTypes.invokeMethod); // create
+
+ client2.awaitIdle();
+
+ compare(typeof channel1.objects[testObj2Id], "undefined")
+ }
}