Starlarkify JavaToolchainTest.javac_getsOptionsFromToolchain() PiperOrigin-RevId: 874081635 Change-Id: Ie56e4c40878e781e130a229b60bf2e7bdf0386c3
diff --git a/test/java/testutil/javac_action_subject.bzl b/test/java/testutil/javac_action_subject.bzl index 0a14c77..ef23812 100644 --- a/test/java/testutil/javac_action_subject.bzl +++ b/test/java/testutil/javac_action_subject.bzl
@@ -4,10 +4,10 @@ load("@rules_testing//lib:util.bzl", "TestingAspectInfo") def _new_javac_action_subject(env, target, output): - action = env.expect.that_target(target).action_generating(output).actual + action_subject = env.expect.that_target(target).action_generating(output) self = struct( - actual = action, - parsed_flags = _parse_flags(action.argv), + actual = action_subject.actual, + parsed_flags = _parse_flags(action_subject.actual.argv), meta = truth.expect(env).meta.derive( "Javac", format_str_kwargs = { @@ -17,8 +17,15 @@ }, ), ) + public = struct( - direct_dependencies = lambda: subjects.collection(self.parsed_flags["--direct_dependencies"], self.meta.derive("--direct_dependencies"), format = True), + direct_dependencies = lambda: _create_subject_for_flag("--direct_dependencies", self.parsed_flags, self.meta), + source = lambda: _create_subject_for_flag("-source", self.parsed_flags, self.meta), + target = lambda: _create_subject_for_flag("-target", self.parsed_flags, self.meta), + xmaxerrs = lambda: _create_subject_for_flag("-Xmaxerrs", self.parsed_flags, self.meta), + jar = lambda: _create_subject_for_flag("-jar", self.parsed_flags, self.meta), + inputs = action_subject.inputs, + argv = action_subject.argv, ) return public @@ -43,6 +50,10 @@ return flag_values +def _create_subject_for_flag(flag_name, parsed_flags, meta): + """Helper to create a collection subject for a given flag.""" + return subjects.collection(parsed_flags[flag_name], meta.derive(flag_name), format = True) + javac_action_subject = struct( of = _new_javac_action_subject, parse_flags = _parse_flags, # exposed for testing this method itself
diff --git a/test/java/toolchains/java_toolchain_tests.bzl b/test/java/toolchains/java_toolchain_tests.bzl index 928ce00..976bb08 100644 --- a/test/java/toolchains/java_toolchain_tests.bzl +++ b/test/java/toolchains/java_toolchain_tests.bzl
@@ -2,28 +2,100 @@ load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite") load("@rules_testing//lib:util.bzl", "util") +load("//java:java_library.bzl", "java_library") +load("//java/common:java_semantics.bzl", "semantics") load("//java/toolchains:java_runtime.bzl", "java_runtime") load("//java/toolchains:java_toolchain.bzl", "java_toolchain") load("//test/java/testutil:java_toolchain_info_subject.bzl", "java_toolchain_info_subject") +load("//test/java/testutil:javac_action_subject.bzl", "javac_action_subject") def _declare_java_toolchain(*, name, **kwargs): - if "java_runtime" not in kwargs: - kwargs["java_runtime"] = name + "/runtime" - java_runtime(name = name + "/runtime") + java_runtime_name = name + "/runtime" + java_runtime(name = java_runtime_name) + toolchain_attrs = { + "source_version": "6", + "target_version": "6", + "bootclasspath": ["rt.jar"], + "xlint": ["toto"], + "javacopts": ["-Xmaxerrs 500"], + "compatible_javacopts": { + "android": ["-XDandroidCompatible"], + "testonly": ["-XDtestOnly"], + "public_visibility": ["-XDpublicVisibility"], + }, + "tools": [":javac_canary.jar"], + "javabuilder": ":JavaBuilder_deploy.jar", + "header_compiler": ":turbine_canary_deploy.jar", + "header_compiler_direct": ":turbine_direct", + "singlejar": "singlejar", + "ijar": "ijar", + "genclass": "GenClass_deploy.jar", + "timezone_data": "tzdata.jar", + "header_compiler_builtin_processors": ["BuiltinProc1", "BuiltinProc2"], + "reduced_classpath_incompatible_processors": [ + "IncompatibleProc1", + "IncompatibleProc2", + ], + "java_runtime": java_runtime_name, + } + toolchain_attrs.update(kwargs) util.helper_target( java_toolchain, - name = name, - genclass = kwargs.get("genclass", "default_genclass.jar"), - jacocorunner = kwargs.get("jacocorunner", None), - javabuilder = kwargs.get("javabuilder", "default_javabuilder.jar"), - java_runtime = kwargs["java_runtime"], - ijar = kwargs.get("ijar", "default_ijar.jar"), - singlejar = kwargs.get("singlejar", "default_singlejar.jar"), + name = name + "/java_toolchain", + **toolchain_attrs ) + util.helper_target( + native.toolchain, + name = name + "/toolchain", + toolchain = name + "/java_toolchain", + toolchain_type = semantics.JAVA_TOOLCHAIN_TYPE, + ) + +def _test_javac_gets_options(name): + _declare_java_toolchain(name = name) + util.helper_target( + java_library, + name = name + "/b", + srcs = ["b.java"], + ) + util.helper_target( + java_library, + name = name + "/a", + srcs = ["a.java"], + deps = [Label(name + "/b")], + ) + + analysis_test( + name = name, + impl = _test_javac_gets_options_impl, + targets = { + "a": name + "/a", + "b": name + "/b", + }, + config_settings = { + "//command_line_option:java_header_compilation": "true", + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, + ) + +def _test_javac_gets_options_impl(env, targets): + assert_javac_action = javac_action_subject.of(env, targets.a, "{package}/lib{name}.jar") + assert_javac_action.source().contains_exactly(["6"]) + assert_javac_action.target().contains_exactly(["6"]) + assert_javac_action.xmaxerrs().contains_exactly(["500"]) + assert_javac_action.jar().contains_exactly(["{package}/JavaBuilder_deploy.jar"]) + assert_javac_action.inputs().contains("{package}/rt.jar") + + assert_argv = assert_javac_action.argv() + assert_argv.contains("-Xlint:toto") + assert_argv.not_contains("-g") + + assert_header_action = javac_action_subject.of(env, targets.b, "{package}/lib{name}-hjar.jar") + assert_header_action.argv().contains("{package}/turbine_direct") def _test_jacocorunner(name): _declare_java_toolchain( - name = name + "/java_toolchain", + name = name, jacocorunner = "myjacocorunner.jar", ) @@ -43,5 +115,6 @@ name = name, tests = [ _test_jacocorunner, + _test_javac_gets_options, ], )