summaryrefslogtreecommitdiffstats
path: root/tests/auto/dbus/qdbusabstractinterface
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/dbus/qdbusabstractinterface')
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp22
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp23
2 files changed, 27 insertions, 18 deletions
diff --git a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
index 49462d388c..e681d06102 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
@@ -59,9 +59,17 @@ public slots:
return QDBusServer::address();
}
- bool isConnected() const
+ void waitForConnected()
{
- return m_conn.isConnected();
+ if (callPendingReply.type() != QDBusMessage::InvalidMessage) {
+ sendErrorReply(QDBusError::NotSupported, "One call already pending!");
+ return;
+ }
+ if (m_conn.isConnected())
+ return;
+ // not connected, we'll reply later
+ setDelayedReply(true);
+ callPendingReply = message();
}
void reset()
@@ -87,16 +95,26 @@ public slots:
emit targetObj.complexSignal(reg);
}
+ void quit()
+ {
+ qApp->quit();
+ }
+
private slots:
void handleConnection(const QDBusConnection& con)
{
m_conn = con;
m_conn.registerObject("/", &targetObj, QDBusConnection::ExportScriptableContents);
+ if (callPendingReply.type() != QDBusMessage::InvalidMessage) {
+ QDBusConnection::sessionBus().send(callPendingReply.createReply());
+ callPendingReply = QDBusMessage();
+ }
}
private:
Interface targetObj;
QDBusConnection m_conn;
+ QDBusMessage callPendingReply;
};
int main(int argc, char *argv[])
diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
index 0cb29d121b..0b33f9b1cf 100644
--- a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
@@ -236,6 +236,7 @@ void tst_QDBusAbstractInterface::initTestCase()
#else
# define EXE ""
#endif
+ proc.setProcessChannelMode(QProcess::ForwardedErrorChannel);
proc.start(QFINDTESTDATA("qpinger/qpinger" EXE));
QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
QVERIFY(proc.waitForReadyRead());
@@ -252,19 +253,10 @@ void tst_QDBusAbstractInterface::initTestCase()
void tst_QDBusAbstractInterface::cleanupTestCase()
{
- // Kill peer, resetting the object exported by a separate process
-#ifdef Q_OS_WIN
- proc.kill(); // non-GUI processes don't respond to QProcess::terminate()
-#else
- proc.terminate();
-#endif
- QVERIFY(proc.waitForFinished() || proc.state() == QProcess::NotRunning);
-
- // Wait until the service is certainly not registered
- QDBusConnection con = QDBusConnection::sessionBus();
- if (con.isConnected()) {
- QTRY_VERIFY(!con.interface()->isServiceRegistered(serviceName));
- }
+ QDBusMessage msg = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "quit");
+ QDBusConnection::sessionBus().call(msg);
+ proc.waitForFinished(200);
+ proc.close();
}
void tst_QDBusAbstractInterface::init()
@@ -276,10 +268,9 @@ void tst_QDBusAbstractInterface::init()
QDBusConnection peercon = QDBusConnection::connectToPeer(peerAddress, "peer");
QVERIFY(peercon.isConnected());
- QDBusMessage req2 = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "isConnected");
+ QDBusMessage req2 = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "waitForConnected");
QDBusMessage rpl2 = con.call(req2);
- QVERIFY(rpl2.type() == QDBusMessage::ReplyMessage);
- QVERIFY(rpl2.arguments().at(0).toBool());
+ QVERIFY2(rpl2.type() == QDBusMessage::ReplyMessage, rpl2.errorMessage().toLatin1());
}
void tst_QDBusAbstractInterface::cleanup()