Skip to content

Commit

Permalink
remove exception branches from coverage
Browse files Browse the repository at this point in the history
Disable exceptions to reduce "hidden branches" analyzed by gcov. These
branches are not a realistic indicator of coverage as this library does
not explicitly allocate memory, throw exceptions, or catch exceptions.

Change-Id: I6df51846f4e3da70cc2d53b6e4e6e2b9be36a2f7
  • Loading branch information
oliverlee committed Dec 24, 2023
1 parent 330f346 commit d3496ec
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 10 deletions.
3 changes: 0 additions & 3 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,4 @@ build:verbose-clang-tidy --@bazel_clang_tidy//:clang_tidy_executable=//tools:ver
build:clang-tidy --config=clang-tidy-base
build:clang-tidy --@bazel_clang_tidy//:clang_tidy_executable=@llvm_toolchain//:clang-tidy

# Clang will fail for tests that replace malloc and has worse coverage results than GCC
coverage --extra_toolchains=//toolchain:gcc

try-import %workspace%/user.bazelrc
8 changes: 8 additions & 0 deletions .github/codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ coverage:
status:
project:
default:
<<<<<<< HEAD
# basic
target: auto
threshold: 0%
Expand All @@ -16,3 +17,10 @@ coverage:
if_ci_failed: error #success, failure, error, ignore
informational: false
only_pulls: false
=======
target: 100%
threshold: 1%
patch:
default:
target: 100%
>>>>>>> 3024fee... remove exception branches from coverage
2 changes: 0 additions & 2 deletions rules/lcov.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ def lcov(
"--combined_report=lcov",
"--experimental_generate_llvm_lcov",
"--test_output=errors",
# https://github.com/bazelbuild/bazel/issues/13919
"--test_env=COVERAGE_GCOV_OPTIONS=-b",
],
lcov_tool = "lcov",
lcov_opts = []):
Expand Down
4 changes: 3 additions & 1 deletion test/expect_message_test.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "skytest/skytest.hpp"

#include <exception>

auto main() -> int
{
using namespace ::skytest::literals;
Expand All @@ -19,7 +21,7 @@ auto main() -> int

"not invoked on success"_test = [] {
return expect(true, [](auto&) {
throw std::runtime_error{"should not be invoked"};
std::terminate();
});
};
}
28 changes: 24 additions & 4 deletions tools/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -110,27 +110,47 @@ incompatible_with_sanitizers(
deps = ["//tools:maybe_incompatible_clang"],
)

lcov_attrs = {
"instrumented_targets": ["//:skytest"],
"test_targets": ["//test/..."],
"coverage_opts": [
"--combined_report=lcov",
"--experimental_generate_llvm_lcov",
"--test_output=errors",
"--extra_toolchains=//toolchain:gcc",
# https://github.com/bazelbuild/bazel/issues/13919
# https://github.com/bazelbuild/bazel/blob/master/tools/test/collect_cc_coverage.sh
"--test_env=COVERAGE_GCOV_OPTIONS=-b",
# https://gcovr.com/en/stable/faq.html#why-does-c-code-have-so-many-uncovered-branches
# https://stackoverflow.com/questions/42003783/lcov-gcov-branch-coverage-with-c-producing-branches-all-over-the-place
"--cxxopt=-fno-exceptions",
],
}

lcov(
name = "lcov_list",
instrumented_targets = ["//:skytest"],
coverage_opts = lcov_attrs["coverage_opts"],
instrumented_targets = lcov_attrs["instrumented_targets"],
lcov_opts = [
"--rc lcov_branch_coverage=1",
"--list",
],
test_targets = ["//test/..."],
test_targets = lcov_attrs["test_targets"],
)

lcov(
name = "lcov_html",
instrumented_targets = ["//:skytest"],
coverage_opts = lcov_attrs["coverage_opts"],
instrumented_targets = lcov_attrs["instrumented_targets"],
lcov_opts = [
"--show-details",
"--keep-descriptions",
"--branch-coverage",
"--highlight",
"--demangle-cpp",
"--missed",
"--dark-mode",
],
lcov_tool = "genhtml",
test_targets = ["//test/..."],
test_targets = lcov_attrs["test_targets"],
)

0 comments on commit d3496ec

Please sign in to comment.