blob: 7f2ff76e5dc6914792217ef2f3742174025c62ea [file] [log] [blame]
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
load("@io_bazel_rules_go//tests:bazel_tests.bzl", "bazel_test")
bazel_test(
name = "coverage_test_test",
args = ["--instrumentation_filter=-coverage:b"],
check = """
if ! grep -q '^coverage: 50.0% of statements' "bazel-testlogs/$RULES_GO_OUTPUT/coverage_test/test.log"; then
echo "error: no coverage output found in test log file" >&2
exit 1
fi
data_file=bazel-testlogs/$RULES_GO_OUTPUT/coverage_test/coverage.dat
if [ ! -e "$data_file" ]; then
echo "error: $data_file: does not exist" >&2
exit 1
fi
if [ ! -s "$data_file" ]; then
echo "warning: $data_file: has size zero. Bazel may have trashed it with lcov." >&2
echo "skipping rest of test" >&2
exit 0
fi
function check_file_included {
if ! grep -q "$1" "$data_file"; then
echo "error: coverage data not found for $1" >&2
exit 1
fi
}
function check_file_excluded {
if grep -q "$1" "$data_file"; then
echo "error: coverage data found for $1, but it should be excluded" >&2
exit 1
fi
}
included_files=(
'github.com/bazelbuild/rules_go/tests/core/coverage/a/a.go:'
'github.com/bazelbuild/rules_go/tests/core/coverage/c/c.go:'
)
excluded_files=(
'github.com/bazelbuild/rules_go/tests/core/coverage/b/b.go:'
)
for i in "${included_files[@]}"; do
check_file_included "$i"
done
for i in "${excluded_files[@]}"; do
check_file_excluded "$i"
done
""",
command = "coverage",
targets = [":coverage_test"],
)
go_test(
name = "coverage_test",
srcs = ["coverage_test.go"],
embed = [":a"],
tags = ["manual"],
)
go_library(
name = "a",
srcs = ["a.go"],
importpath = "github.com/bazelbuild/rules_go/tests/core/coverage/a",
deps = [":b"],
)
go_library(
name = "b",
srcs = ["b.go"],
importpath = "github.com/bazelbuild/rules_go/tests/core/coverage/b",
deps = [":c"],
)
go_library(
name = "c",
srcs = ["c.go"],
importpath = "github.com/bazelbuild/rules_go/tests/core/coverage/c",
)
bazel_test(
name = "cross_cover_test_test",
args = [
"--collect_code_coverage",
"--instrumentation_filter=-coverage:b",
],
command = "build",
targets = [":cross_cover_test"],
)
go_test(
name = "cross_cover_test",
srcs = ["coverage_test.go"],
embed = [":a"],
goarch = "386",
goos = "linux",
pure = "on",
tags = ["manual"],
)