From cd883ae0436e0be1234cd0cde3c2e9a8b994d0e8 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 23 Sep 2005 16:24:36 +0000 Subject: adding an autotest and "dbus-ify" the build process and include scheme --- test/Makefile.am | 7 +- test/qt/Makefile.am | 26 +++++++ test/qt/tst_qdbusconnection.cpp | 164 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 test/qt/Makefile.am create mode 100644 test/qt/tst_qdbusconnection.cpp (limited to 'test') diff --git a/test/Makefile.am b/test/Makefile.am index 5f904887..a43d8f54 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -5,9 +5,12 @@ endif if HAVE_PYTHON PYTHON_SUBDIR=python endif +if HAVE_QTESTLIB + QT_SUBDIR=qt +endif -SUBDIRS=$(GLIB_SUBDIR) $(PYTHON_SUBDIR) -DIST_SUBDIRS=glib python +SUBDIRS=$(GLIB_SUBDIR) $(PYTHON_SUBDIR) $(QT_SUBDIR) +DIST_SUBDIRS=glib python qt INCLUDES=-I$(top_srcdir) $(DBUS_TEST_CFLAGS) diff --git a/test/qt/Makefile.am b/test/qt/Makefile.am new file mode 100644 index 00000000..553accd4 --- /dev/null +++ b/test/qt/Makefile.am @@ -0,0 +1,26 @@ +INCLUDES=-I$(top_srcdir) -I$(top_srcdir)/qt $(DBUS_CLIENT_CFLAGS) $(DBUS_QT_CFLAGS) $(DBUS_QTESTLIB_CFLAGS) -DDBUS_COMPILATION + +if DBUS_BUILD_TESTS +TEST_BINARIES=qdbusconnection +TESTS= +else +TEST_BINARIES= +TESTS= +endif + + +noinst_PROGRAMS= $(TEST_BINARIES) + +qdbusconnection_SOURCES= \ + tst_qdbusconnection.cpp + +$(top_srcdir)/test/qt/tst_qdbusconnection.cpp: tst_qdbusconnection.moc + +TEST_LIBS=$(DBUS_QTESTLIB_LIBS) $(top_builddir)/qt/libdbus-qt-1.la + +qdbusconnection_LDADD=$(TEST_LIBS) + +CLEANFILES=tst_qdbusconnection.moc + +%.moc: %.cpp + $(QT_MOC) $< > $@ diff --git a/test/qt/tst_qdbusconnection.cpp b/test/qt/tst_qdbusconnection.cpp new file mode 100644 index 00000000..50ed0bde --- /dev/null +++ b/test/qt/tst_qdbusconnection.cpp @@ -0,0 +1,164 @@ +#include +#include + +#include + +#include + +class tst_QDBusConnection: public QObject +{ + Q_OBJECT + +private slots: + void addConnection(); + void connect(); + void send(); + void sendAsync(); + void sendSignal(); +}; + +class QDBusSpy: public QObject +{ + Q_OBJECT +public slots: + void handlePing(const QString &str) { args.clear(); args << str; } + void asyncReply(const QDBusMessage &msg) { args << msg; serial = msg.replySerialNumber(); } + +public: + QList args; + int serial; +}; + +void tst_QDBusConnection::sendSignal() +{ + QDBusConnection con = QDBusConnection::addConnection( + QDBusConnection::SessionBus); + + VERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::signal("/org/kde/selftest", "org.kde.selftest", + "Ping"); + msg << QLatin1String("ping"); + + VERIFY(con.send(msg)); + + QTest::wait(1000); +} + +void tst_QDBusConnection::send() +{ + QDBusConnection con = QDBusConnection::addConnection( + QDBusConnection::SessionBus); + + VERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.DBus", + "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames"); + + QDBusMessage reply = con.sendWithReply(msg); + + COMPARE(reply.count(), 1); + COMPARE(reply.at(0).typeName(), "QStringList"); + VERIFY(reply.at(0).toStringList().contains(con.baseService())); +} + +void tst_QDBusConnection::sendAsync() +{ + QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus); + VERIFY(con.isConnected()); + + QDBusSpy spy; + + QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.DBus", + "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames"); + int msgId = con.sendWithReplyAsync(msg, &spy, SLOT(asyncReply(QDBusMessage))); + VERIFY(msgId != 0); + + QTest::wait(1000); + + COMPARE(spy.args.value(0).typeName(), "QStringList"); + VERIFY(spy.args.at(0).toStringList().contains(con.baseService())); + COMPARE(spy.serial, msgId); +} + +void tst_QDBusConnection::connect() +{ + QDBusSpy spy; + + QDBusConnection con = QDBusConnection::addConnection( + QDBusConnection::SessionBus); + + con.connect("/org/kde/selftest", "org.kde.selftest", "ping", &spy, + SLOT(handlePing(QString))); + + QDBusMessage msg = QDBusMessage::signal("/org/kde/selftest", "org.kde.selftest", + "ping"); + msg << QLatin1String("ping"); + + VERIFY(con.send(msg)); + + QTest::wait(1000); + + COMPARE(spy.args.count(), 1); + COMPARE(spy.args.at(0).toString(), QString("ping")); +} + +void tst_QDBusConnection::addConnection() +{ + { + QDBusConnection con = QDBusConnection::addConnection( + QDBusConnection::SessionBus, "bubu"); + + VERIFY(con.isConnected()); + VERIFY(!con.lastError().isValid()); + + QDBusConnection con2; + VERIFY(!con2.isConnected()); + VERIFY(!con2.lastError().isValid()); + + con2 = con; + VERIFY(con.isConnected()); + VERIFY(con2.isConnected()); + VERIFY(!con.lastError().isValid()); + VERIFY(!con2.lastError().isValid()); + } + + { + QDBusConnection con("bubu"); + VERIFY(con.isConnected()); + VERIFY(!con.lastError().isValid()); + } + + QDBusConnection::closeConnection("bubu"); + + { + QDBusConnection con("bubu"); + VERIFY(!con.isConnected()); + VERIFY(!con.lastError().isValid()); + } + + { + { + QDBusConnection con = QDBusConnection::addConnection( + QDBusConnection::SessionBus); + VERIFY(con.isConnected()); + } + + { + QDBusConnection con; + VERIFY(con.isConnected()); + QDBusConnection::closeConnection(); + VERIFY(con.isConnected()); + } + + { + QDBusConnection con; + VERIFY(!con.isConnected()); + } + } +} + +QTEST_MAIN(tst_QDBusConnection) + +#include "tst_qdbusconnection.moc" + -- cgit