Add a test for `java_binary`'s use of the transitive validation output group

Regression test for https://github.com/bazelbuild/rules_java/issues/342

Fixes https://github.com/bazelbuild/rules_java/issues/342

PiperOrigin-RevId: 876195296
Change-Id: Iee5f646fde01dc9c604f3d62187a99f92ba1cadf
diff --git a/test/java/common/rules/java_binary_tests.bzl b/test/java/common/rules/java_binary_tests.bzl
index 9ddadbd..10728fb 100644
--- a/test/java/common/rules/java_binary_tests.bzl
+++ b/test/java/common/rules/java_binary_tests.bzl
@@ -1,5 +1,6 @@
 """Tests for the java_binary rule"""
 
+load("@bazel_features//:features.bzl", "bazel_features")
 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")
@@ -7,6 +8,7 @@
 load("@rules_testing//lib:util.bzl", "util")
 load("//java:java_binary.bzl", "java_binary")
 load("//java:java_library.bzl", "java_library")
+load("//test/java/testutil:helper.bzl", "always_passes")
 load("//test/java/testutil:java_info_subject.bzl", "java_info_subject")
 load("//test/java/testutil:rules/custom_java_info_rule.bzl", "custom_java_info_rule")
 load("//test/java/testutil:rules/forward_java_info.bzl", "java_info_forwarding_rule")
@@ -194,6 +196,59 @@
         "compilation_outputs",
     ).contains_exactly(["{package}/{name}.jar"])
 
+def _test_java_binary_can_set_transitive_validation(name):
+    if not bazel_features.rules.analysis_tests_can_transition_on_experimental_incompatible_flags:
+        # exit early because this test case would be a loading phase error otherwise
+        always_passes(name)
+        return
+
+    env_name = name + "_env"
+    util.helper_target(
+        java_library,
+        name = env_name + "_leaf",
+        srcs = ["A.java"],
+        neverlink = True,  # add runtime_classpath to validation output group
+    )
+    util.helper_target(
+        java_binary,
+        name = env_name,
+        srcs = ["Env.java"],
+        deps = [env_name + "_leaf"],
+        neverlink = True,  # add runtime_classpath to validation output group
+    )
+    util.helper_target(
+        java_binary,
+        name = name + "_bin",
+        srcs = ["Bin.java"],
+        data = [env_name],
+        deploy_env = [env_name],
+        create_executable = False,
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_java_binary_can_set_transitive_validation_impl,
+        targets = {
+            "bin": name + "_bin",
+            "env": env_name,
+        },
+        # Turn off other validations
+        config_settings = {
+            "//command_line_option:experimental_run_android_lint_on_java_rules": False,
+            "//command_line_option:experimental_one_version_enforcement": "OFF",
+        },
+    )
+
+def _test_java_binary_can_set_transitive_validation_impl(env, targets):
+    # ensure the env target has validation outputs
+    env.expect.that_target(targets.env).output_group("_validation").contains_at_least([
+        "{package}/{name}.jar",
+        "{package}/lib{name}_leaf.jar",
+    ])
+
+    # ensure they don't propagate to `bin` because they're a part of the `deploy_env`
+    env.expect.that_target(targets.bin).output_group("_validation").contains_exactly([])
+
 def java_binary_tests(name):
     test_suite(
         name = name,
@@ -203,5 +258,6 @@
             _test_java_binary_attributes,
             _test_java_binary_propagates_direct_native_libraries,
             _test_java_compile_only,
+            _test_java_binary_can_set_transitive_validation,
         ],
     )