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"); |