Add a test for `java_binary` with an explicit `main_class` (ignore-relnotes) PiperOrigin-RevId: 940934897 Change-Id: I49e9fb0e03bea872dd27a99f5f764da390aaba18
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 122d26c..c0fd946 100644 --- a/test/java/common/rules/common_launcher_java_binary_tests.bzl +++ b/test/java/common/rules/common_launcher_java_binary_tests.bzl
@@ -5,6 +5,7 @@ load("//java:java_binary.bzl", "java_binary") load("//java:java_library.bzl", "java_library") 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") def _test_java_binary_non_executable_rule_outputs(name): @@ -130,6 +131,24 @@ "{package}/OtherDependency.java", ]) +def _test_java_binary_explicit_main_class(name): + util.helper_target( + java_binary, + name = name + "/bin", + main_class = "foo.bar.baz", + ) + + analysis_test( + name = name, + impl = _test_java_binary_explicit_main_class_impl, + target = name + "/bin", + ) + +def _test_java_binary_explicit_main_class_impl(env, target): + expect_that_executable.of_target(env, target).java_start_class().equals( + "foo.bar.baz", + ) + def java_binary_launcher_tests(name): test_suite( name = name, @@ -138,5 +157,6 @@ _test_java_binary_resources_only, _test_java_binary_deploy_jar_coverage_setup, _test_java_binary_transitive_dependency_from_java_library, + _test_java_binary_explicit_main_class, ], )
diff --git a/test/java/testutil/binary_executable_subject.bzl b/test/java/testutil/binary_executable_subject.bzl new file mode 100644 index 0000000..189e1d2 --- /dev/null +++ b/test/java/testutil/binary_executable_subject.bzl
@@ -0,0 +1,26 @@ +"""Custom rules_testing subject for java_binary/java_test executable output""" + +load("@rules_testing//lib:truth.bzl", "subjects") + +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), + ) + return public + +def _java_start_class_subject(action): + if action.actual.substitutions: + return action.substitutions().get("%java_start_class%", factory = subjects.str) + else: + # Windows + return action.argv().transform( + filter = lambda e: e.startswith("java_start_class="), + map_each = lambda e: e.split("=", 1)[1], + desc = "java_start_class", + ).offset(0, factory = subjects.str) + +expect_that_executable = struct( + of_target = _of_target, +)