Add a test for deploy jars with custom singlejar

PiperOrigin-RevId: 878010346
Change-Id: I44216adca0c605f3bcadb5030f3524f144ca7d23
diff --git a/test/java/common/rules/BUILD b/test/java/common/rules/BUILD
index 2311a3f..cc2cd33 100644
--- a/test/java/common/rules/BUILD
+++ b/test/java/common/rules/BUILD
@@ -1,3 +1,4 @@
+load(":deploy_archive_builder_tests.bzl", "deploy_archive_builder_test_suite")
 load(":java_binary_tests.bzl", "java_binary_tests")
 load(":java_import_tests.bzl", "java_import_tests")
 load(":java_library_tests.bzl", "java_library_tests")
@@ -7,6 +8,8 @@
 
 package(default_applicable_licenses = ["@rules_java//:license"])
 
+deploy_archive_builder_test_suite(name = "deploy_archive_builder_tests")
+
 merge_attrs_test_suite(name = "merge_attrs_tests")
 
 java_binary_tests(name = "java_binary_tests")
diff --git a/test/java/common/rules/deploy_archive_builder_tests.bzl b/test/java/common/rules/deploy_archive_builder_tests.bzl
new file mode 100644
index 0000000..32e75e9
--- /dev/null
+++ b/test/java/common/rules/deploy_archive_builder_tests.bzl
@@ -0,0 +1,92 @@
+"""Tests for DeployArchiveBuilder."""
+
+load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
+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,
+    )
+
+def _test_custom_singlejar(name):
+    _declare_java_toolchain(name = name)
+
+    util.helper_target(
+        java_binary,
+        name = name + "/binary",
+        srcs = [name + "/main.java"],
+        main_class = "com.google.test.main",
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_custom_singlejar_impl,
+        target = name + "/binary",
+        config_settings = {
+            "//command_line_option:extra_toolchains": [Label(name + "/toolchain")],
+        },
+        # Starlark rules are only used with Bazel 8 onwards.
+        attr_values = {"tags": ["min_bazel_8"]},
+    )
+
+def _test_custom_singlejar_impl(env, target):
+    action = env.expect.that_target(target).action_named("JavaDeployJar")
+    action.inputs().contains_at_least_predicates(
+        [
+            matching.file_path_matches("*/test_custom_singlejar/binary.jar"),
+        ],
+    )
+
+def deploy_archive_builder_test_suite(name):
+    """Test suite for java_binary deploy archive."""
+    test_suite(
+        name = name,
+        tests = [
+            _test_custom_singlejar,
+        ],
+    )