From bb74adbc4d77bd3f787041ad236b6d5a5014b7ba Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Thu, 19 Apr 2012 14:26:51 +0300 Subject: [PATCH] tests: add support for tests expected to fail Add a new macro FAIL_TEST that can be used to define tests that are supposed to fail. To distinguish the supposed outcome of a test, add a field to 'struct test'. However, simply adding a field to 'struct test' will make all tests past the first one in an executable to be garbage. Apparently, the variables of type 'struct test' have different alignment when put into a special section than otherwise, and the compiler will get the skip from one 'struct test' to the next wrong. Explicitly specify the alingment of 'struct test' to be 16 bytes, which is what it seems to be in the special section on x86_64. Signed-off-by: Pekka Paalanen --- tests/test-runner.c | 3 +++ tests/test-runner.h | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/tests/test-runner.c b/tests/test-runner.c index bb070136..24ae3170 100644 --- a/tests/test-runner.c +++ b/tests/test-runner.c @@ -124,6 +124,9 @@ int main(int argc, char *argv[]) break; } + if (t->must_fail) + success = !success; + if (success) { pass++; fprintf(stderr, ", pass.\n"); diff --git a/tests/test-runner.h b/tests/test-runner.h index 253df818..0614101f 100644 --- a/tests/test-runner.h +++ b/tests/test-runner.h @@ -8,14 +8,25 @@ struct test { const char *name; void (*run)(void); -}; + int must_fail; +} __attribute__ ((aligned (16))); #define TEST(name) \ static void name(void); \ \ - const struct test test##name \ + const struct test test##name \ __attribute__ ((section ("test_section"))) = { \ - #name, name \ + #name, name, 0 \ + }; \ + \ + static void name(void) + +#define FAIL_TEST(name) \ + static void name(void); \ + \ + const struct test test##name \ + __attribute__ ((section ("test_section"))) = { \ + #name, name, 1 \ }; \ \ static void name(void)