blob: 526735af71e099f9e954e3419c2bbe04686e087f [file] [log] [blame]
"""Test for py_library."""
load("@rules_testing//lib:analysis_test.bzl", "analysis_test")
load("@rules_testing//lib:truth.bzl", "matching")
load("@rules_testing//lib:util.bzl", rt_util = "util")
load("//python:defs.bzl", "PyRuntimeInfo", "py_library")
load("//tests/base_rules:base_tests.bzl", "create_base_tests")
load("//tests/base_rules:util.bzl", pt_util = "util")
_tests = []
def _test_py_runtime_info_not_present(name, config):
rt_util.helper_target(
config.rule,
name = name + "_subject",
srcs = ["lib.py"],
)
analysis_test(
name = name,
target = name + "_subject",
impl = _test_py_runtime_info_not_present_impl,
)
def _test_py_runtime_info_not_present_impl(env, target):
env.expect.that_bool(PyRuntimeInfo in target).equals(False)
_tests.append(_test_py_runtime_info_not_present)
def _test_files_to_build(name, config):
rt_util.helper_target(
config.rule,
name = name + "_subject",
srcs = ["lib.py"],
)
analysis_test(
name = name,
target = name + "_subject",
impl = _test_files_to_build_impl,
)
def _test_files_to_build_impl(env, target):
env.expect.that_target(target).default_outputs().contains_exactly([
"{package}/lib.py",
])
_tests.append(_test_files_to_build)
def _test_srcs_can_contain_rule_generating_py_and_nonpy_files(name, config):
rt_util.helper_target(
config.rule,
name = name + "_subject",
srcs = ["lib.py", name + "_gensrcs"],
)
rt_util.helper_target(
native.genrule,
name = name + "_gensrcs",
cmd = "touch $(OUTS)",
outs = [name + "_gen.py", name + "_gen.cc"],
)
analysis_test(
name = name,
target = name + "_subject",
impl = _test_srcs_can_contain_rule_generating_py_and_nonpy_files_impl,
)
def _test_srcs_can_contain_rule_generating_py_and_nonpy_files_impl(env, target):
env.expect.that_target(target).default_outputs().contains_exactly([
"{package}/{test_name}_gen.py",
"{package}/lib.py",
])
_tests.append(_test_srcs_can_contain_rule_generating_py_and_nonpy_files)
def _test_srcs_generating_no_py_files_is_error(name, config):
rt_util.helper_target(
config.rule,
name = name + "_subject",
srcs = [name + "_gen"],
)
rt_util.helper_target(
native.genrule,
name = name + "_gen",
cmd = "touch $(OUTS)",
outs = [name + "_gen.cc"],
)
analysis_test(
name = name,
target = name + "_subject",
impl = _test_srcs_generating_no_py_files_is_error_impl,
expect_failure = True,
)
def _test_srcs_generating_no_py_files_is_error_impl(env, target):
env.expect.that_target(target).failures().contains_predicate(
matching.str_matches("does not produce*srcs files"),
)
_tests.append(_test_srcs_generating_no_py_files_is_error)
def _test_files_to_compile(name, config):
rt_util.helper_target(
config.rule,
name = name + "_subject",
srcs = ["lib1.py"],
deps = [name + "_lib2"],
)
rt_util.helper_target(
config.rule,
name = name + "_lib2",
srcs = ["lib2.py"],
deps = [name + "_lib3"],
)
rt_util.helper_target(
config.rule,
name = name + "_lib3",
srcs = ["lib3.py"],
)
analysis_test(
name = name,
target = name + "_subject",
impl = _test_files_to_compile_impl,
)
def _test_files_to_compile_impl(env, target):
target = env.expect.that_target(target)
target.output_group(
"compilation_prerequisites_INTERNAL_",
).contains_exactly([
"{package}/lib1.py",
"{package}/lib2.py",
"{package}/lib3.py",
])
target.output_group(
"compilation_outputs",
).contains_exactly([
"{package}/lib1.py",
"{package}/lib2.py",
"{package}/lib3.py",
])
_tests.append(_test_files_to_compile)
def py_library_test_suite(name):
config = struct(rule = py_library, base_test_rule = py_library)
native.test_suite(
name = name,
tests = pt_util.create_tests(_tests, config = config) + create_base_tests(config),
)