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 =
10 { E_TEST_SERVER_CALENDAR, NULL, E_CAL_CLIENT_SOURCE_TYPE_EVENTS };
13 test_icalcomps (icalcomponent *icalcomp1,
14 icalcomponent *icalcomp2)
16 struct icaltimetype t1, t2;
19 g_error ("Failure: get object returned NULL");
21 g_assert_cmpstr (icalcomponent_get_uid (icalcomp1), ==, icalcomponent_get_uid (icalcomp2));
22 g_assert_cmpstr (icalcomponent_get_summary (icalcomp1), ==, icalcomponent_get_summary (icalcomp2));
24 t1 = icalcomponent_get_dtstart (icalcomp1);
25 t2 = icalcomponent_get_dtstart (icalcomp2);
27 if (icaltime_compare (t1, t2) != 0)
28 g_error ("Failure: dtend doesn't match, expected '%s', got '%s'\n",
29 icaltime_as_ical_string (t1), icaltime_as_ical_string (t2));
31 t1 = icalcomponent_get_dtend (icalcomp1);
32 t2 = icalcomponent_get_dtend (icalcomp2);
34 if (icaltime_compare (t1, t2) != 0)
35 g_error ("Failure: dtend doesn't match, expected '%s', got '%s'\n",
36 icaltime_as_ical_string (t1), icaltime_as_ical_string (t2));
40 test_create_object_sync (ETestServerFixture *fixture,
41 gconstpointer user_data)
43 ECalClient *cal_client;
44 icalcomponent *icalcomp;
45 icalcomponent *icalcomp2 = NULL, *clone;
46 struct icaltimetype now;
48 GSList *ecalcomps = NULL;
51 cal_client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient);
53 /* Build up new component */
54 now = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
55 icalcomp = icalcomponent_new (ICAL_VEVENT_COMPONENT);
56 icalcomponent_set_summary (icalcomp, "Test event summary");
57 icalcomponent_set_dtstart (icalcomp, now);
58 icalcomponent_set_dtend (icalcomp, icaltime_from_timet (icaltime_as_timet (now) + 60 * 60 * 60, 0));
60 if (!e_cal_client_create_object_sync (cal_client, icalcomp, &uid, NULL, &error))
61 g_error ("create object sync: %s", error->message);
63 if (!e_cal_client_get_object_sync (cal_client, uid, NULL, &icalcomp2, NULL, &error))
64 g_error ("get object sync: %s", error->message);
66 clone = icalcomponent_new_clone (icalcomp);
67 icalcomponent_set_uid (clone, uid);
69 test_icalcomps (clone, icalcomp2);
71 icalcomponent_free (icalcomp2);
73 if (!e_cal_client_get_objects_for_uid_sync (cal_client, uid, &ecalcomps, NULL, &error))
74 g_error ("get objects for uid sync: %s", error->message);
76 if (g_slist_length (ecalcomps) != 1)
77 g_error ("Failure: expected 1 component, bug got %d", g_slist_length (ecalcomps));
79 ECalComponent *ecalcomp = ecalcomps->data;
81 test_icalcomps (clone, e_cal_component_get_icalcomponent (ecalcomp));
83 e_cal_client_free_ecalcomp_slist (ecalcomps);
85 icalcomponent_free (clone);
87 icalcomponent_free (icalcomp);
92 icalcomponent *icalcomp;
98 async_read2_result_ready (GObject *source_object,
102 ECalClient *cal_client;
103 GError *error = NULL;
104 AsyncData *data = (AsyncData *)user_data;
105 icalcomponent *icalcomp1 = data->clone;
106 GSList *ecalcomps = NULL;
108 g_return_if_fail (icalcomp1 != NULL);
110 cal_client = E_CAL_CLIENT (source_object);
112 if (!e_cal_client_get_objects_for_uid_finish (cal_client, result, &ecalcomps, &error))
113 g_error ("get objects for uid finish: %s", error->message);
115 if (g_slist_length (ecalcomps) != 1)
116 g_error ("Failure: expected 1 component, bug got %d", g_slist_length (ecalcomps));
118 ECalComponent *ecalcomp = ecalcomps->data;
120 test_icalcomps (icalcomp1, e_cal_component_get_icalcomponent (ecalcomp));
122 e_cal_client_free_ecalcomp_slist (ecalcomps);
124 icalcomponent_free (icalcomp1);
125 g_main_loop_quit (data->loop);
130 async_read_result_ready (GObject *source_object,
131 GAsyncResult *result,
134 ECalClient *cal_client;
135 GError *error = NULL;
136 AsyncData *data = (AsyncData *)user_data;
137 icalcomponent *icalcomp1 = data->clone, *icalcomp2 = NULL;
139 g_return_if_fail (icalcomp1 != NULL);
141 cal_client = E_CAL_CLIENT (source_object);
142 if (!e_cal_client_get_object_finish (cal_client, result, &icalcomp2, &error))
143 g_error ("get object finish: %s", error->message);
145 test_icalcomps (icalcomp1, icalcomp2);
146 icalcomponent_free (icalcomp2);
148 e_cal_client_get_objects_for_uid (cal_client,
149 icalcomponent_get_uid (icalcomp1), NULL,
150 async_read2_result_ready, data);
154 async_write_result_ready (GObject *source_object,
155 GAsyncResult *result,
158 ECalClient *cal_client;
159 GError *error = NULL;
161 AsyncData *data = (AsyncData *)user_data;
162 icalcomponent *clone, *icalcomp = data->icalcomp;
164 g_return_if_fail (icalcomp != NULL);
166 cal_client = E_CAL_CLIENT (source_object);
168 if (!e_cal_client_create_object_finish (cal_client, result, &uid, &error))
169 g_error ("create object finish: %s", error->message);
171 clone = icalcomponent_new_clone (icalcomp);
172 icalcomponent_set_uid (clone, uid);
175 e_cal_client_get_object (cal_client, uid, NULL, NULL, async_read_result_ready, data);
180 test_create_object_async (ETestServerFixture *fixture,
181 gconstpointer user_data)
183 ECalClient *cal_client;
184 icalcomponent *icalcomp;
185 struct icaltimetype now;
186 AsyncData data = { 0, };
188 cal_client = E_TEST_SERVER_UTILS_SERVICE (fixture, ECalClient);
190 /* Build up new component */
191 now = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
192 icalcomp = icalcomponent_new (ICAL_VEVENT_COMPONENT);
193 icalcomponent_set_summary (icalcomp, "Test event summary");
194 icalcomponent_set_dtstart (icalcomp, now);
195 icalcomponent_set_dtend (icalcomp, icaltime_from_timet (icaltime_as_timet (now) + 60 * 60 * 60, 0));
197 data.icalcomp = icalcomp;
198 data.loop = fixture->loop;
199 e_cal_client_create_object (cal_client, icalcomp, NULL, async_write_result_ready, &data);
200 g_main_loop_run (fixture->loop);
202 icalcomponent_free (icalcomp);
209 #if !GLIB_CHECK_VERSION (2, 35, 1)
212 g_test_init (&argc, &argv, NULL);
214 g_test_add ("/ECalClient/CreateObject/Sync", ETestServerFixture, &cal_closure,
215 e_test_server_utils_setup, test_create_object_sync, e_test_server_utils_teardown);
216 g_test_add ("/ECalClient/CreateObject/Async", ETestServerFixture, &cal_closure,
217 e_test_server_utils_setup, test_create_object_async, e_test_server_utils_teardown);
219 return e_test_server_utils_run ();