| """Custom @rules_testing subject for the JavaRuntimeInfo provider""" |
| |
| load("@rules_testing//lib:truth.bzl", "subjects", "truth") |
| load("@rules_testing//lib:util.bzl", "TestingAspectInfo") |
| load("//java/common:java_common.bzl", "java_common") |
| |
| def _new_java_runtime_info_subject(java_runtime_info, meta): |
| self = struct( |
| actual = java_runtime_info, |
| meta = meta.derive("JavaRuntimeInfo"), |
| ) |
| public = struct( |
| 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], |
| meta = truth.expect(env).meta.derive( |
| format_str_kwargs = { |
| "name": target.label.name, |
| "package": target.label.package, |
| "bindir": target[TestingAspectInfo].bin_path, |
| }, |
| ), |
| ) |
| |
| java_runtime_info_subject = struct( |
| new = _new_java_runtime_info_subject, |
| from_target = _from_target, |
| ) |