Improve the `javac_action_subject` API - Make `strict_java_deps` return a string subject - Make `direct_dependencies` return an empty list if the flag was unset - Make the `output` parameter optional while constructing the subject, default to looking up the action by mnemonic. - Add an optional `desc` parameter - helpful to distinguish between the same target built in different configurations. (ignore-relnotes) PiperOrigin-RevId: 967690792 Change-Id: I6f90a4a1b3a06022e8306a3f78984de51a4b97c9
diff --git a/test/java/common/rules/java_library_tests.bzl b/test/java/common/rules/java_library_tests.bzl index 4115b12..ec5500c 100644 --- a/test/java/common/rules/java_library_tests.bzl +++ b/test/java/common/rules/java_library_tests.bzl
@@ -337,7 +337,7 @@ # javac action's argv at all; the "OFF" value (which is equivalent to an unset flag) in that # case is injected by javac_action_subject for convenience and canonicalization. expect_that_javac_action = javac_action_subject.of(env, target, "{package}/lib{name}.jar") - expect_that_javac_action.strict_java_deps().contains_exactly([env.ctx.attr.expected_strict_java_deps]) + expect_that_javac_action.strict_java_deps().equals(env.ctx.attr.expected_strict_java_deps) def _test_strict_java_deps_off(name): _test_strict_java_deps(name, "OFF")
diff --git a/test/java/testutil/javac_action_subject.bzl b/test/java/testutil/javac_action_subject.bzl index a887d68..794f35a 100644 --- a/test/java/testutil/javac_action_subject.bzl +++ b/test/java/testutil/javac_action_subject.bzl
@@ -1,15 +1,19 @@ """Bespoke rules_testing subject for the Java compilation action""" -load("@rules_testing//lib:truth.bzl", "subjects", "truth") +load("@rules_testing//lib:truth.bzl", "subjects") load("@rules_testing//lib:util.bzl", "TestingAspectInfo") -def _new_javac_action_subject(env, target, output): - action_subject = env.expect.that_target(target).action_generating(output) +def _new_javac_action_subject(env, target, output = None, desc = ""): + target_subject = env.expect.that_target(target) + if output: + action_subject = target_subject.action_generating(output) + else: + action_subject = target_subject.action_named("Javac") self = struct( actual = action_subject.actual, parsed_flags = _parse_flags(action_subject.actual.argv), - meta = truth.expect(env).meta.derive( - "Javac", + meta = target_subject.meta.derive( + desc + ".Javac", format_str_kwargs = { "name": target.label.name, "package": target.label.package, @@ -19,12 +23,12 @@ ) public = struct( - direct_dependencies = lambda: _create_subject_for_flag("--direct_dependencies", self.parsed_flags, self.meta), + direct_dependencies = lambda: _create_subject_for_flag("--direct_dependencies", self.parsed_flags, self.meta, default = []), deps_artifacts = lambda: _create_subject_for_flag("--deps_artifacts", self.parsed_flags, self.meta), javacopts = lambda: _create_subject_for_flag("--javacopts", self.parsed_flags, self.meta), jar = lambda: _create_subject_for_flag("-jar", self.parsed_flags, self.meta), # An unset --strict_java_deps is equivalent to "OFF". - strict_java_deps = lambda: _create_subject_for_flag("--strict_java_deps", self.parsed_flags, self.meta, default = ["OFF"]), + strict_java_deps = lambda: _create_subject_for_flag("--strict_java_deps", self.parsed_flags, self.meta, default = ["OFF"]).offset(0, factory = subjects.str), sources = lambda: _create_subject_for_flag("--sources", self.parsed_flags, self.meta), resources = lambda: _create_subject_for_flag("--resources", self.parsed_flags, self.meta), classpath = lambda: _create_subject_for_flag("--classpath", self.parsed_flags, self.meta),