diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c index cc854af4d..fdf4395bf 100644 --- a/src/tests/test-runner.c +++ b/src/tests/test-runner.c @@ -86,6 +86,24 @@ test_case_loop_quit (gpointer data) return FALSE; } +static gboolean +test_case_dispatch (TestCase *test, + GError **error) +{ + /* Wait until we've done any outstanding queued up work. + * Though we add this as BEFORE_REDRAW, the iteration that runs the + * BEFORE_REDRAW idles will proceed on and do the redraw, so we're + * waiting until after *all* frame processing. + */ + meta_later_add (META_LATER_BEFORE_REDRAW, + test_case_loop_quit, + test, + NULL); + g_main_loop_run (test->loop); + + return TRUE; +} + static gboolean test_case_wait (TestCase *test, GError **error) @@ -102,16 +120,8 @@ test_case_wait (TestCase *test, if (!test_client_wait (value, error)) return FALSE; - /* Then wait until we've done any outstanding queued up work. - * Though we add this as BEFORE_REDRAW, the iteration that runs the - * BEFORE_REDRAW idles will proceed on and do the redraw, so we're - * waiting until after *all* frame processing. - */ - meta_later_add (META_LATER_BEFORE_REDRAW, - test_case_loop_quit, - test, - NULL); - g_main_loop_run (test->loop); + /* Then wait until we've done any outstanding queued up work. */ + test_case_dispatch (test, error); /* Then set an XSync counter ourselves and and wait until * we receive the resulting event - this makes sure that we've @@ -560,6 +570,14 @@ test_case_do (TestCase *test, if (!test_case_wait (test, error)) return FALSE; } + else if (strcmp (argv[0], "dispatch") == 0) + { + if (argc != 1) + BAD_COMMAND("usage: %s", argv[0]); + + if (!test_case_dispatch (test, error)) + return FALSE; + } else if (strcmp (argv[0], "sleep") == 0) { guint64 interval;