[Telepathy-commits] [telepathy-qt4/master] tests/pinocchio/conn-basics.cpp: new test, exercising Connect()
Simon McVittie
simon.mcvittie at collabora.co.uk
Thu Nov 27 09:39:15 PST 2008
---
tests/pinocchio/Makefile.am | 12 ++-
tests/pinocchio/conn-basics.cpp | 209 +++++++++++++++++++++++++++++++++++++++
2 files changed, 220 insertions(+), 1 deletions(-)
create mode 100644 tests/pinocchio/conn-basics.cpp
diff --git a/tests/pinocchio/Makefile.am b/tests/pinocchio/Makefile.am
index 55ed855..df76694 100644
--- a/tests/pinocchio/Makefile.am
+++ b/tests/pinocchio/Makefile.am
@@ -3,9 +3,11 @@
if HAVE_PINOCCHIO
TESTS = \
+ test-conn-basics \
test-do-nothing
BUILT_SOURCES = \
+ _gen/conn-basics.cpp.moc.hpp \
_gen/do-nothing.cpp.moc.hpp \
_gen/lib.h.moc.hpp
@@ -15,14 +17,22 @@ _gen/%.moc.hpp: %
noinst_PROGRAMS = $(TESTS)
+test_conn_basics_SOURCES = conn-basics.cpp
+test_conn_basics_LDADD = $(noinst_LTLIBRARIES) $(ALL_LIBS)
+
test_do_nothing_SOURCES = do-nothing.cpp
-test_do_nothing_LDADD = $(TP_QT4_LIBS) $(QTTEST_LIBS) $(noinst_LTLIBRARIES)
+test_do_nothing_LDADD = $(noinst_LTLIBRARIES) $(ALL_LIBS)
LIB_CFLAGS = \
$(QTCORE_CFLAGS) \
$(QTDBUS_CFLAGS) \
$(QTTEST_CFLAGS) \
$(TP_QT4_CFLAGS)
+ALL_LIBS = \
+ $(QTCORE_LIBS) \
+ $(QTDBUS_LIBS) \
+ $(QTTEST_LIBS) \
+ $(TP_QT4_LIBS)
AM_CXXFLAGS = \
$(ERROR_CXXFLAGS) \
diff --git a/tests/pinocchio/conn-basics.cpp b/tests/pinocchio/conn-basics.cpp
new file mode 100644
index 0000000..2fb9439
--- /dev/null
+++ b/tests/pinocchio/conn-basics.cpp
@@ -0,0 +1,209 @@
+#include <QtCore/QDebug>
+#include <QtCore/QTimer>
+
+#include <QtDBus/QtDBus>
+
+#include <TelepathyQt4/Client/Connection>
+#include <TelepathyQt4/Client/ConnectionManager>
+
+#include <tests/pinocchio/lib.h>
+
+using namespace Telepathy::Client;
+
+class TestConnBasics : public PinocchioTest
+{
+ Q_OBJECT
+
+private:
+ Telepathy::Client::ConnectionManagerInterface* mCM;
+ QString mConnBusName;
+ QString mConnObjectPath;
+ Connection *mConn;
+
+protected Q_SLOTS:
+ void expectNotYetConnected(uint);
+ void expectReady(uint);
+ void expectSuccessfulCall(QDBusPendingCallWatcher*);
+
+private Q_SLOTS:
+ void initTestCase();
+ void init();
+
+ void testInitialIntrospection();
+ void testConnect();
+
+ void cleanup();
+ void cleanupTestCase();
+};
+
+
+void TestConnBasics::initTestCase()
+{
+ initTestCaseImpl();
+
+ // Wait for the CM to start up
+ QVERIFY(waitForPinocchio(5000));
+
+ // Escape to the low-level API to make a Connection; this uses
+ // pseudo-blocking calls for simplicity. Do not do this in production code
+
+ mCM = new Telepathy::Client::ConnectionManagerInterface(
+ pinocchioBusName(), pinocchioObjectPath());
+
+ QDBusPendingReply<QString, QDBusObjectPath> reply;
+ QVariantMap parameters;
+ parameters.insert(QLatin1String("account"),
+ QVariant::fromValue(QString::fromAscii("empty")));
+ parameters.insert(QLatin1String("password"),
+ QVariant::fromValue(QString::fromAscii("s3kr1t")));
+
+ reply = mCM->RequestConnection("dummy", parameters);
+ reply.waitForFinished();
+ if (!reply.isValid()) {
+ qWarning().nospace() << reply.error().name()
+ << ": " << reply.error().message();
+ QVERIFY(reply.isValid());
+ }
+ mConnBusName = reply.argumentAt<0>();
+ mConnObjectPath = reply.argumentAt<1>().path();
+}
+
+
+void TestConnBasics::init()
+{
+ initImpl();
+
+ mConn = new Connection(mConnBusName, mConnObjectPath);
+}
+
+
+void TestConnBasics::expectNotYetConnected(uint newReadiness)
+{
+ switch (newReadiness) {
+ case Connection::ReadinessJustCreated:
+ qWarning() << "Changing from JustCreated to JustCreated is silly";
+ mLoop->exit(1);
+ break;
+ case Connection::ReadinessNotYetConnected:
+ qDebug() << "Correctly changed to NotYetConnected";
+ mLoop->exit(0);
+ break;
+ case Connection::ReadinessConnecting:
+ case Connection::ReadinessFull:
+ case Connection::ReadinessDead:
+ qWarning() << "Got too far!";
+ mLoop->exit(2);
+ break;
+ default:
+ qWarning().nospace() << "What sort of readiness is "
+ << newReadiness << "?!";
+ mLoop->exit(3);
+ break;
+ }
+}
+
+
+void TestConnBasics::testInitialIntrospection()
+{
+ QCOMPARE(mConn->readiness(), Connection::ReadinessJustCreated);
+
+ // Wait for introspection to run (readiness changes to NYC)
+ QVERIFY(connect(mConn, SIGNAL(readinessChanged(uint)),
+ this, SLOT(expectNotYetConnected(uint))));
+ QCOMPARE(mLoop->exec(), 0);
+ QVERIFY(disconnect(mConn, SIGNAL(readinessChanged(uint)),
+ this, SLOT(expectNotYetConnected(uint))));
+}
+
+
+void TestConnBasics::expectSuccessfulCall(QDBusPendingCallWatcher* watcher)
+{
+ QDBusPendingReply<> reply = *watcher;
+
+ if (reply.isError()) {
+ qWarning().nospace() << reply.error().name()
+ << ": " << reply.error().message();
+ mLoop->exit(1);
+ return;
+ }
+
+ mLoop->exit(0);
+}
+
+
+void TestConnBasics::expectReady(uint newReadiness)
+{
+ switch (newReadiness) {
+ case Connection::ReadinessJustCreated:
+ qWarning() << "Changing from NYC to JustCreated is silly";
+ mLoop->exit(1);
+ break;
+ case Connection::ReadinessNotYetConnected:
+ qWarning() << "Changing from NYC to NYC is silly";
+ mLoop->exit(2);
+ break;
+ case Connection::ReadinessConnecting:
+ /* do nothing */
+ break;
+ case Connection::ReadinessFull:
+ qDebug() << "Ready";
+ mLoop->exit(0);
+ break;
+ case Connection::ReadinessDead:
+ qWarning() << "Dead!";
+ mLoop->exit(3);
+ break;
+ default:
+ qWarning().nospace() << "What sort of readiness is "
+ << newReadiness << "?!";
+ mLoop->exit(4);
+ break;
+ }
+}
+
+
+void TestConnBasics::testConnect()
+{
+ testInitialIntrospection();
+
+ // FIXME: should have convenience API
+ qDebug() << "calling Connect()";
+
+ QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(
+ mConn->Connect());
+ QVERIFY(connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(expectSuccessfulCall(QDBusPendingCallWatcher*))));
+ QCOMPARE(mLoop->exec(), 0);
+ delete watcher;
+
+ // Wait for readiness to reach Full
+
+ qDebug() << "waiting for Full readiness";
+ QVERIFY(connect(mConn, SIGNAL(readinessChanged(uint)),
+ this, SLOT(expectReady(uint))));
+ QCOMPARE(mLoop->exec(), 0);
+ QVERIFY(disconnect(mConn, SIGNAL(readinessChanged(uint)),
+ this, SLOT(expectReady(uint))));
+}
+
+
+void TestConnBasics::cleanup()
+{
+ delete mConn;
+ mConn = NULL;
+
+ cleanupImpl();
+}
+
+
+void TestConnBasics::cleanupTestCase()
+{
+ delete mCM;
+ mCM = NULL;
+
+ cleanupTestCaseImpl();
+}
+
+
+QTEST_MAIN(TestConnBasics)
+#include "_gen/conn-basics.cpp.moc.hpp"
--
1.5.6.5
More information about the Telepathy-commits
mailing list