Add a test for `java_binary` runtime_deps transitivity

(ignore-relnotes)

PiperOrigin-RevId: 978538090
Change-Id: Idd8b5a602bceb84547ed3f80d22a432b0a701061
diff --git a/test/java/common/rules/common_launcher_java_binary_tests.bzl b/test/java/common/rules/common_launcher_java_binary_tests.bzl
index 877f3d4..2fbac4e 100644
--- a/test/java/common/rules/common_launcher_java_binary_tests.bzl
+++ b/test/java/common/rules/common_launcher_java_binary_tests.bzl
@@ -4,6 +4,7 @@
 load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
 load("@rules_cc//cc:cc_library.bzl", "cc_library")
 load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
+load("@rules_testing//lib:truth.bzl", "subjects")
 load("@rules_testing//lib:util.bzl", "util")
 load("//java:java_binary.bzl", "java_binary")
 load("//java:java_library.bzl", "java_library")
@@ -392,6 +393,86 @@
             "{bindir}/{package}/lib{test_name}/delta-hjar.jar",
         ]).in_order()
 
+def _test_java_binary_runtime_deps_transitivity(name):
+    util.helper_target(
+        java_library,
+        name = name + "/l0",
+        srcs = ["l0.java"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/l1",
+        srcs = ["l1.java"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/l2",
+        srcs = ["l2.java"],
+        runtime_deps = [name + "/l1"],
+        deps = [name + "/l0"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/l3",
+        srcs = ["l3.java"],
+        deps = [name + "/l2"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/l4",
+        srcs = ["l4.java"],
+        deps = [name + "/l1"],
+    )
+    util.helper_target(
+        java_binary,
+        name = name + "/b1",
+        srcs = ["b1.java"],
+        deps = [name + "/l2"],
+    )
+    util.helper_target(
+        java_binary,
+        name = name + "/b2",
+        srcs = ["b2.java"],
+        runtime_deps = [name + "/l3"],
+    )
+
+    analysis_test(
+        name = name,
+        attr_values = {"tags": ["min_bazel_8"]},  # the deploy jar was created by a separate rule in Bazel 7
+        impl = _test_java_binary_runtime_deps_transitivity_impl,
+        targets = {
+            "b1": name + "/b1",
+            "b2": name + "/b2",
+        },
+    )
+
+def _expect_that_deploy_jar_action_inputs(env, target, extension):
+    action = env.expect.that_target(target).action_generating("{package}/{name}_deploy.jar")
+    return subjects.collection(
+        action.actual.inputs.to_list(),
+        meta = action.meta,
+    ).transform(
+        desc = extension + " inputs",
+        filter = lambda f: f.extension == extension,
+        format = True,
+        map_each = lambda f: f.short_path,
+    )
+
+def _test_java_binary_runtime_deps_transitivity_impl(env, targets):
+    _expect_that_deploy_jar_action_inputs(env, targets.b1, "jar").contains_exactly([
+        "{package}/lib{test_name}/l0.jar",
+        "{package}/lib{test_name}/l1.jar",
+        "{package}/lib{test_name}/l2.jar",
+        "{package}/{test_name}/b1.jar",
+    ])
+    _expect_that_deploy_jar_action_inputs(env, targets.b2, "jar").contains_exactly([
+        "{package}/lib{test_name}/l0.jar",
+        "{package}/lib{test_name}/l1.jar",
+        "{package}/lib{test_name}/l2.jar",
+        "{package}/lib{test_name}/l3.jar",
+        "{package}/{test_name}/b2.jar",
+    ])
+
 def java_binary_launcher_tests(name):
     test_suite(
         name = name,
@@ -409,5 +490,6 @@
             _test_java_binary_inner_class,
             _test_java_test_inner_class,
             _test_java_binary_strict_java_deps_flag,
+            _test_java_binary_runtime_deps_transitivity,
         ],
     )