diff options
author | Sumedha Widyadharma <sumedha.widyadharma@basyskom.com> | 2014-08-07 16:05:05 +0200 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2014-12-15 15:15:38 +0100 |
commit | 9fdce8e443030ab99d31e42fffc977cf284c36c4 (patch) | |
tree | 692dae756b25c5ee433550a209e5f950d27b244e /tests/auto/qml/tst_multiclient.qml | |
parent | 0a43a43a166d2e2b551f543de61090637bd8b387 (diff) | |
download | qtwebchannel-9fdce8e443030ab99d31e42fffc977cf284c36c4.tar.gz |
Separate registered and autoregistered QObjects
Currently, a new client gets a list of _all_ registered QObjects,
whether they were explicitly registered or not.
This leaks internal information which the clients cannot use right away
anyway.
Change-Id: I4b25a731e9bc2d646f903057b409aecd34dc7f11
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Diffstat (limited to 'tests/auto/qml/tst_multiclient.qml')
-rw-r--r-- | tests/auto/qml/tst_multiclient.qml | 143 |
1 files changed, 142 insertions, 1 deletions
diff --git a/tests/auto/qml/tst_multiclient.qml b/tests/auto/qml/tst_multiclient.qml index b696391..115857d 100644 --- a/tests/auto/qml/tst_multiclient.qml +++ b/tests/auto/qml/tst_multiclient.qml @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> +** Copyright (C) 2014 basysKom GmbH, info@basyskom.com, author Lutz Schönemann <lutz.schoenemann@basyskom.com> ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtWebChannel module of the Qt Toolkit. @@ -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,85 @@ 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" + } + + QtObject { + id: myFactory + property var lastObj + property var createdObjects: [] + + function cleanup() { + while (createdObjects.length) { + var obj = createdObjects.shift(); + if (obj) { + obj.destroy(); + } + } + } + + function create(id) + { + lastObj = component.createObject(myFactory, {objectName: id}); + createdObjects.push(lastObj); + return lastObj; + } + 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(); + myFactory.lastObj = undefined; + // reschedule current task to end of event loop + wait(1); + } + function clientInitCallback(channel) { channel.objects.foo.ping.connect(function() { @@ -103,4 +173,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 = myFactory.lastObj; + 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 = myFactory.lastObj; + 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") + } } |