Improve the artifact closure API for tests (ignore-relnotes) PiperOrigin-RevId: 930378334 Change-Id: Ifb3689c9a388151707b164a46cc9d64bc1817380
diff --git a/MODULE.bazel b/MODULE.bazel index 38405ca..a088efe 100644 --- a/MODULE.bazel +++ b/MODULE.bazel
@@ -124,9 +124,9 @@ bazel_dep(name = "rules_testing", dev_dependency = True) archive_override( module_name = "rules_testing", - integrity = "sha256-WYc72jM8jNK3m45vjWlmN6NB+95f6HAHnTkRaSaNisE=", - strip_prefix = "rules_testing-04a1219ee516ccdf3ffadfe3b28e5c634c9b90e1", - urls = ["https://github.com/bazelbuild/rules_testing/archive/04a1219ee516ccdf3ffadfe3b28e5c634c9b90e1.tar.gz"], + integrity = "sha256-ZmrwZSmn3NkEj0MOnix9oSMzPXJWbuJbCCbOM1C03QQ=", + strip_prefix = "rules_testing-ff65fc8b7f1b7c37de71d781601ff40288de80f2", + urls = ["https://github.com/bazelbuild/rules_testing/archive/ff65fc8b7f1b7c37de71d781601ff40288de80f2.tar.gz"], ) test_repositories = use_extension("//test:repositories.bzl", "test_repositories_ext", dev_dependency = True)
diff --git a/test/java/common/java_common_tests.bzl b/test/java/common/java_common_tests.bzl index 756e3a4..0a3b257 100644 --- a/test/java/common/java_common_tests.bzl +++ b/test/java/common/java_common_tests.bzl
@@ -725,15 +725,10 @@ ) def _test_compile_neverlink_impl(env, target): - java_source_basenames = [ - f.basename - for f in artifact_closure.of_target(target) - if f.extension == "java" - ] - env.expect.that_collection(java_source_basenames).contains_exactly([ - "Plugin.java", - "Dependency.java", - "EclipseDependency.java", + artifact_closure.of_target(env, target, extensions = ["java"]).contains_exactly([ + "{package}/Plugin.java", + "{package}/Dependency.java", + "{package}/EclipseDependency.java", ]) jars_in_runfiles = [ f.basename
diff --git a/test/java/testutil/artifact_closure.bzl b/test/java/testutil/artifact_closure.bzl index 129b588..b7141f0 100644 --- a/test/java/testutil/artifact_closure.bzl +++ b/test/java/testutil/artifact_closure.bzl
@@ -1,8 +1,10 @@ """Helper for computing the artifact closure of a target""" +load("@rules_testing//lib:truth.bzl", "subjects") + # TODO: consider upstreaming this to @rules_testing -def _of_target(target): +def _compute(target): to_process = target[DefaultInfo].files.to_list() if _ArtifactActionMapInfo not in target: fail("Did you forget to add the aspect to analysis_test(extra_target_under_test_aspects = )?") @@ -49,6 +51,29 @@ _aspect = aspect(_aspect_impl, attr_aspects = ["*"]) +def _of_target(env, target, as_paths = True, extensions = None): + meta = env.expect.meta.derive(format_str_kwargs = { + "name": target.label.name, + "package": target.label.package, + }) + result = subjects.collection( + _compute(target), + meta = meta, + container_name = "artifact clousre of {}".format(target.label), + format = True, + ) + if extensions: + result = result.transform( + filter = lambda f: f.extension in extensions, + desc = "with extensions: {exts}".format(exts = extensions), + ) + if as_paths: + result = result.transform( + desc = "short_path", + map_each = lambda f: f.short_path, + ) + return result + artifact_closure = struct( aspect = _aspect, of_target = _of_target,