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