Migrate JavaToolchainTest cases to Starlark analysis tests. PiperOrigin-RevId: 877933571 Change-Id: I271712beef84d4d0b1e5b1b2646f5d375b5ae7b7
diff --git a/MODULE.bazel b/MODULE.bazel index de8fe11..204b8e8 100644 --- a/MODULE.bazel +++ b/MODULE.bazel
@@ -131,9 +131,9 @@ bazel_dep(name = "rules_testing", dev_dependency = True) archive_override( module_name = "rules_testing", - integrity = "sha256-TqwTCQnzt/hRKQtdJ7d8ebtZ8+I8IMgmWiEjOKvo6mI=", - strip_prefix = "rules_testing-f8e869d452507fa4a59748c9d69cfab63ec9385a", - urls = ["https://github.com/bazelbuild/rules_testing/archive/f8e869d452507fa4a59748c9d69cfab63ec9385a.tar.gz"], + integrity = "sha256-d/94Ix5IoGXk9rP1HjYKxPMH8ccwX5b1Qxs8BKg4WRg=", + strip_prefix = "rules_testing-ac97ba507116056cd489161b5e99dd8014685adc", + urls = ["https://github.com/bazelbuild/rules_testing/archive/ac97ba507116056cd489161b5e99dd8014685adc.tar.gz"], ) test_repositories = use_extension("//test:repositories.bzl", "test_repositories_ext", dev_dependency = True)
diff --git a/test/java/testutil/javac_action_subject.bzl b/test/java/testutil/javac_action_subject.bzl index 28d1916..ed6e9fa 100644 --- a/test/java/testutil/javac_action_subject.bzl +++ b/test/java/testutil/javac_action_subject.bzl
@@ -20,9 +20,7 @@ public = struct( 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), + javacopts = lambda: _create_subject_for_flag("--javacopts", self.parsed_flags, self.meta), jar = lambda: _create_subject_for_flag("-jar", self.parsed_flags, self.meta), sources = lambda: _create_subject_for_flag("--sources", self.parsed_flags, self.meta), executable_file_name = lambda: subjects.str(action_subject.actual.argv[0], self.meta), @@ -37,7 +35,12 @@ for idx, arg in enumerate(argv): if idx == 0: continue # java command - if arg.startswith("-"): + + if current_flag_name == "--javacopts" and arg == "--": + current_flag_name = None + continue + + if arg.startswith("-") and current_flag_name != "--javacopts": if "=" in arg: parts = arg.split("=", 1) flag_values.setdefault(parts[0], []).append(parts[1])
diff --git a/test/java/testutil/javac_action_subject_tests.bzl b/test/java/testutil/javac_action_subject_tests.bzl index eba3f76..c1e577b 100644 --- a/test/java/testutil/javac_action_subject_tests.bzl +++ b/test/java/testutil/javac_action_subject_tests.bzl
@@ -18,6 +18,7 @@ "JavaBuilder_deploy.jar", "--output", "blaze-out/k8/bin/pkg/libfoo.jar", + "--javacopts", "-source", "21", "-target", @@ -49,13 +50,18 @@ ], "-jar": ["JavaBuilder_deploy.jar"], "--output": ["blaze-out/k8/bin/pkg/libfoo.jar"], - "-source": ["21"], - "-target": ["17"], - "-g": [], - "-parameters": [], - "-sourcepath": [":"], - "-Xmaxerrs": ["123"], - "--": [], + "--javacopts": [ + "-source", + "21", + "-target", + "17", + "-g", + "-parameters", + "-sourcepath", + ":", + "-Xmaxerrs", + "123", + ], "--strict_java_deps": ["ERROR"], "--classpath": ["pkg/bar-hjar.jar", "other/pkg/baz.jar"], }, flags)
diff --git a/test/java/toolchains/java_toolchain_tests.bzl b/test/java/toolchains/java_toolchain_tests.bzl index 3019a66..f685fdd 100644 --- a/test/java/toolchains/java_toolchain_tests.bzl +++ b/test/java/toolchains/java_toolchain_tests.bzl
@@ -1,10 +1,11 @@ """Tests for the java_toolchain rule""" load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite") -load("@rules_testing//lib:truth.bzl", "matching") +load("@rules_testing//lib:truth.bzl", "matching", "subjects") load("@rules_testing//lib:util.bzl", "util") load("//java:java_binary.bzl", "java_binary") load("//java:java_library.bzl", "java_library") +load("//java:java_plugin.bzl", "java_plugin") load("//java/common:java_semantics.bzl", "semantics") load("//java/toolchains:java_runtime.bzl", "java_runtime") load("//java/toolchains:java_toolchain.bzl", "java_toolchain") @@ -83,15 +84,19 @@ 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.javacopts().contains_at_least([ + "-source", + "6", + "-target", + "6", + "-Xlint:toto", + "-Xmaxerrs", + "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_javac_action.javacopts().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") @@ -415,6 +420,113 @@ matching.contains("must produce a single file"), ) +def _test_java_compile_action_target_gets_javacopts_from_toolchain(name): + _declare_java_toolchain( + name = name, + javacopts = ["-XDtoolchainJavacFlag"], + ) + util.helper_target( + java_library, + name = name + "/lib", + srcs = ["a.java"], + ) + analysis_test( + name = name, + impl = _test_java_compile_action_target_gets_javacopts_from_toolchain_impl, + target = name + "/lib", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + "//command_line_option:javacopt": ["-XDcommandLineJavacFlag"], + "//command_line_option:host_javacopt": ["-XDhostCommandLineJavacFlag"], + }, + ) + +def _test_java_compile_action_target_gets_javacopts_from_toolchain_impl(env, target): + assert_javacopts = javac_action_subject.of(env, target, "{package}/lib{name}.jar").javacopts() + assert_javacopts.contains_exactly([ + "-source", + "6", + "-target", + "6", + "-Xlint:toto", + "-XDtoolchainJavacFlag", + "-XDcommandLineJavacFlag", + ]) + +def _test_java_compile_action_exec_gets_javacopts_from_toolchain(name): + _declare_java_toolchain( + name = name, + javacopts = ["-XDtoolchainJavacFlag"], + ) + util.helper_target( + java_library, + name = name + "/lib", + srcs = ["a.java"], + ) + util.helper_target( + util.force_exec_config, + name = name + "/exec_lib", + tools = [name + "/lib"], + ) + analysis_test( + name = name, + impl = _test_java_compile_action_exec_gets_javacopts_from_toolchain_impl, + target = name + "/exec_lib", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + "//command_line_option:javacopt": ["-XDcommandLineJavacFlag"], + "//command_line_option:host_javacopt": ["-XDhostCommandLineJavacFlag"], + }, + ) + +def _test_java_compile_action_exec_gets_javacopts_from_toolchain_impl(env, target): + lib = env.expect.that_target(target).attr("tools", factory = subjects.collection).actual[0] + assert_javacopts = javac_action_subject.of(env, lib, "{package}/lib{name}.jar").javacopts() + assert_javacopts.contains_exactly([ + "-source", + "6", + "-target", + "6", + "-Xlint:toto", + "-XDtoolchainJavacFlag", + "-XDhostCommandLineJavacFlag", + ]) + +def _test_java_compile_action_uses_tool_specific_jvm_opts(name): + _declare_java_toolchain( + name = name, + jvm_opts = ["-Xbase"], + javabuilder_jvm_opts = ["-DjavabuilderFlag=1"], + turbine_jvm_opts = ["-DturbineFlag=1"], + ) + util.helper_target( + java_plugin, + name = name + "/plugin", + processor_class = "Proc", + generates_api = True, + ) + util.helper_target( + java_library, + name = name + "/lib", + srcs = ["a.java"], + plugins = [name + "/plugin"], + ) + analysis_test( + name = name, + impl = _test_java_compile_action_uses_tool_specific_jvm_opts_impl, + target = name + "/lib", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, + ) + +def _test_java_compile_action_uses_tool_specific_jvm_opts_impl(env, target): + javac_action = javac_action_subject.of(env, target, "{package}/lib{name}.jar") + javac_action.argv().contains("-DjavabuilderFlag=1") + + header_action = env.expect.that_target(target).action_generating("{package}/lib{name}-hjar.jar") + header_action.argv().contains("-DturbineFlag=1") + def java_toolchain_tests(name): test_suite( name = name, @@ -434,5 +546,8 @@ _test_location_expansion_in_jvm_opts, _test_location_expansion_with_multiple_artifacts_fails, _test_timezone_data_with_multiple_artifacts_fails, + _test_java_compile_action_target_gets_javacopts_from_toolchain, + _test_java_compile_action_exec_gets_javacopts_from_toolchain, + _test_java_compile_action_uses_tool_specific_jvm_opts, ], )