/**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include class tst_QDBusServiceWatcher: public QObject { Q_OBJECT QString serviceName; int testCounter; public: tst_QDBusServiceWatcher(); private slots: void initTestCase(); void init(); void watchForCreation(); void watchForDisappearance(); void watchForOwnerChange(); void modeChange(); }; tst_QDBusServiceWatcher::tst_QDBusServiceWatcher() : testCounter(0) { } void tst_QDBusServiceWatcher::initTestCase() { QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); } void tst_QDBusServiceWatcher::init() { // change the service name from test to test serviceName = "com.example.TestService" + QString::number(testCounter++); } void tst_QDBusServiceWatcher::watchForCreation() { QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForRegistration); 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(serviceRegistered(QString)), SLOT(exitLoop())); // 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); QCOMPARE(spyO.count(), 1); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QVERIFY(spyO.at(0).at(1).toString().isEmpty()); QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); spyR.clear(); spyU.clear(); spyO.clear(); // unregister it: con.unregisterService(serviceName); // and register again 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); QCOMPARE(spyO.count(), 1); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QVERIFY(spyO.at(0).at(1).toString().isEmpty()); QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); } void tst_QDBusServiceWatcher::watchForDisappearance() { QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); QDBusServiceWatcher watcher(serviceName, 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())); // register a name QVERIFY(con.registerService(serviceName)); // unregister it: con.unregisterService(serviceName); QTestEventLoop::instance().enterLoop(1); QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(spyR.count(), 0); QCOMPARE(spyU.count(), 1); QCOMPARE(spyU.at(0).at(0).toString(), serviceName); QCOMPARE(spyO.count(), 1); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QCOMPARE(spyO.at(0).at(1).toString(), con.baseService()); QVERIFY(spyO.at(0).at(2).toString().isEmpty()); } void tst_QDBusServiceWatcher::watchForOwnerChange() { QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForOwnerChange); 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(serviceRegistered(QString)), SLOT(exitLoop())); // 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); QCOMPARE(spyO.count(), 1); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QVERIFY(spyO.at(0).at(1).toString().isEmpty()); QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); spyR.clear(); spyU.clear(); spyO.clear(); // unregister it: con.unregisterService(serviceName); // and register again 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(), 1); QCOMPARE(spyU.at(0).at(0).toString(), serviceName); QCOMPARE(spyO.count(), 2); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QCOMPARE(spyO.at(0).at(1).toString(), con.baseService()); QVERIFY(spyO.at(0).at(2).toString().isEmpty()); QCOMPARE(spyO.at(1).at(0).toString(), serviceName); QVERIFY(spyO.at(1).at(1).toString().isEmpty()); QCOMPARE(spyO.at(1).at(2).toString(), con.baseService()); } void tst_QDBusServiceWatcher::modeChange() { QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForRegistration); 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(serviceRegistered(QString)), SLOT(exitLoop())); // 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); QCOMPARE(spyO.count(), 1); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QVERIFY(spyO.at(0).at(1).toString().isEmpty()); QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); spyR.clear(); spyU.clear(); spyO.clear(); watcher.setWatchMode(QDBusServiceWatcher::WatchForUnregistration); // unregister it: con.unregisterService(serviceName); QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceUnregistered(QString)), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(1); QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(spyR.count(), 0); QCOMPARE(spyU.count(), 1); QCOMPARE(spyU.at(0).at(0).toString(), serviceName); QCOMPARE(spyO.count(), 1); QCOMPARE(spyO.at(0).at(0).toString(), serviceName); QCOMPARE(spyO.at(0).at(1).toString(), con.baseService()); QVERIFY(spyO.at(0).at(2).toString().isEmpty()); } QTEST_MAIN(tst_QDBusServiceWatcher) #include "tst_qdbusservicewatcher.moc"