diff options
author | David Phillips <david@yeah.nah.nz> | 2021-02-13 18:21:36 +1300 |
---|---|---|
committer | David Phillips <david@yeah.nah.nz> | 2021-02-13 18:25:28 +1300 |
commit | 4710921284adbf5005421515fbab5dd1aa38e9aa (patch) | |
tree | 18d1850a58c58f0095c8752a76ef8584a2628dbc /test_runner.c | |
parent | 8ab11293cdd2a47e7950fa9c488cbc504325cad3 (diff) | |
download | altimeter-4710921284adbf5005421515fbab5dd1aa38e9aa.tar.xz |
Add test runner
This patch adds a "magic" test runner which discovers all test cases in the
executable into which it is linked. This is achieved through the use of a
special macro used to declare tests, so that they are added onto a linker-
generated list. The linker list logic is largely taken from U-Boot source code,
with minor some tweaks made.
This linker-generated list is then used at runtime in order to pick out every
test case which can be run, resulting in a cross-file "suite" of unity unit
tests, rather than separate test executables per module. A sample test module,
test_test.c is provided to illustrate the test runner's ability to correctly
discover tests across multiple translation units.
Diffstat (limited to 'test_runner.c')
-rw-r--r-- | test_runner.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test_runner.c b/test_runner.c new file mode 100644 index 0000000..9d3ad65 --- /dev/null +++ b/test_runner.c @@ -0,0 +1,21 @@ +#include <stdio.h> + +#include "test_runner.h" +#include "unity.h" + +/* unity requires these, even if empty */ +void setUp(){}; +void tearDown(){}; + +int main(void) +{ + struct test_fn *tests = list_head(struct test_fn, test_list); + size_t count = list_entry_count(struct test_fn, test_list); + printf("Suite has %zd tests\n", count); + UNITY_BEGIN(); + for (size_t i = 0; i < count; i++) { + UnitySetTestFile(tests[i].file); + UnityDefaultTestRun(tests[i].fn, tests[i].name, tests[i].line); + } + UNITY_END(); +} |