diff options
| author | Travis Reitter <treitter@gmail.com> | 2009-12-10 08:33:05 -0800 |
|---|---|---|
| committer | Travis Reitter <treitter@gmail.com> | 2009-12-10 08:37:01 -0800 |
| commit | cd1f48e4693afda6a0daf6730d3ab521101c9566 (patch) | |
| tree | c2d7dcf1e9923b0d9d0b2d04bfec293a402de58a | |
| parent | 3b80ab6bc74dcfc14be16ba67b787034304b1018 (diff) | |
| download | evolution-data-server-cd1f48e4693afda6a0daf6730d3ab521101c9566.tar.gz | |
Port the e-book 'getSupportedFields' method to gdbus and add a regression test
| -rw-r--r-- | addressbook/libebook/e-book.c | 9 | ||||
| -rw-r--r-- | addressbook/libebook/e-data-book-gdbus-bindings.h | 57 | ||||
| -rw-r--r-- | addressbook/tests/ebook/Makefile.am | 3 | ||||
| -rw-r--r-- | addressbook/tests/ebook/ebook-test-utils.c | 58 | ||||
| -rw-r--r-- | addressbook/tests/ebook/ebook-test-utils.h | 7 | ||||
| -rw-r--r-- | addressbook/tests/ebook/test-ebook-get-supported-fields.c | 75 |
6 files changed, 206 insertions, 3 deletions
diff --git a/addressbook/libebook/e-book.c b/addressbook/libebook/e-book.c index eb505a2f7..3a4da2016 100644 --- a/addressbook/libebook/e-book.c +++ b/addressbook/libebook/e-book.c @@ -644,7 +644,7 @@ e_book_get_supported_fields (EBook *book, e_return_error_if_fail (book->priv->proxy, E_BOOK_ERROR_REPOSITORY_OFFLINE); LOCK_CONN (); - org_gnome_evolution_dataserver_addressbook_Book_get_supported_fields (book->priv->proxy, &list, &err); + e_data_book_gdbus_get_supported_fields_sync (book->priv->gdbus_proxy, &list, &err); UNLOCK_CONN (); if (list) { *fields = array_to_stringlist (list); @@ -655,7 +655,10 @@ e_book_get_supported_fields (EBook *book, } static void -get_supported_fields_reply(DBusGProxy *proxy, gchar **fields, GError *error, gpointer user_data) +get_supported_fields_reply (GDBusProxy *proxy, + gchar **fields, + GError *error, + gpointer user_data) { AsyncData *data = user_data; EBookEListCallback cb = data->callback; @@ -704,7 +707,7 @@ e_book_async_get_supported_fields (EBook *book, data->closure = closure; LOCK_CONN (); - org_gnome_evolution_dataserver_addressbook_Book_get_supported_fields_async (book->priv->proxy, get_supported_fields_reply, data); + e_data_book_gdbus_get_supported_fields (book->priv->gdbus_proxy, get_supported_fields_reply, data); UNLOCK_CONN (); return 0; diff --git a/addressbook/libebook/e-data-book-gdbus-bindings.h b/addressbook/libebook/e-data-book-gdbus-bindings.h index becaa6d00..8ecd98f8c 100644 --- a/addressbook/libebook/e-data-book-gdbus-bindings.h +++ b/addressbook/libebook/e-data-book-gdbus-bindings.h @@ -384,6 +384,63 @@ e_data_book_gdbus_get_required_fields (GDBusProxy } static gboolean +e_data_book_gdbus_get_supported_fields_sync (GDBusProxy *proxy, + char ***OUT_fields, + GError **error) +{ + GVariant *parameters; + GVariant *retvals; + + parameters = g_variant_new ("()"); + retvals = g_dbus_proxy_invoke_method_sync (proxy, "getSupportedFields", parameters, -1, NULL, error); + + return demarshal_retvals__STRINGVECTOR (retvals, OUT_fields); +} + +typedef void (*e_data_book_gdbus_get_supported_fields_reply) (GDBusProxy *proxy, + char **OUT_fields, + GError *error, + gpointer user_data); + +static void +get_supported_fields_cb (GDBusProxy *proxy, + GAsyncResult *result, + gpointer user_data) +{ + Closure *closure = user_data; + GVariant *retvals; + GError *error = NULL; + char **OUT_fields = NULL; + + retvals = g_dbus_proxy_invoke_method_finish (proxy, result, &error); + if (retvals) { + if (!demarshal_retvals__STRINGVECTOR (retvals, &OUT_fields)) { + error = g_error_new (E_BOOK_ERROR, E_BOOK_ERROR_CORBA_EXCEPTION, "demarshalling results for Book method 'getSupportedFields'"); + } + } + + (*(e_data_book_gdbus_get_supported_fields_reply) closure->cb) (proxy, OUT_fields, error, closure->user_data); + closure_free (closure); +} + +static void +e_data_book_gdbus_get_supported_fields (GDBusProxy *proxy, + e_data_book_gdbus_get_supported_fields_reply callback, + gpointer user_data) +{ + GVariant *parameters; + Closure *closure; + + parameters = g_variant_new ("()"); + + closure = g_slice_new (Closure); + closure->cb = G_CALLBACK (callback); + closure->user_data = user_data; + + g_dbus_proxy_invoke_method (proxy, "getSupportedFields", parameters, -1, NULL, (GAsyncReadyCallback) get_supported_fields_cb, closure); +} + +static gboolean e_data_book_gdbus_add_contact_sync (GDBusProxy *proxy, const char *IN_vcard, char **OUT_uid, diff --git a/addressbook/tests/ebook/Makefile.am b/addressbook/tests/ebook/Makefile.am index a0eb6edd7..768eebb52 100644 --- a/addressbook/tests/ebook/Makefile.am +++ b/addressbook/tests/ebook/Makefile.am @@ -32,6 +32,7 @@ noinst_PROGRAMS = \ test-ebook-get-contact \ test-ebook-get-required-fields \ test-ebook-get-static-capabilities \ + test-ebook-get-supported-fields \ test-ebook-remove \ test-ebook-remove-contact \ test-ebook-remove-contact-by-id \ @@ -70,6 +71,8 @@ test_ebook_get_required_fields_LDADD=$(TEST_LIBS) test_ebook_get_required_fields_CPPFLAGS=$(TEST_CPPFLAGS) test_ebook_get_static_capabilities_LDADD=$(TEST_LIBS) test_ebook_get_static_capabilities_CPPFLAGS=$(TEST_CPPFLAGS) +test_ebook_get_supported_fields_LDADD=$(TEST_LIBS) +test_ebook_get_supported_fields_CPPFLAGS=$(TEST_CPPFLAGS) test_ebook_remove_LDADD=$(TEST_LIBS) test_ebook_remove_CPPFLAGS=$(TEST_CPPFLAGS) test_ebook_remove_contact_LDADD=$(TEST_LIBS) diff --git a/addressbook/tests/ebook/ebook-test-utils.c b/addressbook/tests/ebook/ebook-test-utils.c index 0fee18d9e..bb5b145e1 100644 --- a/addressbook/tests/ebook/ebook-test-utils.c +++ b/addressbook/tests/ebook/ebook-test-utils.c @@ -336,6 +336,64 @@ ebook_test_utils_book_get_static_capabilities (EBook *book) return caps; } +GList* +ebook_test_utils_book_get_supported_fields (EBook *book) +{ + GList *fields = NULL; + GError *error = NULL; + + if (!e_book_get_supported_fields (book, &fields, &error)) { + const char *uri; + + uri = e_book_get_uri (book); + g_warning ("failed to get supported fields for addressbook " + "`%s': %s", uri, error->message); + exit(1); + } + + return fields; +} + +static void +get_supported_fields_cb (EBook *book, + EBookStatus status, + EList *fields, + EBookTestClosure *closure) +{ + if (status != E_BOOK_ERROR_OK) { + g_warning ("failed to asynchronously get the contact: " + "status %d", status); + exit (1); + } + + closure->list = fields; + + g_print ("successfully asynchronously retrieved the supported fields\n"); + + if (closure) { + (*closure->cb) (closure); + g_free (closure); + } +} + +void +ebook_test_utils_book_async_get_supported_fields (EBook *book, + GSourceFunc callback, + gpointer user_data) +{ + EBookTestClosure *closure; + + closure = g_new0 (EBookTestClosure, 1); + closure->cb = callback; + closure->user_data = user_data; + if (e_book_async_get_supported_fields (book, + (EBookEListCallback) get_supported_fields_cb, + closure)) { + g_warning ("failed to set up async getSupportedFields"); + exit(1); + } +} + void ebook_test_utils_book_remove_contact (EBook *book, const char *uid) diff --git a/addressbook/tests/ebook/ebook-test-utils.h b/addressbook/tests/ebook/ebook-test-utils.h index 02f8bc3fc..4595f7dd6 100644 --- a/addressbook/tests/ebook/ebook-test-utils.h +++ b/addressbook/tests/ebook/ebook-test-utils.h @@ -86,6 +86,13 @@ ebook_test_utils_book_async_get_required_fields (EBook *book, GSourceFunc callback, gpointer user_data); +GList* +ebook_test_utils_book_get_supported_fields (EBook *book); +void +ebook_test_utils_book_async_get_supported_fields (EBook *book, + GSourceFunc callback, + gpointer user_data); + const char* ebook_test_utils_book_get_static_capabilities (EBook *book); diff --git a/addressbook/tests/ebook/test-ebook-get-supported-fields.c b/addressbook/tests/ebook/test-ebook-get-supported-fields.c new file mode 100644 index 000000000..69caa79fb --- /dev/null +++ b/addressbook/tests/ebook/test-ebook-get-supported-fields.c @@ -0,0 +1,75 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + +#include <stdlib.h> +#include <libebook/e-book.h> + +#include "ebook-test-utils.h" + +static void +list_member_print_and_free (char *member, + gpointer user_data) +{ + g_print (" %s\n", member); + g_free (member); +} + +static void +get_supported_fields_cb (EBookTestClosure *closure) +{ + /* XXX: assuming an empty list is valid, we'll just print out anything + * we do get */ + if (closure->list) { + EIterator *iter; + const char *field; + + g_print ("supported fields:\n"); + iter = e_list_get_iterator (closure->list); + while ((field = e_iterator_get (iter))) { + g_print (" %s\n", field); + e_iterator_next (iter); + } + g_print ("----------------\n"); + } + + g_object_unref (closure->list); + + g_main_loop_quit ((GMainLoop*) (closure->user_data)); +} + +gint +main (gint argc, gchar **argv) +{ + EBook *book; + GMainLoop *loop; + GList *fields; + + g_type_init (); + + /* + * Setup + */ + book = ebook_test_utils_book_new_temp (NULL); + ebook_test_utils_book_open (book, FALSE); + + /* + * Sync version + */ + fields = ebook_test_utils_book_get_supported_fields (book); + + g_print ("successfully retrieved supported fields:\n"); + g_list_foreach (fields, (GFunc) list_member_print_and_free, NULL); + g_list_free (fields); + + /* + * Async version + */ + loop = g_main_loop_new (NULL, TRUE); + ebook_test_utils_book_async_get_supported_fields (book, + (GSourceFunc) get_supported_fields_cb, loop); + + g_main_loop_run (loop); + + ebook_test_utils_book_remove (book); + + return 0; +} |
