1
0
Fork 0

Added code coverage to tests with zig build test -Dtest-coverage

This commit is contained in:
Julien Dessaux 2022-02-20 23:05:50 +01:00
parent 629923b3c9
commit 0c80404e11
Signed by: adyxax
GPG key ID: F92E51B86E07177E
2 changed files with 22 additions and 0 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
kcov-output/
zig-cache
zig-out

View file

@ -22,6 +22,8 @@ pub fn build(b: *std.build.Builder) void {
run_cmd.addArgs(args);
}
const coverage = b.option(bool, "test-coverage", "Generate test coverage") orelse false;
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
@ -29,6 +31,25 @@ pub fn build(b: *std.build.Builder) void {
exe_tests.setTarget(target);
exe_tests.setBuildMode(mode);
// Code coverage with kcov, we need an allocator for the setup
var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = general_purpose_allocator.deinit();
const gpa = general_purpose_allocator.allocator();
// We want to exclude the $HOME/.zig path
const home = std.process.getEnvVarOwned(gpa, "HOME") catch "";
defer gpa.free(home);
const exclude = std.fmt.allocPrint(gpa, "--exclude-path={s}/.zig/", .{home}) catch "";
defer gpa.free(exclude);
if (coverage) {
exe_tests.setExecCmd(&[_]?[]const u8{
"kcov",
exclude,
//"--path-strip-level=3", // any kcov flags can be specified here
"kcov-output", // output dir for kcov
null, // to get zig to use the --test-cmd-bin flag
});
}
const test_step = b.step("test", "Run unit tests");
test_step.dependOn(&exe_tests.step);
}