summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/qml/disconnect.html24
-rw-r--r--tests/qml/tst_metaobjectpublisher.qml41
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");
+ }
}