Migrate JavaPluginConfiguredTargetTest to Starlark.

This deletes and does not replace TestNoConstraintsAttribute, because it checks for a loading phase error.

PiperOrigin-RevId: 874134416
Change-Id: I8e18dc44c391fd7ec4832adf4576778af5bb333a
diff --git a/test/java/common/rules/java_plugin_tests.bzl b/test/java/common/rules/java_plugin_tests.bzl
index 646de64..71c2d15 100644
--- a/test/java/common/rules/java_plugin_tests.bzl
+++ b/test/java/common/rules/java_plugin_tests.bzl
@@ -1,10 +1,12 @@
 """Tests for the java_plugin rule"""
 
 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_library.bzl", "java_library")
 load("//java:java_plugin.bzl", "java_plugin")
 load("//java/common:java_plugin_info.bzl", "JavaPluginInfo")
+load("//java/common:proguard_spec_info.bzl", "ProguardSpecInfo")
 load("//test/java/testutil:java_info_subject.bzl", "java_plugin_info_subject")
 
 def _test_exposes_plugins_to_starlark(name):
@@ -75,11 +77,313 @@
     assert_api_plugin_data.processor_data().contains_exactly(["{package}/pluginfile.dat"])
     assert_api_plugin_data.equals(target[JavaPluginInfo].plugins)
 
