2 #include "test-utils.h"
4 #ifndef DBUS_TEST_USE_INTERNAL
5 # include <dbus/dbus.h>
6 # include <dbus/dbus-glib-lowlevel.h>
9 #ifdef DBUS_TEST_USE_INTERNAL
14 DBusConnection *connection;
19 add_watch (DBusWatch *watch,
24 return _dbus_loop_add_watch (cd->loop, watch);
28 remove_watch (DBusWatch *watch,
33 _dbus_loop_remove_watch (cd->loop, watch);
37 toggle_watch (DBusWatch *watch,
42 _dbus_loop_toggle_watch (cd->loop, watch);
46 add_timeout (DBusTimeout *timeout,
51 return _dbus_loop_add_timeout (cd->loop, timeout);
55 remove_timeout (DBusTimeout *timeout,
60 _dbus_loop_remove_timeout (cd->loop, timeout);
64 dispatch_status_function (DBusConnection *connection,
65 DBusDispatchStatus new_status,
68 DBusLoop *loop = data;
70 if (new_status != DBUS_DISPATCH_COMPLETE)
72 while (!_dbus_loop_queue_dispatch (loop, connection))
73 _dbus_wait_for_memory ();
78 cdata_free (void *data)
82 dbus_connection_unref (cd->connection);
83 _dbus_loop_unref (cd->loop);
89 cdata_new (DBusLoop *loop,
90 DBusConnection *connection)
94 cd = dbus_new0 (CData, 1);
99 cd->connection = connection;
101 dbus_connection_ref (cd->connection);
102 _dbus_loop_ref (cd->loop);
107 #endif /* DBUS_TEST_USE_INTERNAL */
110 test_connection_setup (TestMainContext *ctx,
111 DBusConnection *connection)
113 #ifdef DBUS_TEST_USE_INTERNAL
114 DBusLoop *loop = ctx;
119 dbus_connection_set_dispatch_status_function (connection, dispatch_status_function,
122 cd = cdata_new (loop, connection);
126 if (!dbus_connection_set_watch_functions (connection,
134 cd = cdata_new (loop, connection);
138 if (!dbus_connection_set_timeout_functions (connection,
145 if (dbus_connection_get_dispatch_status (connection) != DBUS_DISPATCH_COMPLETE)
147 if (!_dbus_loop_queue_dispatch (loop, connection))
157 dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
158 dbus_connection_set_watch_functions (connection, NULL, NULL, NULL, NULL, NULL);
159 dbus_connection_set_timeout_functions (connection, NULL, NULL, NULL, NULL, NULL);
162 #else /* !DBUS_TEST_USE_INTERNAL */
164 dbus_connection_setup_with_g_main (connection, ctx);
167 #endif /* !DBUS_TEST_USE_INTERNAL */
171 die (const char *message)
173 fprintf (stderr, "*** %s", message);
178 test_connection_shutdown (TestMainContext *ctx,
179 DBusConnection *connection)
181 if (!dbus_connection_set_watch_functions (connection,
186 die ("setting watch functions to NULL failed");
188 if (!dbus_connection_set_timeout_functions (connection,
193 die ("setting timeout functions to NULL failed");
195 dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
198 #ifdef DBUS_TEST_USE_INTERNAL
207 serverdata_free (void *data)
209 ServerData *sd = data;
211 dbus_server_unref (sd->server);
212 _dbus_loop_unref (sd->loop);
218 serverdata_new (DBusLoop *loop,
223 sd = dbus_new0 (ServerData, 1);
230 dbus_server_ref (sd->server);
231 _dbus_loop_ref (sd->loop);
237 add_server_watch (DBusWatch *watch,
240 ServerData *context = data;
242 return _dbus_loop_add_watch (context->loop, watch);
246 toggle_server_watch (DBusWatch *watch,
249 ServerData *context = data;
251 _dbus_loop_toggle_watch (context->loop, watch);
255 remove_server_watch (DBusWatch *watch,
258 ServerData *context = data;
260 _dbus_loop_remove_watch (context->loop, watch);
264 add_server_timeout (DBusTimeout *timeout,
267 ServerData *context = data;
269 return _dbus_loop_add_timeout (context->loop, timeout);
273 remove_server_timeout (DBusTimeout *timeout,
276 ServerData *context = data;
278 _dbus_loop_remove_timeout (context->loop, timeout);
281 #endif /* DBUS_TEST_USE_INTERNAL */
284 test_server_setup (TestMainContext *ctx,
287 #ifdef DBUS_TEST_USE_INTERNAL
288 DBusLoop *loop = ctx;
291 sd = serverdata_new (loop, server);
295 if (!dbus_server_set_watch_functions (server,
305 sd = serverdata_new (loop, server);
309 if (!dbus_server_set_timeout_functions (server,
311 remove_server_timeout,
313 sd, serverdata_free))
321 serverdata_free (sd);
323 test_server_shutdown (loop, server);
327 #else /* !DBUS_TEST_USE_INTERNAL */
329 dbus_server_setup_with_g_main (server, ctx);
332 #endif /* !DBUS_TEST_USE_INTERNAL */
336 test_server_shutdown (TestMainContext *ctx,
339 dbus_server_disconnect (server);
341 if (!dbus_server_set_watch_functions (server,
345 die ("setting watch functions to NULL failed");
347 if (!dbus_server_set_timeout_functions (server,
351 die ("setting timeout functions to NULL failed");
355 test_main_context_get (void)
357 #ifdef DBUS_TEST_USE_INTERNAL
358 return _dbus_loop_new ();
360 /* I suspect dbus-glib relies the default main context in some places */
361 return g_main_context_ref (g_main_context_default ());
366 test_main_context_ref (TestMainContext *ctx)
368 #ifdef DBUS_TEST_USE_INTERNAL
369 return _dbus_loop_ref (ctx);
371 return g_main_context_ref (ctx);
375 void test_main_context_unref (TestMainContext *ctx)
377 #ifdef DBUS_TEST_USE_INTERNAL
378 _dbus_loop_unref (ctx);
380 g_main_context_unref (ctx);
384 void test_main_context_iterate (TestMainContext *ctx,
385 dbus_bool_t may_block)
387 #ifdef DBUS_TEST_USE_INTERNAL
388 _dbus_loop_iterate (ctx, may_block);
390 g_main_context_iteration (ctx, may_block);