Migrate the `JavaStarlarkApiTest.javaPlugin_exposesPluginsToStarlark` test to Starlark

The test is removed from Bazel and added in `@rules_java`

PiperOrigin-RevId: 738452711
Change-Id: I093918d6defca2419cfa6aa90b007b7a62569a92
diff --git a/java/test/common/rules/BUILD b/java/test/common/rules/BUILD
index 1045061..a97a3fb 100644
--- a/java/test/common/rules/BUILD
+++ b/java/test/common/rules/BUILD
@@ -1,6 +1,9 @@
 load(":java_binary_tests.bzl", "java_binary_tests")
+load(":java_plugin_tests.bzl", "java_plugin_tests")
 load(":merge_attrs_tests.bzl", "merge_attrs_test_suite")
 
 merge_attrs_test_suite(name = "merge_attrs_tests")
 
 java_binary_tests(name = "java_binary_tests")
+
+java_plugin_tests(name = "java_plugin_tests")
diff --git a/java/test/common/rules/java_plugin_tests.bzl b/java/test/common/rules/java_plugin_tests.bzl
new file mode 100644
index 0000000..af69e42
--- /dev/null
+++ b/java/test/common/rules/java_plugin_tests.bzl
@@ -0,0 +1,49 @@
+"""Tests for the java_plugin rule"""
+
+load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
+load("@rules_testing//lib:util.bzl", "util")
+load("//java:java_library.bzl", "java_library")
+load("//java:java_plugin.bzl", "java_plugin")
+load("//java/test/testutil:java_info_subject.bzl", "java_plugin_info_subject")
+
+def _test_exposes_plugins_to_starlark(name):
+    target_name = name + "/plugin"
+    util.helper_target(
+        java_library,
+        name = target_name + "/plugin_dep",
+        srcs = ["ProcessorDep.java"],
+        data = ["depfile.dat"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = target_name,
+        srcs = ["AnnotationProcessor.java"],
+        data = ["pluginfile.dat"],
+        processor_class = "com.google.process.stuff",
+        deps = [target_name + "/plugin_dep"],
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_exposes_plugins_to_starlark_impl,
+        target = target_name,
+    )
+
+def _test_exposes_plugins_to_starlark_impl(env, target):
+    assert_plugin_data = java_plugin_info_subject.from_target(env, target).plugins()
+    assert_plugin_data.processor_classes().contains_exactly(["com.google.process.stuff"])
+    assert_plugin_data.processor_jars().contains_exactly([
+        "{package}/lib{name}.jar",
+        "{package}/lib{name}/plugin_dep.jar",
+    ])
+    assert_plugin_data.processor_data().contains_exactly(["{package}/pluginfile.dat"])
+
+    java_plugin_info_subject.from_target(env, target).api_generating_plugins().is_empty()
+
+def java_plugin_tests(name):
+    test_suite(
+        name = name,
+        tests = [
+            _test_exposes_plugins_to_starlark,
+        ],
+    )
diff --git a/java/test/testutil/java_info_subject.bzl b/java/test/testutil/java_info_subject.bzl
index 3ab4124..5712a9a 100644
--- a/java/test/testutil/java_info_subject.bzl
+++ b/java/test/testutil/java_info_subject.bzl
@@ -12,7 +12,7 @@
     public = struct(
         compilation_args = lambda: _new_java_compilation_args_subject(self.actual, self.meta),
         compilation_info = lambda: _new_java_compilation_info_subject(self.actual, self.meta),
-        plugins = lambda: _new_java_info_plugins_subject(self.actual, self.meta),
+        plugins = lambda: _new_java_plugin_data_subject(self.actual.plugins, self.meta.derive("plugins")),
         is_binary = lambda: subjects.bool(getattr(java_info, "_is_binary", False), self.meta.derive("_is_binary")),
         has_attr = lambda a: subjects.bool(getattr(java_info, a, None) != None, meta = self.meta.derive("{} != None".format(a))).equals(True),
         cc_link_params_info = lambda: cc_info_subject.new_from_java_info(java_info, meta),
@@ -126,17 +126,24 @@
                 "actual: {}".format(this_attr),
             )
 
-def _new_java_info_plugins_subject(java_info, meta):
-    self = struct(
-        actual = java_info.plugins,
-        meta = meta.derive("plugins"),
-    )
+def _new_java_plugin_data_subject(java_plugin_data, meta):
     public = struct(
-        processor_jars = lambda: subjects.depset_file(self.actual.processor_jars, meta = self.meta.derive("processor_jars")),
-        processor_classes = lambda: subjects.collection(self.actual.processor_classes, meta = self.meta.derive("processor_classes")),
+        processor_jars = lambda: subjects.depset_file(java_plugin_data.processor_jars, meta = meta.derive("processor_jars")),
+        processor_classes = lambda: subjects.collection(java_plugin_data.processor_classes, meta = meta.derive("processor_classes")),
+        processor_data = lambda: subjects.depset_file(java_plugin_data.processor_data, meta = meta.derive("processor_data")),
+        is_empty = lambda: _check_plugin_data_empty(java_plugin_data, meta.derive("is_empty()")),
     )
     return public
 
+def _check_plugin_data_empty(plugin_data, meta):
+    for attr in ["processor_jars", "processor_classes", "processor_data"]:
+        value = getattr(plugin_data, attr)
+        if value:
+            meta.add_failure(
+                "expected: {} to be empty".format(attr),
+                "actual: {}".format(value),
+            )
+
 def _new_annotation_processing_subject(java_info, meta):
     actual = java_info.annotation_processing
     meta = meta.derive("annotation_processing")
@@ -160,7 +167,9 @@
 def _new_java_plugin_info_subject(java_plugin_info, meta):
     self = struct(actual = java_plugin_info, meta = meta.derive("JavaPluginInfo"))
     public = struct(
-        java_outputs = lambda: _new_java_outputs_collection_subject(self.actual.java_outputs, meta.derive("java_outputs")),
+        java_outputs = lambda: _new_java_outputs_collection_subject(self.actual.java_outputs, self.meta.derive("java_outputs")),
+        plugins = lambda: _new_java_plugin_data_subject(self.actual.plugins, self.meta.derive("plugins")),
+        api_generating_plugins = lambda: _new_java_plugin_data_subject(self.actual.api_generating_plugins, self.meta.derive("api_generating_plugins")),
     )
     return public