+def _test_not_empty_processor_class(name):
+    util.helper_target(
+        java_library,
+        name = name + "/deps",
+        srcs = ["Deps.java"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = name + "/processor",
+        srcs = ["Processor.java"],
+        processor_class = "com.google.test.Processor",
+        deps = [name + "/deps"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_not_empty_processor_class_impl,
+        target = name + "/processor",
+    )
+
+def _test_not_empty_processor_class_impl(env, target):
+    plugin_info = java_plugin_info_subject.from_target(env, target)
+    plugin_info.plugins().processor_classes().contains_exactly(["com.google.test.Processor"])
+
+    plugin_info.plugins().processor_jars().contains_exactly([
+        "{package}/lib{name}.jar",
+        "{package}/lib{test_name}/deps.jar",
+    ])
+
+def _test_empty_processor_class(name):
+    util.helper_target(
+        java_library,
+        name = name + "/deps",
+        srcs = ["Deps.java"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = name + "/bugchecker",
+        srcs = ["BugChecker.java"],
+        deps = [":" + name + "/deps"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_empty_processor_class_impl,
+        target = name + "/bugchecker",
+    )
+
+def _test_empty_processor_class_impl(env, target):
+    plugin_info = java_plugin_info_subject.from_target(env, target)
+    plugin_info.plugins().processor_classes().contains_exactly([])
+    plugin_info.plugins().processor_jars().contains_exactly([
+        "{package}/lib{name}.jar",
+        "{package}/lib{test_name}/deps.jar",
+    ])
+
+def _test_empty_processor_class_target(name):
+    util.helper_target(
+        java_library,
+        name = name + "/deps",
+        srcs = ["Deps.java"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = name + "/bugchecker",
+        srcs = ["BugChecker.java"],
+        deps = [":" + name + "/deps"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/empty",
+        plugins = [":" + name + "/bugchecker"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_empty_processor_class_target_impl,
+        target = name + "/empty",
+    )
+
+def _test_empty_processor_class_target_impl(env, target):
+    env.expect.that_target(target).action_generating("{package}/lib{name}.jar").inputs().contains_at_least([
+        "{package}/lib{test_name}/bugchecker.jar",
+        "{package}/lib{test_name}/deps.jar",
+    ])
+
+def _new_proguard_info_subject(info, meta):
+    return struct(
+        specs = lambda: subjects.depset_file(info.specs, meta.derive("specs")),
+    )
+
+def _test_java_plugin_exports_transitive_proguard_specs(name):
+    util.helper_target(
+        java_plugin,
+        name = name + "/plugin",
+        srcs = ["Plugin.java"],
+        proguard_specs = ["plugin.pro"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/dep",
+        srcs = ["Dep.java"],
+        proguard_specs = ["dep.pro"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = name + "/top",
+        srcs = ["Top.java"],
+        plugins = [":" + name + "/plugin"],
+        proguard_specs = ["top.pro"],
+        deps = [":" + name + "/dep"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_java_plugin_exports_transitive_proguard_specs_impl,
+        target = name + "/top",
+        # Before Bazel 8, native rules use the native ProguardSpecProvider
+        attr_values = {"tags": ["min_bazel_8"]},
+        provider_subject_factories = [struct(
+            type = ProguardSpecInfo,
+            name = "ProguardInfo",
+            factory = _new_proguard_info_subject,
+        )],
+    )
+
+def _test_java_plugin_exports_transitive_proguard_specs_impl(env, target):
+    env.expect.that_target(target).provider(ProguardSpecInfo).specs().contains_exactly(
+        [
+            "{package}/validated_proguard/{test_name}/top/{package}/top.pro_valid",
+            "{package}/validated_proguard/{test_name}/dep/{package}/dep.pro_valid",
+        ],
+    )
+
+def _test_java_plugin_validates_proguard_specs(name):
+    util.helper_target(
+        java_plugin,
+        name = name + "/plugin",
+        srcs = ["Plugin.java"],
+        proguard_specs = ["plugin.pro"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_java_plugin_validates_proguard_specs_impl,
+        target = name + "/plugin",
+    )
+
+def _test_java_plugin_validates_proguard_specs_impl(env, target):
+    output_file = None
+    for f in target.output_groups["_hidden_top_level_INTERNAL_"].to_list():
+        if f.basename == "plugin.pro_valid":
+            output_file = f
+            break
+    env.expect.that_target(target).action_generating(
+        output_file.short_path,
+    ).inputs().contains_at_least(
+        ["{package}/plugin.pro"],
+    )
+
+def _test_java_plugin_validates_transitive_proguard_specs(name):
+    util.helper_target(
+        java_library,
+        name = name + "/transitive",
+        srcs = ["Transitive.java"],
+        proguard_specs = ["transitive.pro"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = name + "/plugin",
+        srcs = ["Plugin.java"],
+        deps = [":" + name + "/transitive"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_java_plugin_validates_transitive_proguard_specs_impl,
+        targets = {
+            "transitive": name + "/transitive",
+            "plugin": name + "/plugin",
+        },
+    )
+
+def _test_java_plugin_validates_transitive_proguard_specs_impl(env, targets):
+    output_file = None
+    for f in targets.plugin.output_groups["_hidden_top_level_INTERNAL_"].to_list():
+        if f.basename == "transitive.pro_valid":
+            output_file = f
+            break
+
+    env.expect.that_target(targets.transitive).action_generating(
+        output_file.short_path,
+    ).inputs().contains_at_least(["{package}/transitive.pro"])
+
+def _test_generates_api(name):
+    util.helper_target(
+        java_plugin,
+        name = name + "/api_generating",
+        srcs = ["ApiGeneratingPlugin.java"],
+        generates_api = True,
+        processor_class = "ApiGeneratingPlugin",
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_generates_api_impl,
+        target = name + "/api_generating",
+    )
+
+def _test_generates_api_impl(env, target):
+    plugin_info = java_plugin_info_subject.from_target(env, target)
+    plugin_info.plugins().processor_classes().contains_exactly(["ApiGeneratingPlugin"])
+    plugin_info.api_generating_plugins().processor_classes().contains_exactly(["ApiGeneratingPlugin"])
+    plugin_info.plugins().processor_jars().contains_exactly([
+        "{package}/lib{name}.jar",
+    ])
+    plugin_info.api_generating_plugins().processor_jars().contains_exactly([
+        "{package}/lib{name}.jar",
+    ])
+
+def _test_generates_implementation(name):
+    util.helper_target(
+        java_plugin,
+        name = name + "/impl_generating",
+        srcs = ["ImplGeneratingPlugin.java"],
+        generates_api = False,
+        processor_class = "ImplGeneratingPlugin",
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_generates_implementation_impl,
+        target = name + "/impl_generating",
+    )
+
+def _test_generates_implementation_impl(env, target):
+    plugin_info = java_plugin_info_subject.from_target(env, target)
+    plugin_info.plugins().processor_classes().contains_exactly(["ImplGeneratingPlugin"])
+    plugin_info.api_generating_plugins().processor_classes().contains_exactly([])
+    plugin_info.plugins().processor_jars().contains_exactly([
+        "{package}/lib{test_name}/impl_generating.jar",
+    ])
+    plugin_info.api_generating_plugins().processor_jars().contains_exactly([])
+
+def _test_plugin_data_in_provider(name):
+    util.helper_target(
+        java_plugin,
+        name = name + "/impl_generating",
+        srcs = ["ImplGeneratingPlugin.java"],
+        data = ["data.txt"],
+        generates_api = False,
+        processor_class = "ImplGeneratingPlugin",
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_plugin_data_in_provider_impl,
+        target = name + "/impl_generating",
+    )
+
+def _test_plugin_data_in_provider_impl(env, target):
+    plugin_info = java_plugin_info_subject.from_target(env, target)
+    plugin_info.plugins().processor_data().contains_exactly([
+        "{package}/data.txt",
+    ])
+
+def _test_plugin_data_in_action_inputs(name):
+    util.helper_target(
+        java_plugin,
+        name = name + "/impl_generating_lib",
+        srcs = ["ImplGeneratingPlugin.java"],
+        data = ["data.txt"],
+        generates_api = False,
+        processor_class = "ImplGeneratingPlugin",
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/lib",
+        plugins = [":" + name + "/impl_generating_lib"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_plugin_data_in_action_inputs_impl,
+        target = name + "/lib",
+    )
+
+def _test_plugin_data_in_action_inputs_impl(env, target):
+    env.expect.that_target(target).action_generating("{package}/lib{name}.jar").inputs().contains_at_least([
+        "{package}/data.txt",
+    ])
+
 def java_plugin_tests(name):
     test_suite(
         name = name,
         tests = [
             _test_exposes_plugins_to_starlark,
             _test_exposes_api_generating_plugins_to_starlark,
+            _test_not_empty_processor_class,
+            _test_empty_processor_class,
+            _test_empty_processor_class_target,
+            _test_generates_api,
+            _test_plugin_data_in_provider,
+            _test_plugin_data_in_action_inputs,
+            _test_java_plugin_exports_transitive_proguard_specs,
+            _test_java_plugin_validates_proguard_specs,
+            _test_java_plugin_validates_transitive_proguard_specs,
+            _test_generates_implementation,
         ],
     )