diff options
-rw-r--r-- | tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp | 56 | ||||
-rw-r--r-- | tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h | 21 |
2 files changed, 61 insertions, 16 deletions
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp index 4a09dca544..602de58b2c 100644 --- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp +++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp @@ -1057,6 +1057,38 @@ void tst_QDBusConnection::multipleInterfacesInQObject() QVERIFY_HOOKCALLED(); } +void tst_QDBusConnection::connectSignal() +{ + if (!QCoreApplication::instance()) + QSKIP("Test requires a QCoreApplication"); + + QDBusConnection con = QDBusConnection::sessionBus(); + + QDBusMessage signal = QDBusMessage::createSignal("/", "org.qtproject.TestCase", + "oneSignal"); + signal << "one parameter"; + + SignalReceiver recv; + QVERIFY(con.connect(con.baseService(), signal.path(), signal.interface(), + signal.member(), &recv, SLOT(oneSlot(QString)))); + QVERIFY(con.send(signal)); + QTest::qWait(100); + QCOMPARE(recv.argumentReceived, signal.arguments().at(0).toString()); + QCOMPARE(recv.signalsReceived, 1); + + // disconnect and try with a signature + recv.argumentReceived.clear(); + recv.signalsReceived = 0; + QVERIFY(con.disconnect(con.baseService(), signal.path(), signal.interface(), + signal.member(), &recv, SLOT(oneSlot(QString)))); + QVERIFY(con.connect(con.baseService(), signal.path(), signal.interface(), + signal.member(), "s", &recv, SLOT(oneSlot(QString)))); + QVERIFY(con.send(signal)); + QTest::qWait(100); + QCOMPARE(recv.argumentReceived, signal.arguments().at(0).toString()); + QCOMPARE(recv.signalsReceived, 1); +} + void tst_QDBusConnection::slotsWithLessParameters() { if (!QCoreApplication::instance()) @@ -1068,25 +1100,27 @@ void tst_QDBusConnection::slotsWithLessParameters() "oneSignal"); signal << "one parameter"; - signalsReceived = 0; + SignalReceiver recv; QVERIFY(con.connect(con.baseService(), signal.path(), signal.interface(), - signal.member(), this, SLOT(oneSlot()))); + signal.member(), &recv, SLOT(oneSlot()))); QVERIFY(con.send(signal)); QTest::qWait(100); - QCOMPARE(signalsReceived, 1); + QCOMPARE(recv.argumentReceived, QString()); + QCOMPARE(recv.signalsReceived, 1); // disconnect and try with a signature - signalsReceived = 0; + recv.signalsReceived = 0; QVERIFY(con.disconnect(con.baseService(), signal.path(), signal.interface(), - signal.member(), this, SLOT(oneSlot()))); + signal.member(), &recv, SLOT(oneSlot()))); QVERIFY(con.connect(con.baseService(), signal.path(), signal.interface(), - signal.member(), "s", this, SLOT(oneSlot()))); + signal.member(), "s", &recv, SLOT(oneSlot()))); QVERIFY(con.send(signal)); QTest::qWait(100); - QCOMPARE(signalsReceived, 1); + QCOMPARE(recv.argumentReceived, QString()); + QCOMPARE(recv.signalsReceived, 1); } -void tst_QDBusConnection::secondCallWithCallback() +void SignalReceiver::secondCallWithCallback() { QDBusConnection con = QDBusConnection::sessionBus(); QDBusMessage msg = QDBusMessage::createMethodCall(con.baseService(), "/test", QString(), @@ -1106,12 +1140,12 @@ void tst_QDBusConnection::nestedCallWithCallback() QDBusMessage msg = QDBusMessage::createMethodCall(connection.baseService(), "/test", QString(), "ThisFunctionDoesntExist"); - signalsReceived = 0; - connection.callWithCallback(msg, this, SLOT(exitLoop()), SLOT(secondCallWithCallback()), 10); + SignalReceiver recv; + connection.callWithCallback(msg, &recv, SLOT(exitLoop()), SLOT(secondCallWithCallback()), 10); QTestEventLoop::instance().enterLoop(15); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(signalsReceived, 1); + QCOMPARE(recv.signalsReceived, 1); QCOMPARE_HOOKCOUNT(2); } diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h index b9eb0d9db7..b4d689e6f4 100644 --- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h +++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h @@ -69,20 +69,30 @@ public: MyObjectWithoutInterface(QObject *parent = 0) : QObject(parent), callCount(0) {} }; -class tst_QDBusConnection: public QObject +class SignalReceiver : public QObject { Q_OBJECT - - int signalsReceived; public: - static int hookCallCount; - tst_QDBusConnection(); + QString argumentReceived; + int signalsReceived; + SignalReceiver() : signalsReceived(0) {} public slots: + void oneSlot(const QString &arg) { ++signalsReceived; argumentReceived = arg;} void oneSlot() { ++signalsReceived; } void exitLoop() { ++signalsReceived; QTestEventLoop::instance().exitLoop(); } void secondCallWithCallback(); +}; + +class tst_QDBusConnection: public QObject +{ + Q_OBJECT + +public: + static int hookCallCount; + tst_QDBusConnection(); +public slots: void init(); void cleanup(); @@ -115,6 +125,7 @@ private slots: void callSelfByAnotherName(); void multipleInterfacesInQObject(); + void connectSignal(); void slotsWithLessParameters(); void nestedCallWithCallback(); |