aboutsummaryrefslogtreecommitdiff
path: root/test_runner.c
diff options
context:
space:
mode:
authorDavid Phillips <david@yeah.nah.nz>2021-02-13 18:21:36 +1300
committerDavid Phillips <david@yeah.nah.nz>2021-02-13 18:25:28 +1300
commit4710921284adbf5005421515fbab5dd1aa38e9aa (patch)
tree18d1850a58c58f0095c8752a76ef8584a2628dbc /test_runner.c
parent8ab11293cdd2a47e7950fa9c488cbc504325cad3 (diff)
downloadaltimeter-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.c21
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();
+}