[glib: 2/3] gtestutils: Bail out of g_test_init() if G_DISABLE_ASSERT is defined
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 2/3] gtestutils: Bail out of g_test_init() if G_DISABLE_ASSERT is defined
- Date: Fri, 13 Jul 2018 16:01:52 +0000 (UTC)
commit ca23acdb24b568ed98257f1c462eb83ca527a205
Author: Philip Withnall <withnall endlessm com>
Date: Wed Jul 11 17:30:24 2018 +0200
gtestutils: Bail out of g_test_init() if G_DISABLE_ASSERT is defined
If G_DISABLE_ASSERT is defined, g_assert() is a no-op. Despite it now
being standard practice to *not* use g_assert() in unit tests (use
g_assert_*() instead), a lot of existing unit tests still use it.
Compiling those tests with G_DISABLE_ASSERT would make them silently
no-ops. Avoid that by warning the user loudly.
Note that it’s pretty rare for people to compile with G_DISABLE_ASSERT,
so it’s not expected that this will be hit often.
Signed-off-by: Philip Withnall <withnall endlessm com>
https://gitlab.gnome.org/GNOME/glib/issues/976
glib/gtestutils.c | 6 +++---
glib/gtestutils.h | 23 +++++++++++++++++++++++
2 files changed, 26 insertions(+), 3 deletions(-)
---
diff --git a/glib/gtestutils.c b/glib/gtestutils.c
index 6c3d998d5..da6c7338c 100644
--- a/glib/gtestutils.c
+++ b/glib/gtestutils.c
@@ -1274,9 +1274,9 @@ parse_args (gint *argc_p,
* Since: 2.16
*/
void
-g_test_init (int *argc,
- char ***argv,
- ...)
+(g_test_init) (int *argc,
+ char ***argv,
+ ...)
{
static char seedstr[4 + 4 * 8 + 1];
va_list args;
diff --git a/glib/gtestutils.h b/glib/gtestutils.h
index b247f2f3a..550e2414e 100644
--- a/glib/gtestutils.h
+++ b/glib/gtestutils.h
@@ -147,6 +147,29 @@ GLIB_AVAILABLE_IN_ALL
void g_test_init (int *argc,
char ***argv,
...) G_GNUC_NULL_TERMINATED;
+
+/* While we discourage its use, g_assert() is often used in unit tests
+ * (especially in legacy code). g_assert_*() should really be used instead.
+ * g_assert() can be disabled at client program compile time, which can render
+ * tests useless. Highlight that to the user. */
+#ifdef G_DISABLE_ASSERT
+#if defined(G_HAVE_ISO_VARARGS)
+#define g_test_init(argc, argv, ...) \
+ G_STMT_START { \
+ g_printerr ("Tests were compiled with G_DISABLE_ASSERT and are likely no-ops. Aborting.\n"); \
+ exit (1); \
+ } G_STMT_END
+#elif defined(G_HAVE_GNUC_VARARGS)
+#define g_test_init(argc, argv...) \
+ G_STMT_START { \
+ g_printerr ("Tests were compiled with G_DISABLE_ASSERT and are likely no-ops. Aborting.\n"); \
+ exit (1); \
+ } G_STMT_END
+#else /* no varargs */
+ /* do nothing */
+#endif /* varargs support */
+#endif /* G_DISABLE_ASSERT */
+
/* query testing framework config */
#define g_test_initialized() (g_test_config_vars->test_initialized)
#define g_test_quick() (g_test_config_vars->test_quick)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]