/******************************************************************************** Copyright (C) 2010 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$** No Commercial Usage** This file contains pre-release code and may not be distributed.** You may use this file in accordance with the terms and conditions** contained in the Technology Preview License Agreement accompanying** this package.**** GNU Lesser General Public License Usage** Alternatively, 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.**** If you have questions regarding the use of this file, please contact** Nokia at qt-info@nokia.com.****************** $QT_END_LICENSE$******************************************************************************/#include <QtDBus/QDBusServiceWatcher>#include <QtDBus>#include <QtTest>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"