summaryrefslogtreecommitdiffstats
path: root/tests/auto/dbus
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2013-03-13 12:03:11 -0700
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-19 07:03:25 +0100
commit537679cb1231d63825f839df9332701d2af35de1 (patch)
treee2d56072b2456c251232635e02b8d443c344712a /tests/auto/dbus
parentd2a98df9bcb113d9ef8ea0e7c1472875372706c7 (diff)
Fix wildcard signal disconnection in QDBusAbstractInterface
This has been broken forever, just like generic signal disconnection. It didn't use to show up before because in Qt 4, QObject's destructor would not call disconnectNotify(). Just like in the previous commit, we need to verify whether the signal was disconnected from the last receiver. A wildcard disconnect might be disconnecting only from a specific receiver. Task-number: QTBUG-29498 Change-Id: I0790128ea878fdf3ac563c99d96c6aa7d270e9a3 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
Diffstat (limited to 'tests/auto/dbus')
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
index 786592d018..308e12b9ab 100644
--- a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
@@ -1046,8 +1046,10 @@ void tst_QDBusAbstractInterface::connectDisconnect_data()
// we'd have to use QMetaObject::disconnectOne if we wanted just one
QTest::newRow("null") << 0 << 0;
QTest::newRow("connect-disconnect") << 1 << 1;
+ QTest::newRow("connect-disconnect-wildcard") << 1 << -1;
QTest::newRow("connect-twice") << 2 << 0;
QTest::newRow("connect-twice-disconnect") << 2 << 1;
+ QTest::newRow("connect-twice-disconnect-wildcard") << 2 << -1;
}
void tst_QDBusAbstractInterface::connectDisconnect()
@@ -1066,7 +1068,7 @@ void tst_QDBusAbstractInterface::connectDisconnect()
for (int i = 0; i < connectCount; ++i)
sr.connect(p.data(), SIGNAL(voidSignal()), SLOT(receive()));
if (disconnectCount)
- QObject::disconnect(p.data(), SIGNAL(voidSignal()), &sr, SLOT(receive()));
+ QObject::disconnect(p.data(), disconnectCount > 0 ? SIGNAL(voidSignal()) : 0, &sr, SLOT(receive()));
emit targetObj.voidSignal();
QTestEventLoop::instance().enterLoop(2);
@@ -1099,7 +1101,7 @@ void tst_QDBusAbstractInterface::connectDisconnectPeer()
for (int i = 0; i < connectCount; ++i)
sr.connect(p.data(), SIGNAL(voidSignal()), SLOT(receive()));
if (disconnectCount)
- QObject::disconnect(p.data(), SIGNAL(voidSignal()), &sr, SLOT(receive()));
+ QObject::disconnect(p.data(), disconnectCount > 0 ? SIGNAL(voidSignal()) : 0, &sr, SLOT(receive()));
QDBusMessage req = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "voidSignal");
QVERIFY(QDBusConnection::sessionBus().send(req));