summaryrefslogtreecommitdiff
path: root/qt4/tests/dbus/contacts-location.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt4/tests/dbus/contacts-location.cpp')
-rw-r--r--qt4/tests/dbus/contacts-location.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/qt4/tests/dbus/contacts-location.cpp b/qt4/tests/dbus/contacts-location.cpp
new file mode 100644
index 000000000..724f982b0
--- /dev/null
+++ b/qt4/tests/dbus/contacts-location.cpp
@@ -0,0 +1,147 @@
+#include <tests/lib/test.h>
+
+#include <tests/lib/glib-helpers/test-conn-helper.h>
+
+#include <tests/lib/glib/contacts-conn.h>
+
+#include <TelepathyQt4/Connection>
+#include <TelepathyQt4/Contact>
+#include <TelepathyQt4/LocationInfo>
+#include <TelepathyQt4/ContactManager>
+#include <TelepathyQt4/PendingContacts>
+
+#include <telepathy-glib/debug.h>
+
+using namespace Tp;
+
+class TestContactsLocation : public Test
+{
+ Q_OBJECT
+
+public:
+ TestContactsLocation(QObject *parent = 0)
+ : Test(parent), mConn(0), mContactsLocationUpdated(0)
+ { }
+
+protected Q_SLOTS:
+ void onLocationInfoUpdated(const Tp::LocationInfo &location);
+
+private Q_SLOTS:
+ void initTestCase();
+ void init();
+
+ void testLocation();
+
+ void cleanup();
+ void cleanupTestCase();
+
+private:
+ TestConnHelper *mConn;
+ int mContactsLocationUpdated;
+};
+
+void TestContactsLocation::onLocationInfoUpdated(const Tp::LocationInfo &location)
+{
+ Q_UNUSED(location);
+ mContactsLocationUpdated++;
+ mLoop->exit(0);
+}
+
+void TestContactsLocation::initTestCase()
+{
+ initTestCaseImpl();
+
+ g_type_init();
+ g_set_prgname("contacts-location");
+ tp_debug_set_flags("all");
+ dbus_g_bus_get(DBUS_BUS_STARTER, 0);
+
+ mConn = new TestConnHelper(this,
+ TP_TESTS_TYPE_CONTACTS_CONNECTION,
+ "account", "me@example.com",
+ "protocol", "foo",
+ NULL);
+ QCOMPARE(mConn->connect(), true);
+}
+
+void TestContactsLocation::init()
+{
+ initImpl();
+ mContactsLocationUpdated = 0;
+}
+
+void TestContactsLocation::testLocation()
+{
+ ContactManagerPtr contactManager = mConn->client()->contactManager();
+
+ QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureLocation));
+
+ QStringList validIDs = QStringList() << QLatin1String("foo")
+ << QLatin1String("bar");
+ QList<ContactPtr> contacts = mConn->contacts(validIDs, Contact::FeatureLocation);
+ QCOMPARE(contacts.size(), validIDs.size());
+ for (int i = 0; i < contacts.size(); i++) {
+ ContactPtr contact = contacts[i];
+
+ QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureLocation), true);
+ QCOMPARE(contact->actualFeatures().contains(Contact::FeatureLocation), true);
+
+ QVERIFY(connect(contact.data(),
+ SIGNAL(locationUpdated(const Tp::LocationInfo &)),
+ SLOT(onLocationInfoUpdated(const Tp::LocationInfo &))));
+ }
+
+ GHashTable *location_1 = tp_asv_new(
+ "country", G_TYPE_STRING, "United-kingdoms",
+ "lat", G_TYPE_DOUBLE, 20.0,
+ NULL);
+ GHashTable *location_2 = tp_asv_new(
+ "country", G_TYPE_STRING, "Atlantis",
+ "lat", G_TYPE_DOUBLE, 10.0,
+ NULL);
+ GHashTable *locations[] = { location_1, location_2 };
+
+ TpHandle handles[] = { 0, 0 };
+ TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(
+ TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT);
+
+ for (unsigned i = 0; i < 2; i++) {
+ handles[i] = tp_handle_ensure(serviceRepo, qPrintable(validIDs[i]),
+ NULL, NULL);
+ }
+
+ tp_tests_contacts_connection_change_locations(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), 2,
+ handles, locations);
+
+ while (mContactsLocationUpdated != 2) {
+ QCOMPARE(mLoop->exec(), 0);
+ }
+
+ for (int i = 0; i < contacts.size(); i++) {
+ ContactPtr contact = contacts[i];
+
+ QCOMPARE(contact->location().country(),
+ QLatin1String(tp_asv_get_string(locations[i], "country")));
+ QCOMPARE(contact->location().latitude(),
+ tp_asv_get_double(locations[i], "lat", NULL));
+ }
+
+ g_hash_table_unref(location_1);
+ g_hash_table_unref(location_2);
+}
+
+void TestContactsLocation::cleanup()
+{
+ cleanupImpl();
+}
+
+void TestContactsLocation::cleanupTestCase()
+{
+ QCOMPARE(mConn->disconnect(), true);
+ delete mConn;
+
+ cleanupTestCaseImpl();
+}
+
+QTEST_MAIN(TestContactsLocation)
+#include "_gen/contacts-location.cpp.moc.hpp"