35 #include <QCoreApplication>
36 #include <QDBusConnection>
38 #include <QDBusInterface>
39 #include <QDBusConnectionInterface>
42 # include <sys/types.h>
56 interface = msg.interface();
64 #ifdef HAS_HOOKSETUPFUNCTION
65 # define QCOMPARE_HOOKCOUNT(n) QCOMPARE(hookCallCount, n); hookCallCount = 0
66 # define QVERIFY_HOOKCALLED() QCOMPARE(hookCallCount, 1); hookCallCount = 0
69 # define QCOMPARE_HOOKCOUNT(n) qt_noop()
70 # define QVERIFY_HOOKCALLED() qt_noop()
86 void tst_QDBusConnection::noConnection()
93 "org.kde.selftest",
"Ping");
110 void tst_QDBusConnection::sendSignal()
123 void tst_QDBusConnection::sendSignalToName()
126 QSKIP(
"Test requires a QCoreApplication");
132 con.connect(
con.baseService(),
"/org/kde/selftest",
"org.kde.selftest",
"ping", &
spy,
137 "org.kde.selftest",
"ping");
146 void tst_QDBusConnection::sendSignalToOtherName()
149 QSKIP(
"Test requires a QCoreApplication");
155 con.connect(
con.baseService(),
"/org/kde/selftest",
"org.kde.selftest",
"ping", &
spy,
160 "org.kde.selftest",
"ping");
170 void tst_QDBusConnection::send()
177 "/org/freedesktop/DBus",
"org.freedesktop.DBus",
"ListNames");
183 QVERIFY(
reply.arguments().at(0).toStringList().contains(
con.baseService()));
186 void tst_QDBusConnection::sendWithGui()
189 QSKIP(
"Test requires a QCoreApplication");
196 "/org/freedesktop/DBus",
"org.freedesktop.DBus",
"ListNames");
202 QVERIFY(
reply.arguments().at(0).toStringList().contains(
con.baseService()));
205 void tst_QDBusConnection::sendAsync()
208 QSKIP(
"Test requires a QCoreApplication");
216 "/org/freedesktop/DBus",
"org.freedesktop.DBus",
"ListNames");
224 void tst_QDBusConnection::connect()
233 con.connect(
con.baseService(),
"/org/kde/selftest",
"org.kde.selftest",
"ping", &
spy,
246 void tst_QDBusConnection::connectToBus()
257 QVERIFY(con2.lastError().isValid());
263 QVERIFY(!con2.lastError().isValid());
298 void tst_QDBusConnection::connectToPeer()
312 "unix:abstract=/tmp/dbus-XXXXXXXXXX,guid=00000000000000000000000000000000",
"newconn2");
320 server.address(),
"bubu");
327 QVERIFY(con2.lastError().isValid());
333 QVERIFY(!con2.lastError().isValid());
359 void tst_QDBusConnection::registerObject_data()
361 QTest::addColumn<QString>(
"path");
370 void tst_QDBusConnection::registerObject()
392 void tst_QDBusConnection::registerObjectWithInterface_data()
394 QTest::addColumn<QString>(
"path");
395 QTest::addColumn<QString>(
"interface");
405 void tst_QDBusConnection::registerObjectWithInterface()
428 void tst_QDBusConnection::registerObjectPeer_data()
430 QTest::addColumn<QString>(
"path");
439 void tst_QDBusConnection::registerObjectPeer()
442 QSKIP(
"Test requires a QCoreApplication");
475 server.unregisterObject();
505 void tst_QDBusConnection::registerObject2()
586 con.unregisterObject(
"/p1/q2");
597 con.unregisterObject(
"/p2");
601 con.unregisterObject(
"/p1");
605 con.unregisterObject(
"/p1/q2/r");
609 con.unregisterObject(
"/p1/q");
613 con.unregisterObject(
"/p1/r");
624 void tst_QDBusConnection::registerObjectPeer2()
627 QSKIP(
"Test requires a QCoreApplication");
715 con.unregisterObject(
"/p1/q2");
726 con.unregisterObject(
"/p2");
730 con.unregisterObject(
"/p1");
734 con.unregisterObject(
"/p1/q2/r");
738 con.unregisterObject(
"/p1/q");
742 con.unregisterObject(
"/p1/r");
756 void tst_QDBusConnection::registerQObjectChildren()
767 a->setObjectName(
"a");
770 b->setObjectName(
"b");
773 c->setObjectName(
"c");
827 void tst_QDBusConnection::registerQObjectChildrenPeer()
830 QSKIP(
"Test requires a QCoreApplication");
848 a->setObjectName(
"a");
851 b->setObjectName(
"b");
854 c->setObjectName(
"c");
941 void tst_QDBusConnection::callSelf()
972 void tst_QDBusConnection::callSelfByAnotherName_data()
974 QTest::addColumn<int>(
"registerMethod");
980 void tst_QDBusConnection::callSelfByAnotherName()
983 QSKIP(
"Test requires a QCoreApplication");
994 con.connect(
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus",
"NameOwnerChanged",
999 QFETCH(
int, registerMethod);
1000 switch (registerMethod) {
1017 struct Deregisterer {
1021 ~Deregisterer() {
con.interface()->unregisterService(sname); }
1022 } deregisterer(
con, sname);
1026 con.disconnect(
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus",
"NameOwnerChanged",
1040 void tst_QDBusConnection::multipleInterfacesInQObject()
1051 "local.BaseObject",
"anotherMethod");
1058 void tst_QDBusConnection::connectSignal()
1061 QSKIP(
"Test requires a QCoreApplication");
1067 signal <<
"one parameter";
1097 void tst_QDBusConnection::slotsWithLessParameters()
1100 QSKIP(
"Test requires a QCoreApplication");
1106 signal <<
"one parameter";
1120 signal.member(),
"s", &recv,
SLOT(oneSlot())));
1128 signal.member(),
"s", &recv,
SLOT(oneSlot())));
1142 void tst_QDBusConnection::nestedCallWithCallback()
1145 QSKIP(
"Test requires a QCoreApplication");
1153 "ThisFunctionDoesntExist");
1163 void tst_QDBusConnection::serviceRegistrationRaceCondition()
1166 QSKIP(
"Test requires a QCoreApplication");
1177 const QString connectionName =
"testConnectionName";
1200 msg << connectionName;
1219 void tst_QDBusConnection::registerVirtualObject()
1225 QString childPath =
"/tree/node/child";
1226 QString childChildPath =
"/tree/node/child/another";
1267 QVERIFY(!
con.registerObject(childPath, &objectAtSubPath));
1274 QVERIFY(
con.registerObject(childPath, &objectAtSubPath));
1275 QCOMPARE(
con.objectRegisteredAt(childPath),
static_cast<QObject *
>(&objectAtSubPath));
1286 QVERIFY(
con.registerObject(childChildPath, &objectAtSubPath));
1287 QCOMPARE(
con.objectRegisteredAt(childChildPath),
static_cast<QObject *
>(&objectAtSubPath));
1299 void tst_QDBusConnection::callVirtualObject()
1302 QSKIP(
"Test requires a QCoreApplication");
1310 QString childPath =
"/tree/node/child";
1316 obj.replyArguments << 42 << 47u;
1331 reply.waitForFinished();
1337 obj.replyArguments.clear();
1338 obj.replyArguments << 99;
1355 obj.success =
false;
1369 void tst_QDBusConnection::callVirtualObjectLocal()
1375 QString childPath =
"/tree/node/child";
1381 obj.replyArguments << 42 << 47u;
1392 obj.replyArguments <<
QString(
"alien abduction");
1403 void tst_QDBusConnection::pendingCallWhenDisconnected()
1405 #if !QT_CONFIG(process)
1406 QSKIP(
"Test requires QProcess");
1409 QSKIP(
"Test requires a QCoreApplication");
1412 daemon.start(
"dbus-daemon",
QStringList() <<
"--session" <<
"--nofork" <<
"--print-address");
1413 QVERIFY2(daemon.waitForReadyRead(2000),
1414 "Daemon didn't print its address in time; error: \"" + daemon.errorString().toLocal8Bit() +
1415 "\"; stderr:\n" + daemon.readAllStandardError());
1419 QVERIFY2(
con.isConnected(), (
con.lastError().name() +
": " +
con.lastError().message()).toLocal8Bit());
1426 daemon.waitForFinished();
1432 reply.waitForFinished();
1444 #ifndef tst_QDBusConnection
QDBusConnection connection() const
void method(const QDBusMessage &msg)
void method(const QDBusMessage &msg)
The QByteArray class provides an array of bytes.
static QCoreApplication * instance()
static void processEvents(QEventLoop::ProcessEventsFlags flags=QEventLoop::AllEvents)
The QDBusConnection class represents a connection to the D-Bus bus daemon.
static QDBusConnection connectToPeer(const QString &address, const QString &name)
QDBusConnectionInterface * interface() const
static QDBusConnection connectToBus(BusType type, const QString &name)
QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode=QDBus::Block, int timeout=-1) const
bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
static QDBusConnection sessionBus()
static void disconnectFromPeer(const QString &name)
static void disconnectFromBus(const QString &name)
QString baseService() const
QDBusPendingCall asyncCall(const QDBusMessage &message, int timeout=-1) const
QDBusReply< bool > isServiceRegistered(const QString &serviceName) const
The QDBusInterface class is a proxy for interfaces on remote objects.
The QDBusMessage class represents one message sent or received over the D-Bus bus.
static QDBusMessage createSignal(const QString &path, const QString &interface, const QString &name)
QString errorName() const
QList< QVariant > arguments() const
static QDBusMessage createTargetedSignal(const QString &service, const QString &path, const QString &interface, const QString &name)
static QDBusMessage createMethodCall(const QString &destination, const QString &path, const QString &interface, const QString &method)
The QDBusPendingCall class refers to one pending asynchronous call.
QDBusMessage reply() const
The QDBusReply class stores the reply for a method call to a remote object.
The QDBusServer class provides peer-to-peer communication between processes on the same computer.
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
const_reference at(qsizetype i) const noexcept
T value(qsizetype i) const
qsizetype count() const noexcept
NetworkError error() const
The QObject class is the base class of all Qt objects.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
void setObjectName(const QString &name)
The QString class provides a Unicode character string.
static QString fromLocal8Bit(QByteArrayView ba)
static QString number(int, int base=10)
static QTestEventLoop & instance()
void secondCallWithCallback()
QString serviceName() const
bool callMethodPeer(const QDBusConnection &conn, const QString &path)
bool callMethod(const QDBusConnection &conn, const QString &path)
QSignalSpy spy(myCustomObject, SIGNAL(mySignal(int, QString, double)))
[0]
Q_TESTLIB_EXPORT QTestData & newRow(const char *dataTag)
bool qCompare(QString const &t1, QLatin1String const &t2, const char *actual, const char *expected, const char *file, int line)
Q_CORE_EXPORT void qWait(int ms)
QList< QString > QStringList
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage return DBusPendingCall DBusPendingCall return DBusPendingCall return dbus_int32_t return DBusServer * server
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
DBusConnection * connection
QT_BEGIN_NAMESPACE bool done
GLenum GLuint GLenum GLsizei const GLchar * message
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLbitfield GLuint64 timeout
[4]
GLuint GLuint64EXT address
GLsizei const GLchar *const * path
#define QTEST_MAIN(TestObject)
#define QSKIP(statement,...)
#define QFETCH(Type, name)
#define QTRY_COMPARE(expr, expected)
#define QVERIFY(statement)
#define QVERIFY2(statement, description)
#define QVERIFY_HOOKCALLED()
#define QCOMPARE_HOOKCOUNT(n)