1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
4 #include <libecal/libecal.h>
5 #include <libical/ical.h>
7 #include "e-test-server-utils.h"
9 static ETestServerClosure cal_closure_sync =
10 { E_TEST_SERVER_CALENDAR, NULL, E_CAL_CLIENT_SOURCE_TYPE_EVENTS, FALSE, NULL, FALSE };
11 static ETestServerClosure cal_closure_async =
12 { E_TEST_SERVER_CALENDAR, NULL, E_CAL_CLIENT_SOURCE_TYPE_EVENTS, FALSE, NULL, TRUE };
15 SUBTEST_OBJECTS_ADDED,
16 SUBTEST_OBJECTS_MODIFIED,
17 SUBTEST_OBJECTS_REMOVED,
24 subtest_passed (SubTestId id,
27 static guint subtests_complete = 0;
29 if (id == SUBTEST_RESET) {
30 subtests_complete = 0;
34 subtests_complete |= (1 << id);
36 if (subtests_complete == ((1 << NUM_SUBTESTS) - 1))
37 g_main_loop_quit (loop);
41 objects_added_cb (GObject *object,
42 const GSList *objects,
45 GMainLoop *loop = (GMainLoop *) data;
48 for (l = objects; l; l = l->next)
49 g_print ("Object added %s (%s)\n", icalcomponent_get_uid (l->data), icalcomponent_get_summary (l->data));
51 subtest_passed (SUBTEST_OBJECTS_ADDED, loop);
55 objects_modified_cb (GObject *object,
56 const GSList *objects,
59 GMainLoop *loop = (GMainLoop *) data;
62 for (l = objects; l; l = l->next)
63 g_print ("Object modified %s (%s)\n", icalcomponent_get_uid (l->data), icalcomponent_get_summary (l->data));
65 subtest_passed (SUBTEST_OBJECTS_MODIFIED, loop);
69 objects_removed_cb (GObject *object,
70 const GSList *objects,
73 GMainLoop *loop = (GMainLoop *) data;
76 for (l = objects; l; l = l->next) {
77 ECalComponentId *id = l->data;
79 g_print ("Object removed: uid: %s, rid: %s\n", id->uid, id->rid);
82 subtest_passed (SUBTEST_OBJECTS_REMOVED, loop);
86 complete_cb (GObject *object,
90 GMainLoop *loop = (GMainLoop *) data;
92 g_print ("View complete (status: %d, error_msg:%s)\n", error ? error->code : 0, error ? error->message : "NULL");
94 subtest_passed (SUBTEST_VIEW_DONE, loop);
98 alter_cal_client (gpointer user_data)
100 ECalClient *cal_client = user_data;
101 GError *error = NULL;
102 icalcomponent *icalcomp;
103 struct icaltimetype now;
106 g_return_val_if_fail (cal_client != NULL, NULL);
108 now = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
109 icalcomp = icalcomponent_new (ICAL_VEVENT_COMPONENT);
110 icalcomponent_set_summary (icalcomp, "Initial event summary");
111 icalcomponent_set_dtstart (icalcomp, now);
112 icalcomponent_set_dtend (icalcomp, icaltime_from_timet (icaltime_as_timet (now) + 60 * 60 * 60, 0));
114 if (!e_cal_client_create_object_sync (cal_client, icalcomp, &uid, NULL, &error))
115 g_error ("create object sync: %s", error->message);
117 icalcomponent_set_uid (icalcomp, uid);
118 icalcomponent_set_summary (icalcomp, "Modified event summary");
120 if (!e_cal_client_modify_object_sync (cal_client, icalcomp, E_CAL_OBJ_MOD_ALL, NULL, &error))
121 g_error ("modify object sync: %s", error->message);
123 if (!e_cal_client_remove_object_sync (cal_client, uid, NULL, E_CAL_OBJ_MOD_ALL, NULL, &error))
124 g_error ("remove object sync: %s", error->message);
127 icalcomponent_free (icalcomp);
133 async_get_view_ready (GObject *source_object,
134 GAsyncResult *result,
137 ECalClient *cal_client = E_CAL_CLIENT (source_object);
138 ECalClientView *view = NULL;
139 GError *error = NULL;
140 GMainLoop *loop = (GMainLoop *) user_data;
142 g_return_if_fail (cal_client != NULL);
144 if (!e_cal_client_get_view_finish (cal_client, result, &view, &error))
145 g_error ("get view finish: %s", error->message);
147 g_object_set_data_full (G_OBJECT (cal_client), "cal-view", view, g_object_unref);
149 subtest_passed (SUBTEST_RESET, loop);
150 g_signal_connect (view, "objects_added", G_CALLBACK (objects_added_cb), loop);
151 g_signal_connect (view, "objects_modified", G_CALLBACK (objects_modified_cb), loop);
152 g_signal_connect (view, "objects_removed", G_CALLBACK (objects_removed_cb), loop);
153 g_signal_connect (view, "complete", G_CALLBACK (complete_cb), loop);
155 e_cal_client_view_set_fields_of_interest (view, NULL, &error);
157 g_error ("set fields of interest: %s", error->message);
158 e_cal_client_view_start (view, NULL);
160 alter_cal_client (cal_client);
164 test_get_view_async (ETestServerFixture *fixture,
165 gconstpointer user_data)
167 ECalClient *cal_client;
169 cal_client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient);
171 e_cal_client_get_view (cal_client, "(contains? \"any\" \"event\")", NULL, async_get_view_ready, fixture->loop);
172 g_main_loop_run (fixture->loop);
174 /* Will unref the view */
175 g_object_set_data (G_OBJECT (cal_client), "cal-view", NULL);
179 test_get_view_sync (ETestServerFixture *fixture,
180 gconstpointer user_data)
182 ECalClient *cal_client;
183 GError *error = NULL;
184 ECalClientView *view = NULL;
186 cal_client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient);
188 if (!e_cal_client_get_view_sync (cal_client, "(contains? \"any\" \"event\")", &view, NULL, &error))
189 g_error ("get view sync: %s", error->message);
191 subtest_passed (SUBTEST_RESET, fixture->loop);
192 g_signal_connect (view, "objects_added", G_CALLBACK (objects_added_cb), fixture->loop);
193 g_signal_connect (view, "objects_modified", G_CALLBACK (objects_modified_cb), fixture->loop);
194 g_signal_connect (view, "objects_removed", G_CALLBACK (objects_removed_cb), fixture->loop);
195 g_signal_connect (view, "complete", G_CALLBACK (complete_cb), NULL);
197 e_cal_client_view_set_fields_of_interest (view, NULL, &error);
199 g_error ("set fields of interest: %s", error->message);
200 e_cal_client_view_start (view, NULL);
202 g_idle_add ((GSourceFunc) alter_cal_client, cal_client);
203 g_main_loop_run (fixture->loop);
205 g_object_unref (view);
212 #if !GLIB_CHECK_VERSION (2, 35, 1)
215 g_test_init (&argc, &argv, NULL);
216 g_test_bug_base ("http://bugzilla.gnome.org/");
219 "/ECalClient/GetView/Sync",
222 e_test_server_utils_setup,
224 e_test_server_utils_teardown);
226 "/ECalClient/GetView/Async",
229 e_test_server_utils_setup,
231 e_test_server_utils_teardown);
233 return e_test_server_utils_run ();