Deduplicate mock `java_toolchain` declarations Additionally: - Minimize the definitions and explicitly set the arguments asserted on in the test cases - Where possible, switch from asserting on the java_toolchain target explicitly and use the resolved toolchain via `java_toolchain_alias` (ignore-relnotes) PiperOrigin-RevId: 889084161 Change-Id: Ia89dac8f5ed9ed81f5366e3df3cb6d75aa4a310b
diff --git a/test/java/common/rules/deploy_archive_builder_tests.bzl b/test/java/common/rules/deploy_archive_builder_tests.bzl index 32e75e9..727790f 100644 --- a/test/java/common/rules/deploy_archive_builder_tests.bzl +++ b/test/java/common/rules/deploy_archive_builder_tests.bzl
@@ -4,58 +4,13 @@ load("@rules_testing//lib:truth.bzl", "matching") load("@rules_testing//lib:util.bzl", "util") load("//java:java_binary.bzl", "java_binary") -load("//java/common:java_semantics.bzl", "semantics") -load("//java/toolchains:java_runtime.bzl", "java_runtime") -load("//java/toolchains:java_toolchain.bzl", "java_toolchain") - -def _declare_java_toolchain(*, name, **kwargs): - java_runtime_name = name + "/runtime" - util.helper_target( - 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 + "/java_toolchain", - **toolchain_attrs - ) - util.helper_target( - native.toolchain, - name = name + "/toolchain", - toolchain = name + "/java_toolchain", - toolchain_type = semantics.JAVA_TOOLCHAIN_TYPE, - ) +load("//test/java/testutil:mock_java_toolchain.bzl", "mock_java_toolchain") def _test_custom_singlejar(name): - _declare_java_toolchain(name = name) - + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + ) util.helper_target( java_binary, name = name + "/binary",
diff --git a/test/java/testutil/mock_java_toolchain.bzl b/test/java/testutil/mock_java_toolchain.bzl new file mode 100644 index 0000000..c0ca631 --- /dev/null +++ b/test/java/testutil/mock_java_toolchain.bzl
@@ -0,0 +1,62 @@ +"""Fake java toolchains for testing""" + +load("//java/common:java_semantics.bzl", "semantics") +load("//java/toolchains:java_runtime.bzl", _java_runtime_rule = "java_runtime") +load("//java/toolchains:java_toolchain.bzl", "java_toolchain") + +# buildifier: disable=function-docstring +def mock_java_toolchain( + *, + name, + singlejar = "singlejar", + javabuilder = "JavaBuilder_deploy.jar", + header_compiler = "turbine_canary_deploy.jar", + header_compiler_direct = "turbine_direct", + ijar = "ijar", + genclass = "genclass", + java_runtime = None, + tags = None, # for util.helper_target + **kwargs): + if not java_runtime: + java_runtime = name + "_runtime" + _java_runtime_rule(name = java_runtime) + java_toolchain( + name = name + "_java", + javabuilder = javabuilder, + singlejar = singlejar, + header_compiler = header_compiler, + header_compiler_direct = header_compiler_direct, + ijar = ijar, + java_runtime = java_runtime, + genclass = genclass, + tags = tags, + **kwargs + ) + native.toolchain( + name = name, + toolchain = name + "_java", + toolchain_type = semantics.JAVA_TOOLCHAIN_TYPE, + tags = tags, + ) + +# buildifier: disable=function-docstring +def mock_java_runtime_toolchain( + *, + name, + srcs = [], + java_home = None, + java = None, + **kwargs): + _java_runtime_rule( + name = name + "_runtime", + srcs = srcs, + java_home = java_home, + java = java, + **kwargs + ) + native.toolchain( + name = name, + toolchain = name + "_runtime", + toolchain_type = semantics.JAVA_RUNTIME_TOOLCHAIN_TYPE, + **kwargs + )
diff --git a/test/java/toolchains/java_runtime_tests.bzl b/test/java/toolchains/java_runtime_tests.bzl index 0112b17..94d067e 100644 --- a/test/java/toolchains/java_runtime_tests.bzl +++ b/test/java/toolchains/java_runtime_tests.bzl
@@ -4,16 +4,16 @@ load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite") load("@rules_testing//lib:truth.bzl", "matching", "subjects") load("@rules_testing//lib:util.bzl", "util") -load("//java/common:java_semantics.bzl", "semantics") load("//java/toolchains:java_runtime.bzl", "java_runtime") load("//test/java/testutil:java_runtime_info_subject.bzl", "java_runtime_info_subject") +load("//test/java/testutil:mock_java_toolchain.bzl", "mock_java_runtime_toolchain") load("//test/java/testutil:rules/forward_java_runtime_info.bzl", "java_runtime_info_forwarding_rule") load("//toolchains:java_toolchain_alias.bzl", "java_runtime_alias") def _test_with_absolute_java_home(name): util.helper_target( - java_runtime, - name = name + "/jvm", + mock_java_runtime_toolchain, + name = name + "/java_runtime_toolchain", srcs = [], java_home = "/foo/bar", ) @@ -26,12 +26,6 @@ name = name + "/r", java_runtime = name + "/alias", ) - util.helper_target( - native.toolchain, - name = name + "/java_runtime_toolchain", - toolchain = name + "/jvm", - toolchain_type = semantics.JAVA_RUNTIME_TOOLCHAIN_TYPE, - ) analysis_test( name = name, @@ -52,8 +46,8 @@ def _test_with_hermetic_java_home(name): util.helper_target( - java_runtime, - name = name + "/jvm", + mock_java_runtime_toolchain, + name = name + "/java_runtime_toolchain", srcs = [], java_home = "foo/bar", ) @@ -66,12 +60,6 @@ name = name + "/r", java_runtime = name + "/alias", ) - util.helper_target( - native.toolchain, - name = name + "/java_runtime_toolchain", - toolchain = name + "/jvm", - toolchain_type = semantics.JAVA_RUNTIME_TOOLCHAIN_TYPE, - ) analysis_test( name = name, @@ -99,8 +87,8 @@ output_to_bindir = True, ) util.helper_target( - java_runtime, - name = name + "/jvm", + mock_java_runtime_toolchain, + name = name + "/java_runtime_toolchain", srcs = [], java = "foo/bar/bin/java", ) @@ -113,12 +101,6 @@ name = name + "/r", java_runtime = name + "/alias", ) - util.helper_target( - native.toolchain, - name = name + "/java_runtime_toolchain", - toolchain = name + "/jvm", - toolchain_type = semantics.JAVA_RUNTIME_TOOLCHAIN_TYPE, - ) analysis_test( name = name,
diff --git a/test/java/toolchains/java_toolchain_tests.bzl b/test/java/toolchains/java_toolchain_tests.bzl index 372b999..793de8e 100644 --- a/test/java/toolchains/java_toolchain_tests.bzl +++ b/test/java/toolchains/java_toolchain_tests.bzl
@@ -7,58 +7,24 @@ load("//java:java_library.bzl", "java_library") load("//java:java_plugin.bzl", "java_plugin") load("//java/common:java_common.bzl", "java_common") -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_info_subject.bzl", "java_info_subject") load("//test/java/testutil:java_toolchain_info_subject.bzl", "java_toolchain_info_subject") load("//test/java/testutil:javac_action_subject.bzl", "javac_action_subject") +load("//test/java/testutil:mock_java_toolchain.bzl", "mock_java_toolchain") load("//toolchains:java_toolchain_alias.bzl", "java_toolchain_alias") -def _declare_java_toolchain(*, name, **kwargs): - 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 + "/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( + mock_java_toolchain, + name = name + "/toolchain", + javabuilder = name + "/JavaBuilder_deploy.jar", + header_compiler_direct = name + "/turbine_direct", + bootclasspath = [name + "/rt.jar"], + source_version = "6", + target_version = "6", + xlint = ["toto"], + javacopts = ["-Xmaxerrs 500"], + ) util.helper_target( java_library, name = name + "/b", @@ -95,24 +61,31 @@ "-Xmaxerrs", "500", ]) - assert_javac_action.jar().contains_exactly(["{package}/JavaBuilder_deploy.jar"]) - assert_javac_action.inputs().contains("{package}/rt.jar") + assert_javac_action.jar().contains_exactly(["{package}/{test_name}/JavaBuilder_deploy.jar"]) + assert_javac_action.inputs().contains("{package}/{test_name}/rt.jar") 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") + assert_header_action.argv().contains("{package}/{test_name}/turbine_direct") def _test_jacocorunner(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", jacocorunner = "myjacocorunner.jar", ) - + util.helper_target( + java_toolchain_alias, + name = name + "/alias", + ) analysis_test( name = name, impl = _test_jacocorunner_impl, - target = name + "/java_toolchain", + target = name + "/alias", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, ) def _test_jacocorunner_impl(env, target): @@ -121,7 +94,10 @@ assert_toolchain.jacocorunner().short_path_equals("{package}/myjacocorunner.jar") def _test_singlejar_get_command_line(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + ) util.helper_target( java_binary, name = name + "/a", @@ -144,7 +120,11 @@ assert_javac_action.executable_file_name().equals(target.label.package + "/singlejar") def _test_genclass_get_command_line(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + genclass = name + "/GenClass_deploy.jar", + ) util.helper_target( java_library, name = name + "/a", @@ -164,15 +144,26 @@ def _test_genclass_get_command_line_impl(env, target): assert_javac_action = javac_action_subject.of(env, target, "{package}/lib{name}-gen.jar") - assert_javac_action.jar().contains_exactly(["{package}/GenClass_deploy.jar"]) + assert_javac_action.jar().contains_exactly(["{package}/{test_name}/GenClass_deploy.jar"]) def _test_timezone_data_is_correct(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + timezone_data = "tzdata.jar", + ) + util.helper_target( + java_toolchain_alias, + name = name + "/alias", + ) analysis_test( name = name, impl = _test_timezone_data_is_correct_impl, - target = name + "/java_toolchain", + target = name + "/alias", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, ) def _test_timezone_data_is_correct_impl(env, target): @@ -181,7 +172,11 @@ ) def _test_java_binary_uses_timezone_data(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + timezone_data = name + "/tzdata.jar", + ) util.helper_target( java_binary, name = name + "/a", @@ -199,11 +194,14 @@ def _test_java_binary_uses_timezone_data_impl(env, target): assert_action = javac_action_subject.of(env, target, "{package}/{name}.jar") - assert_action.sources().contains("{package}/tzdata.jar") + assert_action.sources().contains("{package}/{test_name}/tzdata.jar") assert_action.inputs().contains_predicate(matching.file_basename_equals("tzdata.jar")) def _test_ijar_get_command_line(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + ) util.helper_target( java_library, name = name + "/a", @@ -227,8 +225,9 @@ ) def _test_no_header_compiler_header_compilation_enabled_fails(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", header_compiler = None, ) util.helper_target( @@ -255,8 +254,9 @@ ) def _test_no_header_compiler_direct_header_compilation_enabled_fails(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", header_compiler_direct = None, ) util.helper_target( @@ -283,8 +283,9 @@ ) def _test_no_header_compiler_header_compilation_disabled_analyzes_successfully(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", header_compiler = None, ) util.helper_target( @@ -311,41 +312,60 @@ def _test_header_compiler_builtin_processors(name): util.helper_target( - java_toolchain, - name = name + "/java_toolchain", + mock_java_toolchain, + name = name + "/toolchain", header_compiler_builtin_processors = ["BuiltinProc1", "BuiltinProc2"], - singlejar = "singlejar", + ) + util.helper_target( + java_toolchain_alias, + name = name + "/alias", ) analysis_test( name = name, impl = _test_header_compiler_builtin_processors_impl, - target = name + "/java_toolchain", + target = name + "/alias", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, ) def _test_header_compiler_builtin_processors_impl(env, target): - java_toolchain_info_subject.from_target(env, target).header_compiler_builtin_processors().contains_exactly(["BuiltinProc1", "BuiltinProc2"]) + java_toolchain_info_subject.from_target(env, target).header_compiler_builtin_processors().contains_exactly([ + "BuiltinProc1", + "BuiltinProc2", + ]) def _test_reduced_classpath_incompatible_processors(name): util.helper_target( - java_toolchain, - name = name + "/java_toolchain", + mock_java_toolchain, + name = name + "/toolchain", reduced_classpath_incompatible_processors = ["IncompatibleProc1", "IncompatibleProc2"], - singlejar = "singlejar", + ) + util.helper_target( + java_toolchain_alias, + name = name + "/alias", ) analysis_test( name = name, impl = _test_reduced_classpath_incompatible_processors_impl, - target = name + "/java_toolchain", + target = name + "/alias", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, ) def _test_reduced_classpath_incompatible_processors_impl(env, target): - java_toolchain_info_subject.from_target(env, target).reduced_classpath_incompatible_processors().contains_exactly(["IncompatibleProc1", "IncompatibleProc2"]) + java_toolchain_info_subject.from_target(env, target).reduced_classpath_incompatible_processors().contains_exactly([ + "IncompatibleProc1", + "IncompatibleProc2", + ]) def _test_location_expansion_in_jvm_opts(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", tools = [name + "/jsr305.jar", name + "/javac"], jvm_opts = [ "--patch-module=jdk.compiler=$(location " + name + "/javac)", @@ -381,8 +401,9 @@ name = name + "/fg", srcs = ["one", "two"], ) - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", tools = [name + "/fg"], javabuilder_jvm_opts = ["$(location " + name + "/fg)"], ) @@ -390,7 +411,7 @@ analysis_test( name = name, impl = _test_location_expansion_with_multiple_artifacts_fails_impl, - target = name + "/java_toolchain", + target = name + "/toolchain_java", # the underlying java_toolchain expect_failure = True, ) @@ -405,15 +426,16 @@ name = name + "/fg", srcs = ["one", "two"], ) - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", timezone_data = name + "/fg", ) analysis_test( name = name, impl = _test_timezone_data_with_multiple_artifacts_fails_impl, - target = name + "/java_toolchain", + target = name + "/toolchain_java", # the underlying java_toolchain expect_failure = True, ) @@ -423,8 +445,12 @@ ) def _test_java_compile_action_target_gets_javacopts_from_toolchain(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + source_version = "6", + target_version = "6", + xlint = ["toto"], javacopts = ["-XDtoolchainJavacFlag"], ) util.helper_target( @@ -456,8 +482,12 @@ ]) def _test_java_compile_action_exec_gets_javacopts_from_toolchain(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + source_version = "6", + target_version = "6", + xlint = ["toto"], javacopts = ["-XDtoolchainJavacFlag"], ) util.helper_target( @@ -495,8 +525,9 @@ ]) def _test_java_compile_action_uses_tool_specific_jvm_opts(name): - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", jvm_opts = ["-Xbase"], javabuilder_jvm_opts = ["-DjavabuilderFlag=1"], turbine_jvm_opts = ["-DturbineFlag=1"], @@ -540,19 +571,27 @@ name = name + "/fg2", srcs = ["c", "d"], ) - _declare_java_toolchain( - name = name, + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", javabuilder_data = [name + "/fg1", name + "/fg2"], javabuilder_jvm_opts = [ "$(locations " + name + "/fg1)", "$(locations " + name + "/fg2)", ], ) + util.helper_target( + java_toolchain_alias, + name = name + "/alias", + ) analysis_test( name = name, impl = _test_javabuilder_location_expansion_with_multiple_artifacts_impl, - target = name + "/java_toolchain", + target = name + "/alias", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, ) def _test_javabuilder_location_expansion_with_multiple_artifacts_impl(env, target): @@ -621,7 +660,10 @@ ) def _test_java_toolchain_flag_set(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + ) util.helper_target( java_toolchain_alias, name = name + "/toolchain_alias", @@ -632,7 +674,7 @@ impl = _test_java_toolchain_flag_set_impl, targets = { "alias": name + "/toolchain_alias", - "toolchain": name + "/java_toolchain", + "toolchain": name + "/toolchain_java", # the underlying java_toolchain }, config_settings = { "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], @@ -644,13 +686,27 @@ assert_toolchain.label().equals(targets.toolchain.label) def _test_default_javac_opts_depset(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + source_version = "6", + target_version = "6", + xlint = ["toto"], + javacopts = ["-Xmaxerrs 500"], + ) + util.helper_target( + java_toolchain_alias, + name = name + "/alias", + ) analysis_test( name = name, impl = _test_default_javac_opts_depset_impl, - target = name + "/java_toolchain", + target = name + "/alias", attr_values = {"tags": ["min_bazel_8"]}, + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, ) def _test_default_javac_opts_depset_impl(env, target): @@ -659,12 +715,24 @@ ) def _test_default_javac_opts(name): - _declare_java_toolchain(name = name) + util.helper_target( + mock_java_toolchain, + name = name + "/toolchain", + source_version = "6", + target_version = "6", + ) + util.helper_target( + java_toolchain_alias, + name = name + "/alias", + ) analysis_test( name = name, impl = _test_default_javac_opts_impl, - target = name + "/java_toolchain", + target = name + "/alias", + config_settings = { + "//command_line_option:extra_toolchains": [Label(name + "/toolchain")], + }, attr_values = {"tags": ["min_bazel_8"]}, )