blob: ae7054d7f377a7b36b418df4ad5934ed21408060 [file] [log] [blame]
#include <stdlib.h>
#include <glib.h>
/* Test g_warn macros */
static void
test_warnings (void)
{
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
{
g_warn_if_reached ();
}
g_test_trap_assert_failed();
g_test_trap_assert_stderr ("*WARNING*test_warnings*should not be reached*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
{
g_warn_if_fail (FALSE);
}
g_test_trap_assert_failed();
g_test_trap_assert_stderr ("*WARNING*test_warnings*runtime check failed*");
}
static guint log_count = 0;
static void
log_handler (const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer user_data)
{
g_assert_cmpstr (log_domain, ==, "bu");
g_assert_cmpint (log_level, ==, G_LOG_LEVEL_INFO);
log_count++;
}
/* test that custom log handlers only get called for
* their domain and level
*/
static void
test_set_handler (void)
{
guint id;
id = g_log_set_handler ("bu", G_LOG_LEVEL_INFO, log_handler, NULL);
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
{
g_log ("bu", G_LOG_LEVEL_DEBUG, "message");
g_log ("ba", G_LOG_LEVEL_DEBUG, "message");
g_log ("bu", G_LOG_LEVEL_INFO, "message");
g_log ("ba", G_LOG_LEVEL_INFO, "message");
g_assert_cmpint (log_count, ==, 1);
exit (0);
}
g_test_trap_assert_passed ();
g_log_remove_handler ("bu", id);
}
static void
test_default_handler (void)
{
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
{
g_error ("message1");
exit (0);
}
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*ERROR*message1*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
{
g_critical ("message2");
exit (0);
}
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*message2*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
{
g_warning ("message3");
exit (0);
}
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*WARNING*message3*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
{
g_message ("message4");
exit (0);
}
g_test_trap_assert_passed ();
g_test_trap_assert_stderr ("*Message*message4*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
{
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "message5");
exit (0);
}
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*INFO*message5*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
{
g_debug ("message6");
exit (0);
}
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*DEBUG*message6*");
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
{
g_log (G_LOG_DOMAIN, 1<<10, "message7");
exit (0);
}
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*LOG-0x400*message7*");
}
/* test that setting levels as fatal works */
static void
test_fatal_log_mask (void)
{
GLogLevelFlags flags;
flags = g_log_set_fatal_mask ("bu", G_LOG_LEVEL_INFO);
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
g_log ("bu", G_LOG_LEVEL_INFO, "fatal");
g_test_trap_assert_failed ();
g_log_set_fatal_mask ("bu", flags);
}
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/logging/default-handler", test_default_handler);
g_test_add_func ("/logging/warnings", test_warnings);
g_test_add_func ("/logging/fatal-log-mask", test_fatal_log_mask);
g_test_add_func ("/logging/set-handler", test_set_handler);
return g_test_run ();
}