telepathy-qt: tests: add test for Contact Conn.I.ClientTypes support
Dario Freddi
drf at kemper.freedesktop.org
Thu Jul 5 06:06:02 PDT 2012
Module: telepathy-qt
Branch: master
Commit: 30df9cbb5c0c03492c47cf03b0192dd31e6ba716
URL: http://cgit.freedesktop.org/telepathy/telepathy-qt/commit/?id=30df9cbb5c0c03492c47cf03b0192dd31e6ba716
Author: George Kiagiadakis <george.kiagiadakis at collabora.com>
Date: Thu Jul 5 13:29:31 2012 +0300
tests: add test for Contact Conn.I.ClientTypes support
---
tests/dbus/CMakeLists.txt | 1 +
tests/dbus/contacts-client-types.cpp | 170 ++++++++++++++++++++++++++++++++++
2 files changed, 171 insertions(+), 0 deletions(-)
diff --git a/tests/dbus/CMakeLists.txt b/tests/dbus/CMakeLists.txt
index 96f7743..fe8c7e0 100644
--- a/tests/dbus/CMakeLists.txt
+++ b/tests/dbus/CMakeLists.txt
@@ -60,6 +60,7 @@ if(ENABLE_TP_GLIB_TESTS)
tpqt_add_dbus_unit_test(Contacts contacts tp-glib-tests)
tpqt_add_dbus_unit_test(ContactsAvatar contacts-avatar tp-glib-tests tp-qt-tests-glib-helpers)
tpqt_add_dbus_unit_test(ContactsCapabilities contacts-capabilities tp-glib-tests tp-qt-tests-glib-helpers)
+ tpqt_add_dbus_unit_test(ContactsClientTypes contacts-client-types tp-glib-tests tp-qt-tests-glib-helpers)
tpqt_add_dbus_unit_test(ContactsInfo contacts-info tp-glib-tests tp-qt-tests-glib-helpers)
tpqt_add_dbus_unit_test(ContactsLocation contacts-location tp-glib-tests tp-qt-tests-glib-helpers)
tpqt_add_dbus_unit_test(DBusProxyFactory dbus-proxy-factory tp-glib-tests telepathy-qt-test-backdoors)
diff --git a/tests/dbus/contacts-client-types.cpp b/tests/dbus/contacts-client-types.cpp
new file mode 100644
index 0000000..003a87f
--- /dev/null
+++ b/tests/dbus/contacts-client-types.cpp
@@ -0,0 +1,170 @@
+#include <tests/lib/test.h>
+
+#include <tests/lib/glib-helpers/test-conn-helper.h>
+
+#include <tests/lib/glib/contacts-conn.h>
+
+#include <TelepathyQt/Connection>
+#include <TelepathyQt/Contact>
+#include <TelepathyQt/ContactManager>
+#include <TelepathyQt/PendingContacts>
+#include <TelepathyQt/PendingStringList>
+
+#include <telepathy-glib/debug.h>
+
+using namespace Tp;
+
+class TestContactsClientTypes : public Test
+{
+ Q_OBJECT
+
+public:
+ TestContactsClientTypes(QObject *parent = 0)
+ : Test(parent), mConn(0),
+ mClientTypesUpdated(0)
+ { }
+
+protected Q_SLOTS:
+ void onClientTypesChanged(const QStringList &clientTypes);
+ void onRequestClientTypesFinished(Tp::PendingOperation *op);
+
+private Q_SLOTS:
+ void initTestCase();
+ void init();
+
+ void testClientTypes();
+
+ void cleanup();
+ void cleanupTestCase();
+
+private:
+ TestConnHelper *mConn;
+ int mClientTypesUpdated;
+ QStringList mClientTypes;
+};
+
+void TestContactsClientTypes::onClientTypesChanged(const QStringList &clientTypes)
+{
+ mClientTypesUpdated++;
+ mClientTypes = clientTypes;
+}
+
+void TestContactsClientTypes::onRequestClientTypesFinished(PendingOperation *op)
+{
+ if (op->isError()) {
+ mLastError = op->errorName();
+ mLastErrorMessage = op->errorMessage();
+ mLoop->exit(1);
+ } else {
+ PendingStringList *psl = qobject_cast<PendingStringList*>(op);
+ mClientTypes = psl->result();
+ mLoop->exit(0);
+ }
+}
+
+void TestContactsClientTypes::initTestCase()
+{
+ initTestCaseImpl();
+
+ g_type_init();
+ g_set_prgname("contacts-client-types");
+ tp_debug_set_flags("all");
+ dbus_g_bus_get(DBUS_BUS_STARTER, 0);
+
+ mConn = new TestConnHelper(this,
+ TP_TESTS_TYPE_CONTACTS_CONNECTION,
+ "account", "me at example.com",
+ "protocol", "foo",
+ NULL);
+ QCOMPARE(mConn->connect(), true);
+}
+
+void TestContactsClientTypes::init()
+{
+ initImpl();
+ mClientTypesUpdated = 0;
+}
+
+void TestContactsClientTypes::testClientTypes()
+{
+ ContactManagerPtr contactManager = mConn->client()->contactManager();
+
+ QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureClientTypes));
+
+ QStringList validIDs = QStringList() << QLatin1String("foo")
+ << QLatin1String("bar");
+ QList<ContactPtr> contacts = mConn->contacts(validIDs, Contact::FeatureClientTypes);
+ QCOMPARE(contacts.size(), validIDs.size());
+ for (int i = 0; i < contacts.size(); i++) {
+ ContactPtr contact = contacts[i];
+
+ QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureClientTypes), true);
+ QCOMPARE(contact->actualFeatures().contains(Contact::FeatureClientTypes), true);
+
+ QVERIFY(contact->clientTypes().isEmpty());
+
+ QVERIFY(connect(contact.data(),
+ SIGNAL(clientTypesChanged(QStringList)),
+ SLOT(onClientTypesChanged(QStringList))));
+ }
+
+ ContactPtr contactFoo = contacts[0];
+ ContactPtr contactBar = contacts[1];
+
+ const gchar *clientTypes1[] = { "phone", "pc", NULL };
+ const gchar *clientTypes2[] = { "web", NULL };
+
+ tp_tests_contacts_connection_change_client_types(TP_TESTS_CONTACTS_CONNECTION(mConn->service()),
+ contactFoo->handle()[0], g_strdupv((gchar**) clientTypes1));
+
+ while (mClientTypesUpdated != 1) {
+ mLoop->processEvents();
+ }
+ QCOMPARE(mClientTypesUpdated, 1);
+ QCOMPARE(mClientTypes, QStringList() << QLatin1String("phone") << QLatin1String("pc"));
+ QCOMPARE(contactFoo->clientTypes(), QStringList() << QLatin1String("phone")
+ << QLatin1String("pc"));
+ mClientTypes.clear();
+
+ tp_tests_contacts_connection_change_client_types(TP_TESTS_CONTACTS_CONNECTION(mConn->service()),
+ contactBar->handle()[0], g_strdupv((gchar**) clientTypes2));
+
+ while (mClientTypesUpdated != 2) {
+ mLoop->processEvents();
+ }
+ QCOMPARE(mClientTypesUpdated, 2);
+ QCOMPARE(mClientTypes, QStringList() << QLatin1String("web"));
+ QCOMPARE(contactBar->clientTypes(), QStringList() << QLatin1String("web"));
+
+ mClientTypesUpdated = 0;
+ mClientTypes.clear();
+
+ connect(contactFoo->requestClientTypes(),
+ SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(onRequestClientTypesFinished(Tp::PendingOperation*)));
+ QCOMPARE(mLoop->exec(), 0);
+ QCOMPARE(mClientTypes, QStringList() << QLatin1String("phone") << QLatin1String("pc"));
+ mClientTypes.clear();
+
+ connect(contactBar->requestClientTypes(),
+ SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(onRequestClientTypesFinished(Tp::PendingOperation*)));
+ QCOMPARE(mLoop->exec(), 0);
+ QCOMPARE(mClientTypes, QStringList() << QLatin1String("web"));
+}
+
+void TestContactsClientTypes::cleanup()
+{
+ cleanupImpl();
+}
+
+void TestContactsClientTypes::cleanupTestCase()
+{
+ QCOMPARE(mConn->disconnect(), true);
+ delete mConn;
+
+ cleanupTestCaseImpl();
+}
+
+QTEST_MAIN(TestContactsClientTypes)
+#include "_gen/contacts-client-types.cpp.moc.hpp"
More information about the telepathy-commits
mailing list