Allow specifying additional aspects to tut (#299)

This commit is contained in:
Daniel Wagner-Hall 2021-09-23 21:21:58 +01:00 committed by GitHub
parent df3c9e2735
commit 08398cdc99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 58 additions and 2 deletions

View File

@ -151,7 +151,8 @@ def _make_analysis_test(
expect_failure = False,
attrs = {},
fragments = [],
config_settings = {}):
config_settings = {},
extra_target_under_test_aspects = []):
"""Creates an analysis test rule from its implementation function.
An analysis test verifies the behavior of a "real" rule target by examining
@ -189,6 +190,8 @@ def _make_analysis_test(
test and its dependencies. This may be used to essentially change 'build flags' for
the target under test, and may thus be utilized to test multiple targets with different
flags in a single build
extra_target_under_test_aspects: An optional list of aspects to apply to the target_under_test
in addition to those set up by default for the test harness itself.
Returns:
A rule definition that should be stored in a global whose name ends in
@ -209,7 +212,7 @@ def _make_analysis_test(
target_attr_kwargs["cfg"] = test_transition
attrs["target_under_test"] = attr.label(
aspects = [_action_retrieving_aspect],
aspects = [_action_retrieving_aspect] + extra_target_under_test_aspects,
mandatory = True,
**target_attr_kwargs
)

View File

@ -194,6 +194,50 @@ inspect_actions_test = analysistest.make(
_inspect_actions_test,
)
####################################
####### inspect_aspect_test #######
####################################
_AddedByAspectInfo = provider(
doc = "Example provider added by example aspect",
fields = {
"value": "(str)",
},
)
def _example_aspect_impl(target, ctx):
return [
_AddedByAspectInfo(value = "attached by aspect"),
]
example_aspect = aspect(
implementation = _example_aspect_impl,
)
def _inspect_aspect_test(ctx):
"""Test verifying aspect run on a target."""
env = analysistest.begin(ctx)
tut = env.ctx.attr.target_under_test
asserts.equals(env, "attached by aspect", tut[_AddedByAspectInfo].value)
return analysistest.end(env)
def _inspect_aspect_fake_rule(ctx):
out_file = ctx.actions.declare_file("out.txt")
ctx.actions.run_shell(
command = "echo 'hello' > %s" % out_file.basename,
outputs = [out_file],
)
return [DefaultInfo(files = depset([out_file]))]
inspect_aspect_fake_rule = rule(
implementation = _inspect_aspect_fake_rule,
)
inspect_aspect_test = analysistest.make(
_inspect_aspect_test,
extra_target_under_test_aspects = [example_aspect],
)
########################################
####### inspect_output_dirs_test #######
########################################
@ -293,6 +337,15 @@ def unittest_passing_tests_suite():
tags = ["manual"],
)
inspect_aspect_test(
name = "inspect_aspect_test",
target_under_test = ":inspect_aspect_fake_target",
)
inspect_aspect_fake_rule(
name = "inspect_aspect_fake_target",
tags = ["manual"],
)
inspect_output_dirs_test(
name = "inspect_output_dirs_test",
target_under_test = ":inspect_output_dirs_fake_target",