Migrate the `JavaStarlarkApiTest.testJavaRuntimeProviderJavaHermetic` test to Starlark

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

PiperOrigin-RevId: 738375246
Change-Id: Ic87608b17b98e5b4d6d6cecd833584cd3e7d2452
diff --git a/java/test/testutil/java_runtime_info_subject.bzl b/java/test/testutil/java_runtime_info_subject.bzl
index fedb5e7..79ab2fc 100644
--- a/java/test/testutil/java_runtime_info_subject.bzl
+++ b/java/test/testutil/java_runtime_info_subject.bzl
@@ -9,13 +9,28 @@
         meta = meta.derive("JavaRuntimeInfo"),
     )
     public = struct(
-        java_home = lambda: subjects.str(self.actual.java_home, self.meta.derive("java_home")),
-        java_home_runfiles_path = lambda: subjects.str(self.actual.java_home_runfiles_path, self.meta.derive("java_home_runfiles_path")),
-        java_executable_exec_path = lambda: subjects.str(self.actual.java_executable_exec_path, self.meta.derive("java_executable_exec_path")),
-        java_executable_runfiles_path = lambda: subjects.str(self.actual.java_executable_runfiles_path, self.meta.derive("java_executable_runfiles_path")),
+        java_home = lambda: _new_path_string_subject(self.actual.java_home, self.meta.derive("java_home")),
+        java_home_runfiles_path = lambda: _new_path_string_subject(self.actual.java_home_runfiles_path, self.meta.derive("java_home_runfiles_path")),
+        java_executable_exec_path = lambda: _new_path_string_subject(self.actual.java_executable_exec_path, self.meta.derive("java_executable_exec_path")),
+        java_executable_runfiles_path = lambda: _new_path_string_subject(self.actual.java_executable_runfiles_path, self.meta.derive("java_executable_runfiles_path")),
     )
     return public
 
+def _new_path_string_subject(str, meta):
+    public = struct(
+        equals = lambda other: subjects.str(str, meta).equals(meta.format_str(other)),
+        is_in = lambda expected: subjects.str(str, meta).is_in([meta.format_str(e) for e in expected]),
+        starts_with = lambda prefix: _check_str_prefix(str, prefix, meta),
+    )
+    return public
+
+def _check_str_prefix(actual, prefix, meta):
+    if not actual.startswith(meta.format_str(prefix)):
+        meta.add_failure(
+            "did not start with required prefix: {}".format(prefix),
+            "actual: {}".format(actual),
+        )
+
 def _from_target(env, target):
     return _new_java_runtime_info_subject(
         target[java_common.JavaRuntimeInfo],
diff --git a/java/test/toolchains/java_runtime_tests.bzl b/java/test/toolchains/java_runtime_tests.bzl
index 31cbab3..2dfcbbd 100644
--- a/java/test/toolchains/java_runtime_tests.bzl
+++ b/java/test/toolchains/java_runtime_tests.bzl
@@ -47,19 +47,56 @@
 
     assert_info.java_home().equals("/foo/bar")
     assert_info.java_home_runfiles_path().equals("/foo/bar")
-    assert_info.java_executable_exec_path().is_in([
-        "/foo/bar/bin/java",
-        "/foo/bar/bin/java.exe",
-    ])
-    assert_info.java_executable_runfiles_path().is_in([
-        "/foo/bar/bin/java",
-        "/foo/bar/bin/java.exe",
-    ])
+    assert_info.java_executable_exec_path().starts_with("/foo/bar/bin/java")
+    assert_info.java_executable_runfiles_path().starts_with("/foo/bar/bin/java")
+
+def _test_with_hermetic_java_home(name):
+    util.helper_target(
+        java_runtime,
+        name = name + "/jvm",
+        srcs = [],
+        java_home = "foo/bar",
+    )
+    util.helper_target(
+        java_runtime_alias,
+        name = name + "/alias",
+    )
+    util.helper_target(
+        java_runtime_info_forwarding_rule,
+        name = name + "/r",
+        java_runtime = name + "/alias",
+    )
+    util.helper_target(
+        native.toolchain,
+        name = name + "/java_runtime_toolchain",
+        toolchain = name + "/jvm",
+        toolchain_type = semantics.JAVA_RUNTIME_TOOLCHAIN_TYPE,
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_with_hermetic_java_home_impl,
+        target = name + "/r",
+        config_settings = {
+            "//command_line_option:extra_toolchains": [Label(name + "/java_runtime_toolchain")],
+        },
+        # Bazel 6 doesn't accept Label's for the transition above
+        attr_values = {"tags": ["min_bazel_7"]},
+    )
+
+def _test_with_hermetic_java_home_impl(env, target):
+    assert_info = java_runtime_info_subject.from_target(env, target)
+
+    assert_info.java_home().equals("{package}/foo/bar")
+    assert_info.java_home_runfiles_path().equals("{package}/foo/bar")
+    assert_info.java_executable_exec_path().starts_with("{package}/foo/bar/bin/java")
+    assert_info.java_executable_runfiles_path().starts_with("{package}/foo/bar/bin/java")
 
 def java_runtime_tests(name):
     test_suite(
         name = name,
         tests = [
             _test_with_absolute_java_home,
+            _test_with_hermetic_java_home,
         ],
     )