diff options
author | Sam Spilsbury <smspillaz@gmail.com> | 2013-09-13 10:01:20 +0800 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-09-13 15:19:35 -0700 |
commit | b502126e1943e7991fd54fe0190f80bb86264370 (patch) | |
tree | 15bfb01b3f93d7a3085b18caefda2a01cda6efa3 /tests/weston-test-runner.h | |
parent | db0eda4abb0a10641a2cb6092e7e8eee9966d6cc (diff) | |
download | weston-b502126e1943e7991fd54fe0190f80bb86264370.tar.gz |
Add support for table-driven testing.
The new TEST_P macro takes a function name and a "data" argument to
point to an arbitrary array of known size of test data. This allows
multiple tests to be run with different datasets. The array is stored
as a void * but advanced by a known size on each iteration.
The data for each invocation of the test is provided as a "data" argument,
it is the responsibility of the test to cast it to something sensible.
Also fixed single-test running to only run the tests specified
Diffstat (limited to 'tests/weston-test-runner.h')
-rw-r--r-- | tests/weston-test-runner.h | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/tests/weston-test-runner.h b/tests/weston-test-runner.h index 41df3868..457cf31c 100644 --- a/tests/weston-test-runner.h +++ b/tests/weston-test-runner.h @@ -1,5 +1,6 @@ /* * Copyright © 2012 Intel Corporation + * Copyright © 2013 Sam Spilsbury <smspillaz@gmail.com> * * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided @@ -23,34 +24,53 @@ #ifndef _WESTON_TEST_RUNNER_H_ #define _WESTON_TEST_RUNNER_H_ +#include <stdlib.h> + #ifdef NDEBUG #error "Tests must not be built with NDEBUG defined, they rely on assert()." #endif struct weston_test { const char *name; - void (*run)(void); + void (*run)(void *); + const void *table_data; + size_t element_size; + int n_elements; int must_fail; -} __attribute__ ((aligned (16))); +} __attribute__ ((aligned (32))); -#define TEST(name) \ - static void name(void); \ +#define TEST_BEGIN(name, arg) \ + static void name(arg) + +#define TEST_COMMON(func, name, ret, data, size, n_elem) \ + static void func(void *); \ \ const struct weston_test test##name \ - __attribute__ ((section ("test_section"))) = { \ - #name, name, 0 \ - }; \ - \ - static void name(void) + __attribute__ ((section ("test_section"))) = \ + { \ + #name, func, data, size, n_elem, ret \ + }; -#define FAIL_TEST(name) \ +#define NO_ARG_TEST(name, ret) \ + TEST_COMMON(wrap##name, name, ret, NULL, 0, 1) \ static void name(void); \ + static void wrap##name(void *data) \ + { \ + (void) data; \ + name(); \ + } \ \ - const struct weston_test test##name \ - __attribute__ ((section ("test_section"))) = { \ - #name, name, 1 \ - }; \ - \ - static void name(void) + TEST_BEGIN(name, void) + +#define ARG_TEST(name, ret, test_data) \ + TEST_COMMON(name, name, ret, test_data, \ + sizeof(test_data[0]), \ + sizeof(test_data) / sizeof (test_data[0])) \ + TEST_BEGIN(name, void *data) \ + +#define TEST(name) NO_ARG_TEST(name, 0) +#define FAIL_TEST(name) NO_ARG_TEST(name, 1) +#define TEST_P(name, data) ARG_TEST(name, 0, data) +#define FAIL_TEST_P(name, data) ARG_TEST(name, 1, data) #endif |