]> granicus.if.org Git - check/commit
Fix START_TEST to look like valid C code.
authorFilipe Brandenburger <filbranden@google.com>
Tue, 12 Jun 2018 17:08:07 +0000 (10:08 -0700)
committerFilipe Brandenburger <filbranden@google.com>
Fri, 15 Jun 2018 01:15:44 +0000 (18:15 -0700)
commit3987c1d906ee68e0a6a5fd7888d88e0873f914d9
tree65cf29e416e57807af8f7be8a3fde775fa01e273
parent65e8c5e36f2841be16c4c96bae7a7bc171ff7d67
Fix START_TEST to look like valid C code.

Instead of exporting the defined name as a bare function, export a
struct that has a pointer to the function, but also its name, file and
line number where it is defined.

Store that information into a new `struct TTest`.

After this commit, START_TEST(<testname>) will create three definitions:
- <testname>_fn: The actual function;
- <testname>_ttest: A `struct TTest` with the information about it;
- <testname>: A pointer to <testname>_ttest.

Functions `tcase_add_test()` and friends are updated to take a `TTest *`
argument rather than a `TFun` and separate name. The runners are updated
to find that information inside the linked `tc->ttest`. The call to
`tcase_fn_start()` is moved from the defined functions to the runners
(both the "fork" and the "nofork" one) which call it just before
invoking the test function.

A nice side-effect is that END_TEST is now optional, though the empty
`#define` is kept for backwards compability.

v2: Initialize the struct TTest by position to be compatible with older
compilers that do not recognize named fields (e.g. VS 2010, VS 2012.)

Tested:
- `make check` still passes.
- Removing END_TEST from test cases still produces valid code that
  builds and passes tests.
src/check.c
src/check.h.in
src/check_impl.h
src/check_log.c
src/check_run.c