blob: 623200182e90de0c4afd17d031015974ae617319 [file] [log] [blame]
"""Analysis tests for cargo_build_script."""
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load("//cargo:defs.bzl", "cargo_build_script")
load("//rust:defs.bzl", "rust_library")
DepActionsInfo = provider(
"Contains information about dependencies' actions.",
fields = {"actions": "List[Action]"},
)
def _collect_dep_actions_aspect_impl(target, ctx):
actions = []
actions.extend(target.actions)
for dep in ctx.rule.attr.deps:
actions.extend(dep[DepActionsInfo].actions)
return [DepActionsInfo(actions = actions)]
collect_dep_actions_aspect = aspect(
implementation = _collect_dep_actions_aspect_impl,
attr_aspects = ["deps"],
)
def _outputs_contain(outputs, substring):
for output in outputs.to_list():
if substring in output.path:
return True
return False
def _build_script_deps_test_impl(ctx):
env = analysistest.begin(ctx)
target = analysistest.target_under_test(env)
build_script_deps_action = [
action
for action in target[DepActionsInfo].actions
if _outputs_contain(action.outputs, "dep_of_a_build_script")
][0]
rlib_output = [
output
for output in build_script_deps_action.outputs.to_list()
if output.path.endswith(".rlib")
][0]
asserts.true(env, "-exec-" in rlib_output.path)
return analysistest.end(env)
build_script_deps_test = analysistest.make(
_build_script_deps_test_impl,
extra_target_under_test_aspects = [collect_dep_actions_aspect],
)
def build_script_test_suite(name):
"""Build script analyisis tests.
Args:
name: the test suite name
"""
rust_library(
name = "dep_of_a_build_script",
srcs = ["lib.rs"],
edition = "2021",
)
cargo_build_script(
name = "build_script_deps_in_exec_mode",
srcs = ["build.rs"],
deps = [":dep_of_a_build_script"],
edition = "2021",
)
build_script_deps_test(
name = "build_script_deps_in_exec_mode_test",
target_under_test = ":build_script_deps_in_exec_mode",
)
native.test_suite(
name = name,
tests = ["build_script_deps_in_exec_mode_test"],
)