25 #include <glib/gprintf.h>
26 #include "unittest-support.h"
37 test_checked_nohit_handler (
const char *log_domain, GLogLevelFlags log_level,
38 const gchar *msg, gpointer user_data);
40 test_list_nohit_handler (
const char *log_domain, GLogLevelFlags log_level,
41 const gchar *msg, gpointer user_data);
44 test_error_struct_new (gchar *log_domain, GLogLevelFlags log_level, gchar *msg)
47 err->log_domain = g_strdup (log_domain);
48 err->log_level = log_level;
49 err->msg = g_strdup (msg);
56 g_free (err->log_domain);
62 test_log_set_handler (GSList *list,
TestErrorStruct *error, GLogFunc handler)
66 hdlr->handler = g_log_set_handler (error->log_domain, error->log_level,
68 return g_slist_prepend (list, hdlr);
76 GTestLogFatalFunc f_hdlr = handler == (GLogFunc)test_list_handler ?
77 (GTestLogFatalFunc)test_list_nohit_handler :
78 (GTestLogFatalFunc)test_checked_nohit_handler;
80 hdlr->handler = g_log_set_handler (error->log_domain, error->log_level,
82 g_test_log_set_fatal_handler (f_hdlr, error);
83 return g_slist_prepend (list, hdlr);
87 test_free_log_handler (gpointer item)
90 g_log_remove_handler (handler->error->log_domain, handler->handler);
91 test_error_struct_free (handler->error);
96 test_null_handler (
const char *log_domain, GLogLevelFlags log_level,
97 const gchar *msg, gpointer user_data )
105 test_log_level (GLogLevelFlags flags)
107 const gchar *message[] = {
"RECURSIVE",
"FATAL",
"ERROR",
"CRITICAL",
108 "WARNING",
"MESSAGE",
"INFO",
"DEBUG"
110 guint i = 0, last = 0, max_bit = 7;
113 for (i = 0; i <= max_bit; i++)
116 gchar *tmp_msg = msg;
117 gchar *sep = (last < 2 ?
" " :
"|");
119 msg = (tmp_msg ? g_strjoin (sep, tmp_msg, message[i], NULL)
120 : g_strdup (message[i]));
130 static GList *message_queue = NULL;
135 message_queue = g_list_append (message_queue, error);
139 test_clear_error_list (
void)
141 g_list_free (message_queue);
142 message_queue = NULL;
146 do_test_list_handler (
const char *log_domain, GLogLevelFlags log_level,
147 const gchar *msg, gpointer user_data, gboolean hits)
149 GList *list = g_list_first (message_queue);
150 const guint fatal = G_LOG_FLAG_FATAL;
155 if (!g_strcmp0 (log_domain, error->log_domain)
156 && ((log_level | fatal) == (error->log_level | fatal))
157 && !g_strcmp0 (msg, error->msg))
163 list = g_list_next (list);
166 return test_checked_handler (log_domain, log_level, msg, user_data);
170 test_list_handler (
const char *log_domain, GLogLevelFlags log_level,
171 const gchar *msg, gpointer user_data)
173 return do_test_list_handler (log_domain, log_level, msg, user_data, TRUE);
177 test_list_nohit_handler (
const char *log_domain, GLogLevelFlags log_level,
178 const gchar *msg, gpointer user_data)
180 return do_test_list_handler (log_domain, log_level, msg, user_data, FALSE);
184 do_test_checked_handler (
const char *log_domain, GLogLevelFlags log_level,
185 const gchar *msg, gpointer user_data, gboolean hits)
190 || (tdata->log_domain != NULL
191 && g_strcmp0 (tdata->log_domain, log_domain))
192 || (tdata->log_level && tdata->log_level != log_level)
193 || (tdata->msg && g_strcmp0 (tdata->msg, msg)))
195 gchar *level = test_log_level (log_level);
196 g_printf (
"<%s> (%s) %s\n", level, log_domain, msg);
198 g_assert (log_level ^ G_LOG_FLAG_FATAL);
208 test_checked_handler (
const char *log_domain, GLogLevelFlags log_level,
209 const gchar *msg, gpointer user_data )
211 return do_test_checked_handler (log_domain, log_level, msg,
216 test_checked_nohit_handler (
const char *log_domain, GLogLevelFlags log_level,
217 const gchar *msg, gpointer user_data )
219 return do_test_checked_handler (log_domain, log_level, msg,
224 test_log_handler (
const char *log_domain, GLogLevelFlags log_level,
225 const gchar *msg, gpointer user_data )
227 gchar *level = test_log_level (log_level);
228 g_printf (
"<%s> (%s) %s\n", level, log_domain, msg);
230 g_assert (log_level ^ G_LOG_FLAG_FATAL);
235 test_set_called(
const gboolean val )
241 test_reset_called(
void )
243 const gboolean called = tdata.called;
244 tdata.called = FALSE;
249 test_set_data(
const gpointer val )
255 test_reset_data(
void )
257 const gpointer data = tdata.data;
263 test_free( gpointer data )
281 gpointer handler_data, gpointer event_data)
284 if ((signal->entity == entity || signal->entity == NULL)
285 && signal->event_type == event_type)
287 if (signal->event_data)
288 g_assert (signal->event_data == event_data);
298 sig->entity = entity;
299 sig->event_type = event_type;
300 sig->event_data = event_data;
303 return (TestSignal)sig;
307 test_signal_free (TestSignal sigp)
315 test_signal_return_hits (TestSignal sigp)
322 notify_destroy (gpointer pdata, GObject *obj)
324 gboolean *data = (gboolean*)pdata;
325 if (! (*data)) *data = TRUE;
329 test_object_checked_destroy (GObject *obj)
331 gboolean is_destroyed = FALSE;
332 if (!obj || ! G_IS_OBJECT (obj))
return FALSE;
333 g_object_weak_ref (obj, notify_destroy, &is_destroyed);
334 g_object_unref (obj);
gint qof_event_register_handler(QofEventHandler handler, gpointer handler_data)
Register a handler for events.
void qof_event_unregister_handler(gint handler_id)
Unregister an event handler.