summaryrefslogtreecommitdiff
path: root/tests/dbus/contacts.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/dbus/contacts.c')
-rw-r--r--tests/dbus/contacts.c136
1 files changed, 94 insertions, 42 deletions
diff --git a/tests/dbus/contacts.c b/tests/dbus/contacts.c
index f987cb438..ee1186311 100644
--- a/tests/dbus/contacts.c
+++ b/tests/dbus/contacts.c
@@ -516,10 +516,11 @@ test_avatar_requirements (Fixture *f,
g_main_loop_unref (result.loop);
}
-static GFile *
+static TpContact *
create_contact_with_fake_avatar (TpTestsContactsConnection *service_conn,
TpConnection *client_conn,
- const gchar *id)
+ const gchar *id,
+ gboolean request_avatar)
{
Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
TpHandleRepoIface *service_repo = tp_base_connection_get_handles (
@@ -531,7 +532,6 @@ create_contact_with_fake_avatar (TpTestsContactsConnection *service_conn,
TpContact *contact;
TpHandle handle;
GArray *array;
- GFile *avatar_file;
gchar *content = NULL;
handle = tp_handle_ensure (service_repo, id, NULL, NULL);
@@ -541,6 +541,11 @@ create_contact_with_fake_avatar (TpTestsContactsConnection *service_conn,
tp_tests_contacts_connection_change_avatar_data (service_conn, handle, array,
avatar_mime_type, avatar_token);
+ if (request_avatar)
+ features[0] = TP_CONTACT_FEATURE_AVATAR_DATA;
+ else
+ features[0] = TP_CONTACT_FEATURE_AVATAR_TOKEN;
+
tp_connection_get_contacts_by_handle (client_conn,
1, &handle,
features,
@@ -549,27 +554,33 @@ create_contact_with_fake_avatar (TpTestsContactsConnection *service_conn,
g_main_loop_run (result.loop);
g_assert_no_error (result.error);
- contact = g_ptr_array_index (result.contacts, 0);
- if (tp_contact_get_avatar_file (contact) == NULL)
- {
- g_signal_connect_swapped (contact, "notify::avatar-file",
- G_CALLBACK (finish), &result);
- g_main_loop_run (result.loop);
- }
+ contact = g_object_ref (g_ptr_array_index (result.contacts, 0));
- g_assert_cmpstr (tp_contact_get_avatar_mime_type (contact), ==,
- avatar_mime_type);
g_assert_cmpstr (tp_contact_get_avatar_token (contact), ==, avatar_token);
- avatar_file = tp_contact_get_avatar_file (contact);
- g_assert (avatar_file != NULL);
- g_file_load_contents (avatar_file, NULL, &content, NULL, NULL, &result.error);
- g_assert_no_error (result.error);
- g_assert_cmpstr (content, ==, avatar_data);
- g_free (content);
+ if (request_avatar)
+ {
+ GFile *avatar_file;
- /* Keep avatar_file alive after contact destruction */
- g_object_ref (avatar_file);
+ /* If we requested avatar, it could come later */
+ if (tp_contact_get_avatar_file (contact) == NULL)
+ {
+ g_signal_connect_swapped (contact, "notify::avatar-file",
+ G_CALLBACK (finish), &result);
+ g_main_loop_run (result.loop);
+ }
+
+ g_assert_cmpstr (tp_contact_get_avatar_mime_type (contact), ==,
+ avatar_mime_type);
+
+ avatar_file = tp_contact_get_avatar_file (contact);
+ g_assert (avatar_file != NULL);
+ g_file_load_contents (avatar_file, NULL, &content, NULL, NULL,
+ &result.error);
+ g_assert_no_error (result.error);
+ g_assert_cmpstr (content, ==, avatar_data);
+ g_free (content);
+ }
reset_result (&result);
g_main_loop_unref (result.loop);
@@ -577,7 +588,7 @@ create_contact_with_fake_avatar (TpTestsContactsConnection *service_conn,
tp_handle_unref (service_repo, handle);
g_array_unref (array);
- return avatar_file;
+ return contact;
}
static void
@@ -636,29 +647,19 @@ haze_remove_directory (const gchar *path)
return ret;
}
-#define RAND_STR_LEN 6
-
static void
test_avatar_data (Fixture *f,
gconstpointer unused G_GNUC_UNUSED)
{
TpTestsContactsConnection *service_conn = f->service_conn;
TpConnection *client_conn = f->client_conn;
- gchar *dir;
gboolean avatar_retrieved_called;
GError *error = NULL;
- GFile *file1, *file2;
+ TpContact *contact1, *contact2;
TpProxySignalConnection *signal_id;
g_message (G_STRFUNC);
- /* Make sure g_get_user_cache_dir() returns a tmp directory, to not mess up
- * user's cache dir. */
- dir = g_dir_make_tmp ("tp-glib-tests-XXXXXX", &error);
- g_assert_no_error (error);
- g_setenv ("XDG_CACHE_HOME", dir, TRUE);
- g_assert_cmpstr (g_get_user_cache_dir (), ==, dir);
-
/* Check if AvatarRetrieved gets called */
signal_id = tp_cli_connection_interface_avatars_connect_to_avatar_retrieved (
client_conn, avatar_retrieved_cb, &avatar_retrieved_called, NULL, NULL,
@@ -668,24 +669,58 @@ test_avatar_data (Fixture *f,
/* First time we create a contact, avatar should not be in cache, so
* AvatarRetrived should be called */
avatar_retrieved_called = FALSE;
- file1 = create_contact_with_fake_avatar (service_conn, client_conn,
- "fake-id1");
+ contact1 = create_contact_with_fake_avatar (service_conn, client_conn,
+ "fake-id1", TRUE);
g_assert (avatar_retrieved_called);
+ g_assert (contact1 != NULL);
+ g_assert (tp_contact_get_avatar_file (contact1) != NULL);
/* Second time we create a contact, avatar should be in cache now, so
* AvatarRetrived should NOT be called */
avatar_retrieved_called = FALSE;
- file2 = create_contact_with_fake_avatar (service_conn, client_conn,
- "fake-id2");
+ contact2 = create_contact_with_fake_avatar (service_conn, client_conn,
+ "fake-id2", TRUE);
g_assert (!avatar_retrieved_called);
+ g_assert (contact2 != NULL);
+ g_assert (tp_contact_get_avatar_file (contact2) != NULL);
- g_assert (g_file_equal (file1, file2));
- g_assert (haze_remove_directory (dir));
+ g_assert (g_file_equal (
+ tp_contact_get_avatar_file (contact1),
+ tp_contact_get_avatar_file (contact2)));
tp_proxy_signal_connection_disconnect (signal_id);
- g_object_unref (file1);
- g_object_unref (file2);
- g_free (dir);
+ g_object_unref (contact1);
+ g_object_unref (contact2);
+}
+
+static void
+test_avatar_data_after_token (Fixture *f,
+ gconstpointer unused G_GNUC_UNUSED)
+{
+ TpTestsContactsConnection *service_conn = f->service_conn;
+ TpConnection *client_conn = f->client_conn;
+ const gchar *id = "avatar-data-after-token";
+ TpContact *contact1, *contact2;
+
+ g_message (G_STRFUNC);
+
+ /* Create a contact with AVATAR_TOKEN feature */
+ contact1 = create_contact_with_fake_avatar (service_conn, client_conn, id,
+ FALSE);
+ g_assert (contact1 != NULL);
+ g_assert (tp_contact_get_avatar_file (contact1) == NULL);
+
+ /* Now create the same contact with AVATAR_DATA feature */
+ contact2 = create_contact_with_fake_avatar (service_conn, client_conn, id,
+ TRUE);
+ g_assert (contact2 != NULL);
+ g_assert (tp_contact_get_avatar_file (contact2) != NULL);
+
+ g_assert (contact1 == contact2);
+
+ /* Cleanup */
+ g_object_unref (contact1);
+ g_object_unref (contact2);
}
static void
@@ -2639,9 +2674,20 @@ int
main (int argc,
char **argv)
{
+ gint ret;
+ gchar *dir;
+ GError *error = NULL;
+
tp_tests_init (&argc, &argv);
g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
+ /* Make sure g_get_user_cache_dir() returns a tmp directory, to not mess up
+ * user's cache dir. */
+ dir = g_dir_make_tmp ("tp-glib-tests-XXXXXX", &error);
+ g_assert_no_error (error);
+ g_setenv ("XDG_CACHE_HOME", dir, TRUE);
+ g_assert_cmpstr (g_get_user_cache_dir (), ==, dir);
+
#define ADD(x) \
g_test_add ("/contacts/" #x, Fixture, NULL, setup, test_ ## x, teardown)
@@ -2655,6 +2701,7 @@ main (int argc,
ADD (by_id);
ADD (avatar_requirements);
ADD (avatar_data);
+ ADD (avatar_data_after_token);
ADD (contact_info);
ADD (dup_if_possible);
ADD (subscription_states);
@@ -2671,5 +2718,10 @@ main (int argc,
g_test_add ("/contacts/self-contact", Fixture, NULL,
setup_no_connect, test_self_contact, teardown);
- return g_test_run ();
+ ret = g_test_run ();
+
+ g_assert (haze_remove_directory (dir));
+ g_free (dir);
+
+ return ret;
}