Hi, this is the 8th version of my patch series that introduces the clar testing framework. Changes compared to v7: - Properly wire up the "--immediate" flag. - Give a hint for the syntax to run only specific suites or tests for the "--run" and "--exclude" options. Thanks! Patrick Johannes Schindelin (4): clar: avoid compile error with mingw-w64 clar(win32): avoid compile error due to unused `fs_copy()` clar: stop including `shellapi.h` unnecessarily clar: add CMake support Patrick Steinhardt (10): t: do not pass GIT_TEST_OPTS to unit tests with prove t: import the clar unit testing framework t/clar: fix compatibility with NonStop Makefile: fix sparse dependency on GENERATED_H Makefile: make hdr-check depend on generated headers Makefile: do not use sparse on third-party sources Makefile: wire up the clar unit testing framework t/unit-tests: implement test driver t/unit-tests: convert strvec tests to use clar t/unit-tests: convert ctype tests to use clar .gitignore | 1 + Documentation/technical/unit-tests.txt | 2 + Makefile | 53 +- contrib/buildsystems/CMakeLists.txt | 53 ++ t/Makefile | 4 +- t/run-test.sh | 2 +- t/unit-tests/.gitignore | 2 + t/unit-tests/clar-generate.awk | 50 ++ t/unit-tests/clar/.github/workflows/ci.yml | 23 + t/unit-tests/clar/COPYING | 15 + t/unit-tests/clar/README.md | 329 ++++++++ t/unit-tests/clar/clar.c | 842 +++++++++++++++++++++ t/unit-tests/clar/clar.h | 173 +++++ t/unit-tests/clar/clar/fixtures.h | 50 ++ t/unit-tests/clar/clar/fs.h | 524 +++++++++++++ t/unit-tests/clar/clar/print.h | 211 ++++++ t/unit-tests/clar/clar/sandbox.h | 159 ++++ t/unit-tests/clar/clar/summary.h | 143 ++++ t/unit-tests/clar/generate.py | 266 +++++++ t/unit-tests/clar/test/.gitignore | 4 + t/unit-tests/clar/test/Makefile | 39 + t/unit-tests/clar/test/clar_test.h | 16 + t/unit-tests/clar/test/main.c | 40 + t/unit-tests/clar/test/main.c.sample | 27 + t/unit-tests/clar/test/resources/test/file | 1 + t/unit-tests/clar/test/sample.c | 84 ++ t/unit-tests/{t-ctype.c => ctype.c} | 71 +- t/unit-tests/strvec.c | 241 ++++++ t/unit-tests/t-strvec.c | 211 ------ t/unit-tests/unit-test.c | 47 ++ t/unit-tests/unit-test.h | 10 + 31 files changed, 3459 insertions(+), 234 deletions(-) create mode 100644 t/unit-tests/clar-generate.awk create mode 100644 t/unit-tests/clar/.github/workflows/ci.yml create mode 100644 t/unit-tests/clar/COPYING create mode 100644 t/unit-tests/clar/README.md create mode 100644 t/unit-tests/clar/clar.c create mode 100644 t/unit-tests/clar/clar.h create mode 100644 t/unit-tests/clar/clar/fixtures.h create mode 100644 t/unit-tests/clar/clar/fs.h create mode 100644 t/unit-tests/clar/clar/print.h create mode 100644 t/unit-tests/clar/clar/sandbox.h create mode 100644 t/unit-tests/clar/clar/summary.h create mode 100755 t/unit-tests/clar/generate.py create mode 100644 t/unit-tests/clar/test/.gitignore create mode 100644 t/unit-tests/clar/test/Makefile create mode 100644 t/unit-tests/clar/test/clar_test.h create mode 100644 t/unit-tests/clar/test/main.c create mode 100644 t/unit-tests/clar/test/main.c.sample create mode 100644 t/unit-tests/clar/test/resources/test/file create mode 100644 t/unit-tests/clar/test/sample.c rename t/unit-tests/{t-ctype.c => ctype.c} (68%) create mode 100644 t/unit-tests/strvec.c delete mode 100644 t/unit-tests/t-strvec.c create mode 100644 t/unit-tests/unit-test.c create mode 100644 t/unit-tests/unit-test.h Range-diff against v7: 1: b67f10ec0b0 = 1: b67f10ec0b0 t: do not pass GIT_TEST_OPTS to unit tests with prove 2: 55a9b46e65f = 2: 55a9b46e65f t: import the clar unit testing framework 3: f24401f0a87 = 3: f24401f0a87 t/clar: fix compatibility with NonStop 4: 658a601c541 = 4: 658a601c541 clar: avoid compile error with mingw-w64 5: 0b8a6ac5fed = 5: 0b8a6ac5fed clar(win32): avoid compile error due to unused `fs_copy()` 6: c50e7a0ea68 = 6: c50e7a0ea68 clar: stop including `shellapi.h` unnecessarily 7: b8f3f16dd27 = 7: b8f3f16dd27 Makefile: fix sparse dependency on GENERATED_H 8: 3d3fe443b9a = 8: 3d3fe443b9a Makefile: make hdr-check depend on generated headers 9: 7d0f494850a = 9: 7d0f494850a Makefile: do not use sparse on third-party sources 10: 9c74c5ae019 = 10: 9c74c5ae019 Makefile: wire up the clar unit testing framework 11: 8bd5b3e2b29 ! 11: 81d932bfa33 t/unit-tests: implement test driver @@ t/unit-tests/unit-test.c + struct string_list exclude_args = STRING_LIST_INIT_NODUP; + int immediate = 0; + struct option options[] = { -+ OPT_BOOL('i', "--immediate", &immediate, ++ OPT_BOOL('i', "immediate", &immediate, + N_("immediately exit upon the first failed test")), -+ OPT_STRING_LIST('r', "run", &run_args, N_("name"), -+ N_("run only test suite or individual test <name>")), -+ OPT_STRING_LIST('x', "exclude", &exclude_args, N_("name"), -+ N_("exclude test suite <name>")), ++ OPT_STRING_LIST('r', "run", &run_args, N_("suite[::test]"), ++ N_("run only test suite or individual test <suite[::test]>")), ++ OPT_STRING_LIST('x', "exclude", &exclude_args, N_("suite"), ++ N_("exclude test suite <suite>")), + OPT_END(), + }; + struct strvec args = STRVEC_INIT; @@ t/unit-tests/unit-test.c + + strvec_push(&args, argv[0]); + strvec_push(&args, "-t"); ++ if (immediate) ++ strvec_push(&args, "-Q"); + for (size_t i = 0; i < run_args.nr; i++) + strvec_pushf(&args, "-s%s", run_args.items[i].string); + for (size_t i = 0; i < exclude_args.nr; i++) 12: 3c3b9eacdfb = 12: 604303e31aa t/unit-tests: convert strvec tests to use clar 13: c8360db2f86 = 13: ba05b9f1eef t/unit-tests: convert ctype tests to use clar 14: d51c146cd9d = 14: 8441d29daa8 clar: add CMake support -- 2.46.0.519.g2e7b89e038.dirty