test-utils: Skip tests if no DISPLAY is set

Instead of just bailing out when initializing the test suite, we can do
a much better job and skip all the tests. This means that the TAP driver
will work correctly instead of dying a horrible death, and we get a nice
report with a proper cause of the test skipping.
This commit is contained in:
Emmanuele Bassi 2014-04-02 19:25:55 +01:00
parent f065a34e46
commit f9d99d1c4e

View File

@ -15,6 +15,8 @@
typedef struct { typedef struct {
ClutterActor *stage; ClutterActor *stage;
guint no_display : 1;
} ClutterTestEnvironment; } ClutterTestEnvironment;
static ClutterTestEnvironment *test_environ = NULL; static ClutterTestEnvironment *test_environ = NULL;
@ -32,6 +34,8 @@ void
clutter_test_init (int *argc, clutter_test_init (int *argc,
char ***argv) char ***argv)
{ {
gboolean no_display = FALSE;
if (G_UNLIKELY (test_environ != NULL)) if (G_UNLIKELY (test_environ != NULL))
g_error ("Attempting to initialize the test suite more than once, " g_error ("Attempting to initialize the test suite more than once, "
"aborting...\n"); "aborting...\n");
@ -48,9 +52,12 @@ clutter_test_init (int *argc,
if (display == NULL || *display == '\0') if (display == NULL || *display == '\0')
{ {
g_print ("No DISPLAY environment variable found, but we require a " g_test_message ("No DISPLAY environment variable found, but we require a "
"DISPLAY set in order to run the conformance test suite."); "DISPLAY set in order to run the conformance test suite.\n"
exit (0); "Skipping all tests.\n");
no_display = TRUE;
goto out;
} }
} }
#endif #endif
@ -60,14 +67,16 @@ clutter_test_init (int *argc,
*/ */
_clutter_set_sync_to_vblank (FALSE); _clutter_set_sync_to_vblank (FALSE);
g_test_init (argc, argv, NULL);
g_test_bug_base ("https://bugzilla.gnome.org/show_bug.cgi?id=%s");
/* perform the actual initialization */ /* perform the actual initialization */
g_assert (clutter_init (NULL, NULL) == CLUTTER_INIT_SUCCESS); g_assert (clutter_init (NULL, NULL) == CLUTTER_INIT_SUCCESS);
out:
g_test_init (argc, argv, NULL);
g_test_bug_base ("https://bugzilla.gnome.org/show_bug.cgi?id=%s");
/* our global state, accessible from each test unit */ /* our global state, accessible from each test unit */
test_environ = g_new0 (ClutterTestEnvironment, 1); test_environ = g_new0 (ClutterTestEnvironment, 1);
test_environ->no_display = no_display;
} }
/** /**
@ -110,6 +119,12 @@ clutter_test_func_wrapper (gconstpointer data_)
/* ensure that the previous test state has been cleaned up */ /* ensure that the previous test state has been cleaned up */
g_assert_null (test_environ->stage); g_assert_null (test_environ->stage);
if (test_environ->no_display)
{
g_test_skip ("No DISPLAY set");
goto out;
}
if (data->test_data != NULL) if (data->test_data != NULL)
{ {
GTestDataFunc test_func = data->test_func; GTestDataFunc test_func = data->test_func;
@ -123,6 +138,7 @@ clutter_test_func_wrapper (gconstpointer data_)
test_func (); test_func ();
} }
out:
if (data->test_notify != NULL) if (data->test_notify != NULL)
data->test_notify (data->test_data); data->test_notify (data->test_data);