blob: 4fbb7d437da16a952b09ad883ba4a389ba2e9587 [file] [log] [blame]
"""Unittest to verify re-exported symbols propagate to downstream crates"""
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load("//test/unit:common.bzl", "assert_argv_contains_prefix", "assert_argv_contains_prefix_suffix")
def _exports_test_impl(ctx, dependencies, externs):
env = analysistest.begin(ctx)
target = analysistest.target_under_test(env)
action = target.actions[0]
asserts.equals(env, action.mnemonic, "Rustc")
# Transitive symbols that get re-exported are expected to be located by a `-Ldependency` flag.
# The assert below ensures that each dependnecy flag is passed to the Rustc action. For details see
# https://doc.rust-lang.org/rustc/command-line-arguments.html#-l-add-a-directory-to-the-library-search-path
for dep in dependencies:
assert_argv_contains_prefix_suffix(
env = env,
action = action,
prefix = "-Ldependency",
suffix = dep,
)
for dep in externs:
assert_argv_contains_prefix(
env = env,
action = action,
prefix = "--extern={}=".format(dep),
)
return analysistest.end(env)
def _lib_exports_test_impl(ctx):
# This test is only expected to be used with
# `//test/unit/exports/lib_c`
return _exports_test_impl(
ctx = ctx,
dependencies = ["lib_a", "lib_b"],
externs = ["lib_b"],
)
def _test_exports_test_impl(ctx):
# This test is only expected to be used with
# `//test/unit/exports/lib_c:lib_c_test`
return _exports_test_impl(
ctx = ctx,
dependencies = ["lib_a", "lib_b"],
externs = ["lib_b"],
)
lib_exports_test = analysistest.make(_lib_exports_test_impl)
test_exports_test = analysistest.make(_test_exports_test_impl)
def exports_test_suite(name):
"""Entry-point macro called from the BUILD file.
Args:
name (str): Name of the macro.
"""
lib_exports_test(
name = "lib_exports_test",
target_under_test = "//test/unit/exports/lib_c",
)
test_exports_test(
name = "test_exports_test",
target_under_test = "//test/unit/exports/lib_c:lib_c_test",
)
native.test_suite(
name = name,
tests = [
":lib_exports_test",
":test_exports_test",
],
)