static void
setup_book (EBook *book)
{
	ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-1", NULL);
	ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-2", NULL);
	ebook_test_utils_book_add_contact_from_test_case_verify (book, "name-only", NULL);
}
static void
setup_book (EBook **book_out)
{
	EBook *book;

	book = ebook_test_utils_book_new_temp (NULL);
	ebook_test_utils_book_open (book, FALSE);

	ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-1", NULL);
	ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-2", NULL);
	ebook_test_utils_book_add_contact_from_test_case_verify (book, "name-only", NULL);

	*book_out = book;
}
gint
main (gint argc,
      gchar **argv)
{
	EBook *book;
	GMainLoop *loop;
	gchar *uid;

	g_type_init ();

        /*
         * Async version
         */
	book = ebook_test_utils_book_new_temp (NULL);
	ebook_test_utils_book_open (book, FALSE);

	uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-1", NULL);

	loop = g_main_loop_new (NULL, TRUE);
	ebook_test_utils_book_async_remove_contact_by_id (book, uid,
			ebook_test_utils_callback_quit, loop);

	g_main_loop_run (loop);

	ebook_test_utils_book_remove (book);
	g_free (uid);

	return 0;
}
static void
test_remove_contact_sync (ETestServerFixture *fixture,
                          gconstpointer user_data)
{
	EBook *book;
	EContact *contact_final = NULL;
	gchar *uid;

	book = E_TEST_SERVER_UTILS_SERVICE (fixture, EBook);

	uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-1", NULL);
	ebook_test_utils_book_remove_contact (book, uid);
	e_book_get_contact (book, uid, &contact_final, NULL);

	g_assert (contact_final == NULL);
	test_print ("successfully added and removed contact '%s'\n", uid);

	g_free (uid);
}
static void
test_commit_contact_sync (ETestServerFixture *fixture,
                          gconstpointer user_data)
{
	EContact *contact;

	book = E_TEST_SERVER_UTILS_SERVICE (fixture, EBook);
	uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "name-only", &contact);

	verify_precommit_and_prepare_contact (contact);
	ebook_test_utils_book_commit_contact (book, contact);
	verify_commit (contact);

	test_print ("successfully committed changes to contact contact '%s'\n", uid);
	g_object_unref (contact);
	g_free (uid);

	contact = NULL;
	uid = NULL;
}
static void
test_remove_contact_async (ETestServerFixture *fixture,
                           gconstpointer user_data)
{
	EBook *book;
	EContact *contact_final = NULL;
	gchar *uid;

	book = E_TEST_SERVER_UTILS_SERVICE (fixture, EBook);

	/* contact_final has 2 refs by the end of this */
	uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "simple-1", &contact_final);

	/* contact_final is unref'd by e_book_remove_contact() here */
	ebook_test_utils_book_async_remove_contact (
		book, contact_final, ebook_test_utils_callback_quit, fixture->loop);

	g_main_loop_run (fixture->loop);
	g_object_unref (contact_final);
	g_free (uid);
}
static void
test_commit_contact_async (ETestServerFixture *fixture,
                           gconstpointer user_data)
{
	EContact *contact;

	book = E_TEST_SERVER_UTILS_SERVICE (fixture, EBook);
	uid = ebook_test_utils_book_add_contact_from_test_case_verify (book, "name-only", &contact);

	verify_precommit_and_prepare_contact (contact);

	ebook_test_utils_book_async_commit_contact (
		book, contact, (GSourceFunc) commit_verify_cb, fixture->loop);

	g_main_loop_run (fixture->loop);

	g_object_unref (contact);
	g_free (uid);
	contact = NULL;
	uid = NULL;
}