Migrate the `JavaImportConfiguredTargetTest.testModuleFlags` test to Starlark
The test is removed from Bazel and added to rules_java
(ignore-relnotes)
PiperOrigin-RevId: 756213013
Change-Id: Iaa80599a95b5fab90c107cc68f14b787fa55f3bc
diff --git a/MODULE.bazel b/MODULE.bazel
index c8994ee..400a4c2 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,7 +7,7 @@
bazel_dep(name = "platforms", version = "0.0.11")
bazel_dep(name = "rules_cc", version = "0.0.15")
-bazel_dep(name = "bazel_features", version = "1.11.0")
+bazel_dep(name = "bazel_features", version = "1.28.0")
bazel_dep(name = "bazel_skylib", version = "1.6.1")
bazel_dep(name = "protobuf", version = "27.0", repo_name = "com_google_protobuf")
bazel_dep(name = "zlib", version = "1.3.1.bcr.5")
diff --git a/WORKSPACE b/WORKSPACE
index cf3fa50..3cb2379 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -63,3 +63,14 @@
load("//test:repositories.bzl", "test_repositories")
test_repositories()
+
+http_archive(
+ name = "bazel_features",
+ sha256 = "2f057dd02098a106095ea291b4344257398a059eadb2c74cc470de0f9664dccd",
+ strip_prefix = "bazel_features-1.28.0",
+ url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.28.0/bazel_features-v1.28.0.tar.gz",
+)
+
+load("@bazel_features//:deps.bzl", "bazel_features_deps")
+
+bazel_features_deps()
diff --git a/test/java/common/rules/java_import_tests.bzl b/test/java/common/rules/java_import_tests.bzl
index 46b3983..fbf2151 100644
--- a/test/java/common/rules/java_import_tests.bzl
+++ b/test/java/common/rules/java_import_tests.bzl
@@ -1,11 +1,13 @@
"""Tests for the java_import rule"""
+load("@bazel_features//:features.bzl", "bazel_features")
load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
load("@rules_testing//lib:truth.bzl", "matching")
load("@rules_testing//lib:util.bzl", "util")
load("//java:java_import.bzl", "java_import")
load("//java:java_library.bzl", "java_library")
load("//java/common:java_info.bzl", "JavaInfo")
+load("//test/java/testutil:helper.bzl", "always_passes")
load("//test/java/testutil:java_info_subject.bzl", "java_info_subject")
load("//test/java/testutil:rules/forward_java_info.bzl", "java_info_forwarding_rule")
@@ -217,6 +219,56 @@
def _test_java_library_allows_import_in_deps_impl(_env, _target):
pass # no errors
+def _test_module_flags(name):
+ if not bazel_features.java.java_info_constructor_module_flags:
+ # exit early because this test case would be a loading phase error otherwise
+ always_passes(name)
+ return
+
+ util.helper_target(
+ java_library,
+ name = name + "/lib",
+ srcs = ["Main.java"],
+ deps = [name + "/import-jar"],
+ )
+ util.helper_target(
+ java_import,
+ name = name + "/import-jar",
+ jars = ["import.jar"],
+ exports = [name + "/exportjar"],
+ deps = [name + "/depjar"],
+ )
+ util.helper_target(
+ java_import,
+ name = name + "/depjar",
+ add_exports = ["java.base/java.lang"],
+ jars = ["depjar.jar"],
+ )
+ util.helper_target(
+ java_import,
+ name = name + "/exportjar",
+ add_opens = ["java.base/java.util"],
+ jars = ["exportjar.jar"],
+ )
+
+ analysis_test(
+ name = name,
+ impl = _test_module_flags_impl,
+ targets = {
+ "importjar": name + "/import-jar",
+ "lib": name + "/lib",
+ },
+ )
+
+def _test_module_flags_impl(env, targets):
+ assert_import_module_flags = java_info_subject.from_target(env, targets.importjar).module_flags()
+ assert_import_module_flags.add_exports().contains_exactly(["java.base/java.lang"])
+ assert_import_module_flags.add_opens().contains_exactly(["java.base/java.util"])
+
+ assert_lib_module_flags = java_info_subject.from_target(env, targets.lib).module_flags()
+ assert_lib_module_flags.add_exports().contains_exactly(["java.base/java.lang"])
+ assert_lib_module_flags.add_opens().contains_exactly(["java.base/java.util"])
+
def java_import_tests(name):
test_suite(
name = name,
@@ -227,5 +279,6 @@
_test_deps,
_test_commandline_contains_target_label,
_test_java_library_allows_import_in_deps,
+ _test_module_flags,
],
)
diff --git a/test/java/testutil/helper.bzl b/test/java/testutil/helper.bzl
new file mode 100644
index 0000000..eace0f8
--- /dev/null
+++ b/test/java/testutil/helper.bzl
@@ -0,0 +1,20 @@
+"""Misc helpers for rules_java testing"""
+
+load("@rules_testing//lib:analysis_test.bzl", "analysis_test")
+load("@rules_testing//lib:util.bzl", "util")
+
+def always_passes(name):
+ """Declares a fake, always passing test
+
+ Args:
+ name: (str) the name of the test
+ """
+ util.helper_target(
+ native.filegroup,
+ name = name + "/empty",
+ )
+ analysis_test(
+ name = name,
+ impl = lambda *a, **kw: None,
+ target = name + "/empty",
+ )
diff --git a/test/java/testutil/java_info_subject.bzl b/test/java/testutil/java_info_subject.bzl
index 972dc47..f263b04 100644
--- a/test/java/testutil/java_info_subject.bzl
+++ b/test/java/testutil/java_info_subject.bzl
@@ -26,6 +26,7 @@
transitive_source_jars = lambda: subjects.depset_file(java_info.transitive_source_jars, self.meta.derive("transitive_source_jars")),
transitive_source_jars_list = lambda: subjects.collection(java_info.transitive_source_jars.to_list(), self.meta.derive("transitive_source_jars.to_list()")),
runtime_output_jars = lambda: subjects.depset_file(java_info.runtime_output_jars, self.meta.derive("runtime_output_jars")),
+ module_flags = lambda: _new_java_module_flags_subject(self.actual, self.meta),
)
return public
@@ -37,6 +38,17 @@
},
))
+def _new_java_module_flags_subject(java_info, meta):
+ self = struct(
+ actual = java_info.module_flags_info,
+ meta = meta.derive("module_flags_info"),
+ )
+ public = struct(
+ add_exports = lambda: subjects.collection(self.actual.add_exports.to_list(), self.meta.derive("add_exports")),
+ add_opens = lambda: subjects.collection(self.actual.add_opens.to_list(), self.meta.derive("add_opens")),
+ )
+ return public
+
def _new_java_compilation_info_subject(java_info, meta):
self = struct(
actual = java_info.compilation_info,