Hash :
93037bab
Author :
Date :
2022-02-22T22:00:37
These are the unit and integration tests for the libgit2 projects.
benchmarks
These are benchmark tests that excercise the CLI. clar
headertest
libgit2
resources
util
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 .c
file 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 file
merge/analysis.c
may contain a test uptodate
:
void test_merge_analysis__uptodate(void)
{
...
}
You can run an individual test by passing -s
to the test runner. Tests
are referred to by their function names; for example, the function
test_merge_analysis__uptodate
is referred to as merge::analysis::uptodate
.
To run only that function you can use the -s
option on the test runner:
libgit2_tests -smerge::analysis::uptodate
These are automatically run as part of CI, but if you want to check locally:
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
Uses leaks
, which requires XCode installed:
$ MallocStackLogging=1 MallocScribble=1 MallocLogFile=/dev/null CLAR_AT_EXIT="leaks -quiet \$PPID" \
./libgit2_tests
Build with the WIN32_LEAKCHECK
option:
$ cmake -DBUILD_TESTS=ON -DWIN32_LEAKCHECK=ON ..
$ cmake --build .
$ ./libgit2_tests
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
# libgit2 tests
These are the unit and integration tests for the libgit2 projects.
* `benchmarks`
These are benchmark tests that excercise the CLI.
* `clar`
This is [clar](https://github.com/clar-test/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](http://github.com/clar-test/clar), a
C testing framework.
The best resources for learning clar are [clar itself](https://github.com/clar-test/clar)
and the existing tests within libgit2. In general:
* If you place a `.c` file 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 file
`merge/analysis.c` may contain a test `uptodate`:
```
void test_merge_analysis__uptodate(void)
{
...
}
```
* You can run an individual test by passing `-s` to the test runner. Tests
are referred to by their function names; for example, the function
`test_merge_analysis__uptodate` is referred to as `merge::analysis::uptodate`.
To run only that function you can use the `-s` option 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`](http://www.valgrind.org/):
```console
$ 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`](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html), which requires XCode installed:
```console
$ MallocStackLogging=1 MallocScribble=1 MallocLogFile=/dev/null CLAR_AT_EXIT="leaks -quiet \$PPID" \
./libgit2_tests
```
### Windows
Build with the `WIN32_LEAKCHECK` option:
```console
$ cmake -DBUILD_TESTS=ON -DWIN32_LEAKCHECK=ON ..
$ cmake --build .
$ ./libgit2_tests
```