| .. | ||
| benchmarks | ||
| clar | ||
| headertest | ||
| libgit2 | ||
| resources | ||
| util | ||
| CMakeLists.txt | ||
| README.md | ||
libgit2 tests
These are the unit and integration tests for the libgit2 projects.
- benchmarksThese are benchmark tests that excercise the CLI.
- clar
 This is clar the common test framework.
- headertest
 This is a simple project that ensures that our public headers are compatible with extremely strict compilation options.
- libgit2
 These tests exercise the core git functionality in libgit2 itself.
- resources
 These are the resources for the tests, including files and git repositories.
- util
 These are tests of the common utility library.
Writing tests for libgit2
libgit2 uses the clar test framework, a C testing framework.
The best resources for learning clar are clar itself and the existing tests within libgit2. In general:
- 
If you place a .cfile into a test directory, it is eligible to contain test cases.
- 
The function name for your test is important; test function names begin with test_, followed by the folder path (underscore separated), two underscores as a delimiter, then the test name. For example, a filemerge/analysis.cmay contain a testuptodate:void test_merge_analysis__uptodate(void) { ... }
- 
You can run an individual test by passing -sto the test runner. Tests are referred to by their function names; for example, the functiontest_merge_analysis__uptodateis referred to asmerge::analysis::uptodate. To run only that function you can use the-soption on the test runner:libgit2_tests -smerge::analysis::uptodate
Memory leak checking
These are automatically run as part of CI, but if you want to check locally:
Linux
Uses valgrind:
$ cmake -DBUILD_TESTS=ON -DVALGRIND=ON ..
$ cmake --build .
$ valgrind --leak-check=full --show-reachable=yes --num-callers=50 --suppressions=../libgit2_tests.supp \
  ./libgit2_tests
macOS
Uses leaks, which requires XCode installed:
$ MallocStackLogging=1 MallocScribble=1 MallocLogFile=/dev/null CLAR_AT_EXIT="leaks -quiet \$PPID" \
  ./libgit2_tests
Windows
Build with the WIN32_LEAKCHECK option:
$ cmake -DBUILD_TESTS=ON -DWIN32_LEAKCHECK=ON ..
$ cmake --build .
$ ./libgit2_tests
