mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-21 16:38:54 +02:00
gtestutils: fix g_test_set_nonfatal_assertions()
g_test_set_nonfatal_assertions() was a no-op, because g_assertion_message() wasn't actually checking the test_nonfatal_assertions flag. Fix that and add a test. Also, g_test_set_nonfatal_assertions() has to set test_mode_fatal to FALSE as well, or else a failed assertion will cause the test program to abort at the end of the failed test. Also, belatedly add this and the new g_assert_* methods to the docs. https://bugzilla.gnome.org/show_bug.cgi?id=711800
This commit is contained in:
@@ -2966,6 +2966,7 @@ g_test_rand_double_range
|
|||||||
|
|
||||||
g_assert
|
g_assert
|
||||||
g_assert_not_reached
|
g_assert_not_reached
|
||||||
|
|
||||||
g_assert_cmpstr
|
g_assert_cmpstr
|
||||||
g_assert_cmpint
|
g_assert_cmpint
|
||||||
g_assert_cmpuint
|
g_assert_cmpuint
|
||||||
@@ -2973,6 +2974,10 @@ g_assert_cmphex
|
|||||||
g_assert_cmpfloat
|
g_assert_cmpfloat
|
||||||
g_assert_no_error
|
g_assert_no_error
|
||||||
g_assert_error
|
g_assert_error
|
||||||
|
g_assert_true
|
||||||
|
g_assert_false
|
||||||
|
g_assert_null
|
||||||
|
g_test_set_nonfatal_assertions
|
||||||
|
|
||||||
GTestCase
|
GTestCase
|
||||||
GTestSuite
|
GTestSuite
|
||||||
|
@@ -1754,7 +1754,9 @@ g_test_failed (void)
|
|||||||
* g_assert_true(), g_assert_false(), g_assert_null(), g_assert_no_error(),
|
* g_assert_true(), g_assert_false(), g_assert_null(), g_assert_no_error(),
|
||||||
* g_assert_error(), g_test_assert_expected_messages() and the various
|
* g_assert_error(), g_test_assert_expected_messages() and the various
|
||||||
* g_test_trap_assert_*() macros to not abort to program, but instead
|
* g_test_trap_assert_*() macros to not abort to program, but instead
|
||||||
* call g_test_fail() and continue.
|
* call g_test_fail() and continue. (This also changes the behavior of
|
||||||
|
* g_test_fail() so that it will not cause the test program to abort
|
||||||
|
* after completing the failed test.)
|
||||||
*
|
*
|
||||||
* Note that the g_assert_not_reached() and g_assert() are not
|
* Note that the g_assert_not_reached() and g_assert() are not
|
||||||
* affected by this.
|
* affected by this.
|
||||||
@@ -1769,6 +1771,7 @@ g_test_set_nonfatal_assertions (void)
|
|||||||
if (!g_test_config_vars->test_initialized)
|
if (!g_test_config_vars->test_initialized)
|
||||||
g_error ("g_test_set_nonfatal_assertions called without g_test_init");
|
g_error ("g_test_set_nonfatal_assertions called without g_test_init");
|
||||||
test_nonfatal_assertions = TRUE;
|
test_nonfatal_assertions = TRUE;
|
||||||
|
test_mode_fatal = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2271,15 +2274,23 @@ g_assertion_message (const char *domain,
|
|||||||
" ", message, NULL);
|
" ", message, NULL);
|
||||||
g_printerr ("**\n%s\n", s);
|
g_printerr ("**\n%s\n", s);
|
||||||
|
|
||||||
|
g_test_log (G_TEST_LOG_ERROR, s, NULL, 0, NULL);
|
||||||
|
|
||||||
|
if (test_nonfatal_assertions)
|
||||||
|
{
|
||||||
|
g_free (s);
|
||||||
|
g_test_fail ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* store assertion message in global variable, so that it can be found in a
|
/* store assertion message in global variable, so that it can be found in a
|
||||||
* core dump */
|
* core dump */
|
||||||
if (__glib_assert_msg != NULL)
|
if (__glib_assert_msg != NULL)
|
||||||
/* free the old one */
|
/* free the old one */
|
||||||
free (__glib_assert_msg);
|
free (__glib_assert_msg);
|
||||||
__glib_assert_msg = (char*) malloc (strlen (s) + 1);
|
__glib_assert_msg = (char*) malloc (strlen (s) + 1);
|
||||||
strcpy (__glib_assert_msg, s);
|
strcpy (__glib_assert_msg, s);
|
||||||
|
|
||||||
g_test_log (G_TEST_LOG_ERROR, s, NULL, 0, NULL);
|
|
||||||
g_free (s);
|
g_free (s);
|
||||||
_g_log_abort ();
|
_g_log_abort ();
|
||||||
}
|
}
|
||||||
|
@@ -563,6 +563,25 @@ test_dash_p (void)
|
|||||||
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/subprocess/hidden*");
|
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/subprocess/hidden*");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_nonfatal_subprocess (void)
|
||||||
|
{
|
||||||
|
g_test_set_nonfatal_assertions ();
|
||||||
|
|
||||||
|
g_assert_cmpint (4, ==, 5);
|
||||||
|
|
||||||
|
g_print ("The End\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_nonfatal (void)
|
||||||
|
{
|
||||||
|
g_test_trap_subprocess ("/misc/nonfatal/subprocess", 0, 0);
|
||||||
|
g_test_trap_assert_failed ();
|
||||||
|
g_test_trap_assert_stderr ("*assertion failed*4 == 5*");
|
||||||
|
g_test_trap_assert_stdout ("*The End*");
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char *argv[])
|
char *argv[])
|
||||||
@@ -624,5 +643,8 @@ main (int argc,
|
|||||||
g_test_add_func ("/misc/dash-p/subprocess/hidden", test_dash_p_hidden);
|
g_test_add_func ("/misc/dash-p/subprocess/hidden", test_dash_p_hidden);
|
||||||
g_test_add_func ("/misc/dash-p/subprocess/hidden/sub", test_dash_p_hidden_sub);
|
g_test_add_func ("/misc/dash-p/subprocess/hidden/sub", test_dash_p_hidden_sub);
|
||||||
|
|
||||||
|
g_test_add_func ("/misc/nonfatal", test_nonfatal);
|
||||||
|
g_test_add_func ("/misc/nonfatal/subprocess", test_nonfatal_subprocess);
|
||||||
|
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user