We handle FAIL_TEST tests by simply inverting the success flag. The problem with this is, that if a FAIL_TEST fails by a SIGSEGV, it will be interpreted as passed. However, no code should ever cause a SEGV, or any other signal than ABRT. And even ABRT only in the case of an assert() that is meant to fail. We would probably need more sophistication for the FAIL_TEST cases.
For now, just interpret any other signal than ABRT as a hard failure, regardless whether it is a TEST or FAIL_TEST. At least segfaults do not cause false passes anymore. Signed-off-by: Pekka Paalanen <[email protected]> --- tests/weston-test-runner.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/tests/weston-test-runner.c b/tests/weston-test-runner.c index e60d4d2..27ea9e4 100644 --- a/tests/weston-test-runner.c +++ b/tests/weston-test-runner.c @@ -28,6 +28,7 @@ #include <string.h> #include <assert.h> #include <errno.h> +#include <signal.h> #include "weston-test-runner.h" extern const struct weston_test __start_test_section, __stop_test_section; @@ -71,6 +72,7 @@ int main(int argc, char *argv[]) pass = 0; for (t = &__start_test_section; t < &__stop_test_section; t++) { int success = 0; + int hardfail = 0; pid = fork(); assert(pid >= 0); @@ -93,13 +95,15 @@ int main(int argc, char *argv[]) case CLD_KILLED: case CLD_DUMPED: fprintf(stderr, "signal %d", info.si_status); + if (info.si_status != SIGABRT) + hardfail = 1; break; } if (t->must_fail) success = !success; - if (success) { + if (success && !hardfail) { pass++; fprintf(stderr, ", pass.\n"); } else -- 1.7.8.6 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
