# gcovr configuration for Cockatrice line coverage. # # Used by .ci/compile.sh --coverage and by hand: # # cmake -S . -B build/cover -DCMAKE_BUILD_TYPE=Debug -DWITH_SERVER=1 -DTEST=1 -DENABLE_COVERAGE=ON # cmake --build build/cover -j 24 # ctest --test-dir build/cover -LE bench -j 24 # gcovr build/cover --root . --object-directory build/cover --txt --decisions # # The point of most of this file is subtraction. A raw report is dominated by code no test can # reach: vendored third-party trees, build directories left over from earlier experiments, and # the client's main() and window classes, which have no headless test. Those all dilute the one # number worth watching, so they are filtered out here rather than in every invocation. # root is deliberately not set here. This file is normally invoked from the build directory # (compile.sh runs there, because it configures with `cmake ..`), so a `root` of `.` would # resolve to the build tree and every filter below would exclude everything. compile.sh passes # --root explicitly instead. # Our own code only. This keeps generated Qt MOC output, protobuf output and anything CMake # built under the source tree out of the report. filter = ^cockatrice/ filter = ^libcockatrice_[^/]+/ filter = ^servatrice/ filter = ^oracle/ # The tests are the vehicle, not the subject. They are compiled with the same instrumentation, # so leaving them in would add their near-perfect coverage to the numerator and quietly report a # healthier project than we have: test code is only ever executed by the run that is measuring # it. Helpers under tests/ are excluded on the same grounds. exclude = ^tests/ # Vendored third-party code is not ours to cover and is never going to move the number. exclude = ^vcpkg/ exclude = ^doc/doxygen/theme/ exclude = ^libcockatrice_rng/libcockatrice/rng/sfmt/ exclude = ^libcockatrice_utility/libcockatrice/utility/peglib\.h$ exclude = ^oracle/src/lzma/ exclude = ^oracle/src/qt-json/ exclude = ^oracle/src/zip/ exclude = ^servatrice/src/smtp/ # Qt's own moc/pch/uic output is generated into the build tree, not the source tree, so the # filters above already keep it out. These cover CLion's directories, which sit in-tree and are # picked up by the object-directory walk. exclude = .*cmake-build-.* exclude = .*\.cache/ # Process entry points and the client's window chrome. Each of these needs a display, an # interactive terminal, or a live database before it does anything a test could observe, so no # headless run will ever move them. Left in, they contribute thousands of lines at 0% and drag # the total down by a fixed amount that hides movement in the code we can actually test. The # window header is excluded with its .cpp because gcovr attributes its inline template code # there, which is where most of its line count lives. exclude = ^cockatrice/src/main\.cpp$ exclude = ^cockatrice/src/interface/window_main\. exclude = ^oracle/src/main\.cpp$ exclude = ^servatrice/src/main\.cpp$ exclude-throw-branches = yes exclude-function-lines = yes print-summary = yes