Add a test for `java_test` with an implicit `main_class` (ignore-relnotes) PiperOrigin-RevId: 944538181 Change-Id: I93c89986d07f8287ffb75f12e8bb8508a1dd9408
diff --git a/test/java/common/rules/common_launcher_java_binary_tests.bzl b/test/java/common/rules/common_launcher_java_binary_tests.bzl index b3ffd0c..f09d2dc 100644 --- a/test/java/common/rules/common_launcher_java_binary_tests.bzl +++ b/test/java/common/rules/common_launcher_java_binary_tests.bzl
@@ -4,6 +4,7 @@ load("@rules_testing//lib:util.bzl", "util") load("//java:java_binary.bzl", "java_binary") load("//java:java_library.bzl", "java_library") +load("//java:java_test.bzl", "java_test") load("//test/java/testutil:artifact_closure.bzl", "artifact_closure") load("//test/java/testutil:binary_executable_subject.bzl", "expect_that_executable") load("//test/java/testutil:mock_java_toolchain.bzl", "mock_java_toolchain") @@ -167,6 +168,23 @@ "common.rules.{test_name}.Binary".format(test_name = env.ctx.label.name), ) +def _test_java_test_main_class(name): + util.helper_target( + java_test, + name = name + "/Test", + ) + + analysis_test( + name = name, + impl = _test_java_test_main_class_impl, + target = name + "/Test", + ) + +def _test_java_test_main_class_impl(env, target): + expect_that_executable.of_target(env, target).test_suite().equals( + "common.rules.{test_name}.Test".format(test_name = env.ctx.label.name), + ) + def java_binary_launcher_tests(name): test_suite( name = name, @@ -177,5 +195,6 @@ _test_java_binary_transitive_dependency_from_java_library, _test_java_binary_explicit_main_class, _test_java_binary_implicit_main_class, + _test_java_test_main_class, ], )
diff --git a/test/java/testutil/binary_executable_subject.bzl b/test/java/testutil/binary_executable_subject.bzl index 189e1d2..818d66e 100644 --- a/test/java/testutil/binary_executable_subject.bzl +++ b/test/java/testutil/binary_executable_subject.bzl
@@ -1,12 +1,14 @@ """Custom rules_testing subject for java_binary/java_test executable output""" load("@rules_testing//lib:truth.bzl", "subjects") +load("//java/common:java_semantics.bzl", "semantics") def _of_target(env, target): executable = target[DefaultInfo].files_to_run.executable.short_path action_subject = env.expect.that_target(target).action_generating(executable) public = struct( java_start_class = lambda: _java_start_class_subject(action_subject), + test_suite = lambda: _test_suite_subject(action_subject), ) return public @@ -21,6 +23,22 @@ desc = "java_start_class", ).offset(0, factory = subjects.str) +def _test_suite_subject(action): + if action.actual.substitutions: + jvm_flags = action.substitutions().get("%jvm_flags%", factory = subjects.str).split(" ") + else: + # Windows + jvm_flags = action.argv().transform( + filter = lambda e: e.startswith("jvm_flags="), + map_each = lambda e: e.split("=", 1)[1], + desc = "jvm_flags", + ).offset(0, factory = subjects.str).split("\t") + return jvm_flags.transform( + filter = lambda e: e.startswith("-D" + semantics.TEST_SUITE_PROPERTY_NAME + "="), + map_each = lambda e: e.split("=", 1)[1], + desc = semantics.TEST_SUITE_PROPERTY_NAME, + ).offset(0, factory = subjects.str) + expect_that_executable = struct( of_target = _of_target, )