tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
   101     void getStringSignal_data();
   101     void getStringSignal_data();
   102     void getStringSignal();
   102     void getStringSignal();
   103     void getComplexSignal_data();
   103     void getComplexSignal_data();
   104     void getComplexSignal();
   104     void getComplexSignal();
   105 
   105 
       
   106     void followSignal();
       
   107 
   106     void createErrors_data();
   108     void createErrors_data();
   107     void createErrors();
   109     void createErrors();
   108 
   110 
   109     void callErrors_data();
   111     void callErrors_data();
   110     void callErrors();
   112     void callErrors();
   128     qRegisterMetaType<UnregisteredType>();
   130     qRegisterMetaType<UnregisteredType>();
   129 }
   131 }
   130 
   132 
   131 void tst_QDBusAbstractInterface::initTestCase()
   133 void tst_QDBusAbstractInterface::initTestCase()
   132 {
   134 {
       
   135     // enable debugging temporarily:
       
   136     //putenv("QDBUS_DEBUG=1");
       
   137 
   133     // register the object
   138     // register the object
   134     QDBusConnection con = QDBusConnection::sessionBus();
   139     QDBusConnection con = QDBusConnection::sessionBus();
   135     QVERIFY(con.isConnected());
   140     QVERIFY(con.isConnected());
   136     con.registerObject("/", &targetObj, QDBusConnection::ExportScriptableContents);
   141     con.registerObject("/", &targetObj, QDBusConnection::ExportScriptableContents);
   137 }
   142 }
   430     QVERIFY(s[0].size() == 1);
   435     QVERIFY(s[0].size() == 1);
   431     QCOMPARE(s[0][0].userType(), qMetaTypeId<RegisteredType>());
   436     QCOMPARE(s[0][0].userType(), qMetaTypeId<RegisteredType>());
   432     QCOMPARE(s[0][0].value<RegisteredType>(), expectedValue);
   437     QCOMPARE(s[0][0].value<RegisteredType>(), expectedValue);
   433 }
   438 }
   434 
   439 
       
   440 void tst_QDBusAbstractInterface::followSignal()
       
   441 {
       
   442     const QString serviceToFollow = "com.trolltech.tst_qdbusabstractinterface.FollowMe";
       
   443     Pinger p = getPinger(serviceToFollow);
       
   444     QVERIFY2(p, "Not connected to D-Bus");
       
   445 
       
   446     QDBusConnection con = p->connection();
       
   447     QVERIFY(!con.interface()->isServiceRegistered(serviceToFollow));
       
   448     Pinger control = getPinger("");
       
   449 
       
   450     // we need to connect the signal somewhere in order for D-Bus to enable the rules
       
   451     QTestEventLoop::instance().connect(p.data(), SIGNAL(voidSignal()), SLOT(exitLoop()));
       
   452     QTestEventLoop::instance().connect(control.data(), SIGNAL(voidSignal()), SLOT(exitLoop()));
       
   453     QSignalSpy s(p.data(), SIGNAL(voidSignal()));
       
   454 
       
   455     emit targetObj.voidSignal();
       
   456     QTestEventLoop::instance().enterLoop(200);
       
   457     QVERIFY(!QTestEventLoop::instance().timeout());
       
   458 
       
   459     // signal must not have been received because the service isn't registered
       
   460     QVERIFY(s.isEmpty());
       
   461 
       
   462     // now register the service
       
   463     QDBusReply<QDBusConnectionInterface::RegisterServiceReply> r =
       
   464             con.interface()->registerService(serviceToFollow, QDBusConnectionInterface::DontQueueService,
       
   465                                              QDBusConnectionInterface::DontAllowReplacement);
       
   466     QVERIFY(r.isValid() && r.value() == QDBusConnectionInterface::ServiceRegistered);
       
   467     QVERIFY(con.interface()->isServiceRegistered(serviceToFollow));
       
   468     QCoreApplication::instance()->processEvents();
       
   469 
       
   470     // emit the signal again:
       
   471     emit targetObj.voidSignal();
       
   472     QTestEventLoop::instance().enterLoop(2);
       
   473     QVERIFY(!QTestEventLoop::instance().timeout());
       
   474 
       
   475     // now the signal must have been received:
       
   476     QCOMPARE(s.size(), 1);
       
   477     QVERIFY(s.at(0).size() == 0);
       
   478     s.clear();
       
   479 
       
   480     // disconnect the signal
       
   481     disconnect(p.data(), SIGNAL(voidSignal()), &QTestEventLoop::instance(), 0);
       
   482 
       
   483     // emit the signal again:
       
   484     emit targetObj.voidSignal();
       
   485     QTestEventLoop::instance().enterLoop(2);
       
   486     QVERIFY(!QTestEventLoop::instance().timeout());
       
   487 
       
   488     // and now it mustn't have been received
       
   489     QVERIFY(s.isEmpty());
       
   490 
       
   491     // cleanup:
       
   492     con.interface()->unregisterService(serviceToFollow);
       
   493 }
       
   494 
   435 void tst_QDBusAbstractInterface::createErrors_data()
   495 void tst_QDBusAbstractInterface::createErrors_data()
   436 {
   496 {
   437     QTest::addColumn<QString>("service");
   497     QTest::addColumn<QString>("service");
   438     QTest::addColumn<QString>("path");
   498     QTest::addColumn<QString>("path");
   439     QTest::addColumn<QString>("errorName");
   499     QTest::addColumn<QString>("errorName");