diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/qml/disconnect.html | 24 | ||||
-rw-r--r-- | tests/qml/tst_metaobjectpublisher.qml | 41 |
2 files changed, 64 insertions, 1 deletions
diff --git a/tests/qml/disconnect.html b/tests/qml/disconnect.html new file mode 100644 index 0000000..f4cbb0a --- /dev/null +++ b/tests/qml/disconnect.html @@ -0,0 +1,24 @@ +<html> + <head> + <script type="text/javascript" src="qrc:///qwebchannel/webchannel.js"></script> + <script type="text/javascript" src="qrc:///qwebchannel/qobject.js"></script> + <script type="text/javascript"> + //BEGIN SETUP + var baseUrl = (/[?&]webChannelBaseUrl=([A-Za-z0-9\-:/\.]+)/.exec(location.search)[1]); + new QWebChannel(baseUrl, function(channel) { + setupQObjectWebChannel(channel, function() { + myObj.mySignal.connect(function(arg) { + channel.exec({label: "mySignalReceived", args: [arg]}); + myObj.mySignal.disconnect(this); + }); + channel.subscribe("report", function() { + channel.exec({label: "report"}); + }); + }); + }); + //END SETUP + </script> + </head> + <body> + </body> +</html> diff --git a/tests/qml/tst_metaobjectpublisher.qml b/tests/qml/tst_metaobjectpublisher.qml index afbf624..4754c3d 100644 --- a/tests/qml/tst_metaobjectpublisher.qml +++ b/tests/qml/tst_metaobjectpublisher.qml @@ -85,7 +85,10 @@ WebChannelTest { onRawMessageReceived: { var message = JSON.parse(rawMessage); verify(message); - publisher.handleRequest(message); + var handled = publisher.handleRequest(message); + if (message.data && message.data.type) { + verify(handled); + } } } } @@ -263,4 +266,40 @@ WebChannelTest { compare(msg.data.label, "report"); compare(msg.data.obj, {}); } + + function test_disconnect() + { + loadUrl("disconnect.html"); + awaitInit(); + + var msg = awaitMessage(); + compare(msg.data.type, "Qt.connectToSignal"); + compare(msg.data.signal, "mySignal"); + compare(msg.data.object, "myObj"); + verify(publisher.subscriberCountMap["myObj"].hasOwnProperty("mySignal")); + + awaitIdle(); + + myObj.mySignal(42); + + msg = awaitMessage(); + compare(msg.data.label, "mySignalReceived"); + compare(msg.data.args, [42]); + + msg = awaitMessage(); + compare(msg.data.type, "Qt.disconnectFromSignal"); + compare(msg.data.object, "myObj"); + compare(msg.data.signal, "mySignal"); + + verify(!publisher.subscriberCountMap["myObj"].hasOwnProperty("mySignal")); + + myObj.mySignal(0); + + // apparently one cannot expect failure in QML, so trigger another message + // and verify no mySignalReceived was triggered by the above emission + webChannel.sendMessage("report"); + + msg = awaitMessage(); + compare(msg.data.label, "report"); + } } |