blob: dad57b345883512b4cb153257f2e9b4310d056d8 [file] [log] [blame]
def coverage_java_test(name, data = [], jvm_flags = [], visibility = None, test_excluded_packages = {}, **kwargs):
jacoco_jvm_agent = "//prebuilts/tools/common/jacoco:agent"
jacoco_jvm_flag = "-javaagent:$(location " + jacoco_jvm_agent + ")=destfile=$$TEST_UNDECLARED_OUTPUTS_DIR/coverage/" + name + "_tests_jacoco.exec,inclnolocationclasses=true"
# the test needs to be visible to the results workspace it can use the deploy jar
if visibility == None:
visibility = ["@results//:__pkg__"]
elif "//visibility:public" not in visibility:
visibility += ["@results//:__pkg__"]
native.java_test(
name = name,
data = data + select({
"//tools/base/bazel:agent_coverage": [jacoco_jvm_agent],
"//conditions:default": [],
}),
jvm_flags = jvm_flags + select({
"//tools/base/bazel:agent_coverage": [jacoco_jvm_flag],
"//conditions:default": [],
}),
visibility = visibility,
**kwargs
)
def coverage_baseline(name, srcs, jar = None):
# some rules produce multiple jars under their base name so this lets us overload if necessary
if not jar:
jar = name
native.genrule(
name = name + "_coverage.baseline.srcs",
srcs = srcs,
outs = [name + ".coverage.baseline.srcs"],
tags = [
"coverage-sources",
"no_mac",
"no_windows",
],
cmd = "printf '$(RULEDIR)/%s\n' {} | sed -e 's%^$(BINDIR)/%%' >$@".format(" ".join(srcs)),
)
native.genrule(
name = name + "_coverage.baseline.srcs.filtered",
tools = ["@cov//:ignore_files_filter"],
srcs = [name + "_coverage.baseline.srcs"],
outs = [name + ".coverage.baseline.srcs.filtered"],
tags = [
"no_mac",
"no_windows",
],
cmd = "python $(location @cov//:ignore_files_filter) <$< >$@",
visibility = ["@baseline//:__pkg__"],
)
native.genrule(
name = name + "_coverage.baseline.xml",
tools = ["@//prebuilts/tools/common/jacoco:cli"],
srcs = [jar],
outs = [name + ".coverage.baseline.xml"],
tags = [
"no_mac",
"no_windows",
],
cmd = "$(location {cli}) report --quiet --classfiles $< --xml $@".format(
cli = "@//prebuilts/tools/common/jacoco:cli",
),
)
native.genrule(
name = name + "_coverage.baseline.lcov",
tools = ["@cov//:jacoco_xml_to_lcov"],
srcs = [
name + "_coverage.baseline.srcs.filtered",
name + "_coverage.baseline.xml",
],
outs = [name + ".coverage.baseline.lcov"],
tags = [
"no_mac",
"no_windows",
],
cmd = "python $(location {x2l}) {test} $(location {srcs}) <$(location {xml}) >$@".format(
x2l = "@cov//:jacoco_xml_to_lcov",
test = "baseline",
srcs = name + "_coverage.baseline.srcs.filtered",
xml = name + "_coverage.baseline.xml",
),
visibility = ["@baseline//:__pkg__"],
)
def coverage_java_library(name, srcs = [], **kwargs):
native.java_library(
name = name,
srcs = srcs,
**kwargs
)
coverage_baseline(
name = name,
srcs = srcs,
)