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