diff options
Diffstat (limited to 'tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp')
-rw-r--r-- | tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp b/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp index 9dd2e4bb83..e7fa1e6484 100644 --- a/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp +++ b/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp @@ -49,8 +49,11 @@ private slots: void watchForCreation(); void watchForDisappearance(); + void watchForDisappearanceUniqueConnection(); void watchForOwnerChange(); void modeChange(); + void disconnectedConnection(); + void setConnection(); }; tst_QDBusServiceWatcher::tst_QDBusServiceWatcher() @@ -155,6 +158,40 @@ void tst_QDBusServiceWatcher::watchForDisappearance() QVERIFY(spyO.at(0).at(2).toString().isEmpty()); } +void tst_QDBusServiceWatcher::watchForDisappearanceUniqueConnection() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + // second connection + QString watchedName = QDBusConnection::connectToBus(QDBusConnection::SessionBus, "session2").baseService(); + QVERIFY(!watchedName.isEmpty()); + + QDBusServiceWatcher watcher(watchedName, con, QDBusServiceWatcher::WatchForUnregistration); + watcher.setObjectName("watcher for disappearance"); + + QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString))); + QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString))); + QSignalSpy spyO(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceUnregistered(QString)), SLOT(exitLoop())); + + // unregister it: + QDBusConnection::disconnectFromBus("session2"); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 0); + + QCOMPARE(spyU.count(), 1); + QCOMPARE(spyU.at(0).at(0).toString(), watchedName); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), watchedName); + QCOMPARE(spyO.at(0).at(1).toString(), watchedName); + QVERIFY(spyO.at(0).at(2).toString().isEmpty()); +} + void tst_QDBusServiceWatcher::watchForOwnerChange() { QDBusConnection con = QDBusConnection::sessionBus(); @@ -263,5 +300,72 @@ void tst_QDBusServiceWatcher::modeChange() QVERIFY(spyO.at(0).at(2).toString().isEmpty()); } +void tst_QDBusServiceWatcher::disconnectedConnection() +{ + QDBusConnection con(""); + QVERIFY(!con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForRegistration); + watcher.addWatchedService("com.example.somethingelse"); + watcher.addWatchedService("org.freedesktop.DBus"); + + watcher.setWatchMode(QDBusServiceWatcher::WatchForUnregistration); + watcher.setWatchMode(QDBusServiceWatcher::WatchForOwnerChange); + + watcher.setWatchedServices(QStringList()); +} + +void tst_QDBusServiceWatcher::setConnection() +{ + // begin with a disconnected connection + QDBusConnection con(""); + QVERIFY(!con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForRegistration); + + QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString))); + QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString))); + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), SLOT(exitLoop())); + + // move to the session bus + con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + watcher.setConnection(con); + + // register a name + QVERIFY(con.registerService(serviceName)); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 1); + QCOMPARE(spyR.at(0).at(0).toString(), serviceName); + QCOMPARE(spyU.count(), 0); + + // is the system bus available? + if (!QDBusConnection::systemBus().isConnected()) + return; + + // connect to the system bus and ask to watch that base service + QString watchedName = QDBusConnection::connectToBus(QDBusConnection::SystemBus, "system2").baseService(); + watcher.setWatchedServices(QStringList() << watchedName); + watcher.setWatchMode(QDBusServiceWatcher::WatchForUnregistration); + + // move to the system bus + watcher.setConnection(QDBusConnection::systemBus()); + spyR.clear(); + spyU.clear(); + + QDBusConnection::disconnectFromBus("system2"); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 0); + + QCOMPARE(spyU.count(), 1); + QCOMPARE(spyU.at(0).at(0).toString(), watchedName); +} + QTEST_MAIN(tst_QDBusServiceWatcher) #include "tst_qdbusservicewatcher.moc" |