4 /* Test g_warn macros */
8 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
12 g_test_trap_assert_failed();
13 g_test_trap_assert_stderr ("*WARNING*test_warnings*should not be reached*");
15 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
17 g_warn_if_fail (FALSE);
19 g_test_trap_assert_failed();
20 g_test_trap_assert_stderr ("*WARNING*test_warnings*runtime check failed*");
23 static guint log_count = 0;
26 log_handler (const gchar *log_domain,
27 GLogLevelFlags log_level,
31 g_assert_cmpstr (log_domain, ==, "bu");
32 g_assert_cmpint (log_level, ==, G_LOG_LEVEL_INFO);
37 /* test that custom log handlers only get called for
38 * their domain and level
41 test_set_handler (void)
45 id = g_log_set_handler ("bu", G_LOG_LEVEL_INFO, log_handler, NULL);
47 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
49 g_log ("bu", G_LOG_LEVEL_DEBUG, "message");
50 g_log ("ba", G_LOG_LEVEL_DEBUG, "message");
51 g_log ("bu", G_LOG_LEVEL_INFO, "message");
52 g_log ("ba", G_LOG_LEVEL_INFO, "message");
54 g_assert_cmpint (log_count, ==, 1);
57 g_test_trap_assert_passed ();
59 g_log_remove_handler ("bu", id);
63 test_default_handler (void)
65 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
70 g_test_trap_assert_failed ();
71 g_test_trap_assert_stderr ("*ERROR*message1*");
73 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
75 g_critical ("message2");
78 g_test_trap_assert_failed ();
79 g_test_trap_assert_stderr ("*CRITICAL*message2*");
81 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
83 g_warning ("message3");
86 g_test_trap_assert_failed ();
87 g_test_trap_assert_stderr ("*WARNING*message3*");
89 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
91 g_message ("message4");
94 g_test_trap_assert_passed ();
95 g_test_trap_assert_stderr ("*Message*message4*");
97 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
99 g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "message5");
102 g_test_trap_assert_passed ();
103 g_test_trap_assert_stdout_unmatched ("*INFO*message5*");
105 g_setenv ("G_MESSAGES_DEBUG", "foo bar baz", TRUE);
106 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
108 g_log ("bar", G_LOG_LEVEL_INFO, "message5");
111 g_test_trap_assert_passed ();
112 g_test_trap_assert_stdout ("*INFO*message5*");
114 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
116 g_log ("baz", G_LOG_LEVEL_DEBUG, "message6");
119 g_test_trap_assert_passed ();
120 g_test_trap_assert_stdout ("*DEBUG*message6*");
122 g_setenv ("G_MESSAGES_DEBUG", "all", TRUE);
123 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
125 g_log ("foo", G_LOG_LEVEL_DEBUG, "6");
126 g_log ("bar", G_LOG_LEVEL_DEBUG, "6");
127 g_log ("baz", G_LOG_LEVEL_DEBUG, "6");
130 g_test_trap_assert_passed ();
131 g_test_trap_assert_stdout ("*DEBUG*6*6*6*");
133 g_unsetenv ("G_MESSAGES_DEBUG");
134 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
136 g_log (G_LOG_DOMAIN, 1<<10, "message7");
139 g_test_trap_assert_passed ();
140 g_test_trap_assert_stdout ("*LOG-0x400*message7*");
143 /* test that setting levels as fatal works */
145 test_fatal_log_mask (void)
147 GLogLevelFlags flags;
149 flags = g_log_set_fatal_mask ("bu", G_LOG_LEVEL_INFO);
150 if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT))
151 g_log ("bu", G_LOG_LEVEL_INFO, "fatal");
152 g_test_trap_assert_failed ();
153 g_log_set_fatal_mask ("bu", flags);
156 static gint my_print_count = 0;
158 my_print_handler (const gchar *text)
164 test_print_handler (void)
166 GPrintFunc old_print_handler;
168 old_print_handler = g_set_print_handler (my_print_handler);
169 g_assert (old_print_handler == NULL);
173 g_assert_cmpint (my_print_count, ==, 1);
175 g_set_print_handler (NULL);
179 test_printerr_handler (void)
181 GPrintFunc old_printerr_handler;
183 old_printerr_handler = g_set_printerr_handler (my_print_handler);
184 g_assert (old_printerr_handler == NULL);
187 g_printerr ("bu ba");
188 g_assert_cmpint (my_print_count, ==, 1);
190 g_set_printerr_handler (NULL);
193 static char *fail_str = "foo";
194 static char *log_str = "bar";
197 good_failure_handler (const gchar *log_domain,
198 GLogLevelFlags log_level,
202 g_test_message ("The Good Fail Message Handler\n");
203 g_assert ((char *)user_data != log_str);
204 g_assert ((char *)user_data == fail_str);
210 bad_failure_handler (const gchar *log_domain,
211 GLogLevelFlags log_level,
215 g_test_message ("The Bad Fail Message Handler\n");
216 g_assert ((char *)user_data == log_str);
217 g_assert ((char *)user_data != fail_str);
223 test_handler (const gchar *log_domain,
224 GLogLevelFlags log_level,
228 g_test_message ("The Log Message Handler\n");
229 g_assert ((char *)user_data != fail_str);
230 g_assert ((char *)user_data == log_str);
236 g_test_bug ("653052");
238 g_test_log_set_fatal_handler (good_failure_handler, fail_str);
239 g_log_set_default_handler (test_handler, log_str);
241 g_return_if_fail (0);
243 g_test_log_set_fatal_handler (bad_failure_handler, fail_str);
244 g_log_set_default_handler (test_handler, log_str);
246 g_return_if_fail (0);
250 main (int argc, char *argv[])
252 g_test_init (&argc, &argv, NULL);
253 g_test_bug_base ("http://bugzilla.gnome.org/");
255 g_test_add_func ("/logging/default-handler", test_default_handler);
256 g_test_add_func ("/logging/warnings", test_warnings);
257 g_test_add_func ("/logging/fatal-log-mask", test_fatal_log_mask);
258 g_test_add_func ("/logging/set-handler", test_set_handler);
259 g_test_add_func ("/logging/print-handler", test_print_handler);
260 g_test_add_func ("/logging/printerr-handler", test_printerr_handler);
261 g_test_add_func ("/logging/653052", bug653052);
263 return g_test_run ();