diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2009-08-25 07:16:16 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2009-08-26 23:51:42 +0100 |
commit | bf4977b645270bb88225501e73848f7814cccead (patch) | |
tree | 3a4b2aa8809ab5e9a8d91d27da7a36ceacb8eaea /test | |
parent | 40aefac5d714bf7536632ed38c7a8ee05049f30b (diff) |
[test] Exit on first failure '-x'
Add a command line option to the test suite to cause it to exit after the
first failure. The purpose of this is for integration into 'git bisect run',
where the failing test is unknown and we are looking for any failure. For
example, for use in a regression script to find commits in the midst of as
series that need a refresh of a reference image (or fixing!).
Diffstat (limited to 'test')
-rw-r--r-- | test/cairo-test-runner.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c index cf1c0069..f147b5b7 100644 --- a/test/cairo-test-runner.c +++ b/test/cairo-test-runner.c @@ -81,6 +81,7 @@ typedef struct _cairo_test_runner { int *num_crashed_per_target; cairo_bool_t foreground; + cairo_bool_t exit_on_failure; cairo_bool_t list_only; cairo_bool_t full_test; } cairo_test_runner_t; @@ -285,7 +286,7 @@ static void usage (const char *argv0) { fprintf (stderr, - "Usage: %s [-af] [test-names|keywords ...]\n" + "Usage: %s [-afx] [test-names|keywords ...]\n" " %s -l\n" "\n" "Run the cairo conformance test suite over the given tests (all by default)\n" @@ -294,6 +295,7 @@ usage (const char *argv0) " -a all; run the full set of tests. By default the test suite\n" " skips similar surface and device offset testing.\n" " -f foreground; do not fork\n" + " -x exit on first failure\n" " -l list only; just list selected test case names without executing\n" "\n" "If test names are given they are used as exact matches either to a specific\n" @@ -308,7 +310,7 @@ _parse_cmdline (cairo_test_runner_t *runner, int *argc, char **argv[]) int c; while (1) { - c = _cairo_getopt (*argc, *argv, ":afl"); + c = _cairo_getopt (*argc, *argv, ":aflx"); if (c == -1) break; @@ -322,6 +324,9 @@ _parse_cmdline (cairo_test_runner_t *runner, int *argc, char **argv[]) case 'f': runner->foreground = TRUE; break; + case 'x': + runner->exit_on_failure = TRUE; + break; default: fprintf (stderr, "Internal error: unhandled option: %c\n", c); /* fall-through */ @@ -625,6 +630,9 @@ main (int argc, char **argv) if (strstr (env, "foreground")) { runner.foreground = TRUE; } + if (strstr (env, "exit-on-failure")) { + runner.exit_on_failure = TRUE; + } } _parse_cmdline (&runner, &argc, &argv); @@ -894,6 +902,9 @@ main (int argc, char **argv) TEST_NEXT: free (name); + if (runner.exit_on_failure && ! runner.passed) + break; + } _list_free (tests); |