From 5fa3e2a82e380e1ab8c8701405206b11e561600c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 31 May 2016 11:31:15 -0300 Subject: tst_QDBusConnection: add a test for a regular signal connection Since it's a slot with the same name as an existing one, this test also verifies that QDBusConnection::connect() can properly distinguish between overloads. This test moves the receiver out of the main class, just to be sure that we don't leave connections behind when tests are run (like slotsWithLessParameters did). Change-Id: I87e17314d8b24ae983b1fffd1453ad81952c49aa Reviewed-by: Olivier Goffart (Woboq GmbH) --- .../dbus/qdbusconnection/tst_qdbusconnection.cpp | 56 +++++++++++++++++----- 1 file changed, 45 insertions(+), 11 deletions(-) (limited to 'tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp') 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); } -- cgit v1.2.3