diff --git a/rust/private/rust.bzl b/rust/private/rust.bzl index 6ebfbea4c7..4bcf648884 100644 --- a/rust/private/rust.bzl +++ b/rust/private/rust.bzl @@ -458,7 +458,8 @@ def _rust_test_impl(ctx): ) else: if not crate_root: - crate_root = crate_root_src(ctx.attr.name, ctx.files.srcs, "lib") + crate_root_type = "lib" if ctx.attr.use_libtest_harness else "bin" + crate_root = crate_root_src(ctx.attr.name, ctx.files.srcs, crate_root_type) output_hash = determine_output_hash(crate_root, ctx.label) output = ctx.actions.declare_file( diff --git a/test/unit/use_libtest_harness/main.rs b/test/unit/use_libtest_harness/main.rs new file mode 100644 index 0000000000..f328e4d9d0 --- /dev/null +++ b/test/unit/use_libtest_harness/main.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/test/unit/use_libtest_harness/use_libtest_harness_test.bzl b/test/unit/use_libtest_harness/use_libtest_harness_test.bzl index 87296a5e12..32c51e63c2 100644 --- a/test/unit/use_libtest_harness/use_libtest_harness_test.bzl +++ b/test/unit/use_libtest_harness/use_libtest_harness_test.bzl @@ -24,8 +24,19 @@ def _use_libtest_harness_rustc_noharness_flags_test_impl(ctx): assert_list_contains_adjacent_elements(env, action.argv, ["--cfg", "test"]) return analysistest.end(env) +def _use_libtest_harness_rustc_noharness_main_flags_test_impl(ctx): + env = analysistest.begin(ctx) + tut = analysistest.target_under_test(env) + action = tut.actions[0] + assert_action_mnemonic(env, action, "Rustc") + assert_argv_contains(env, action, "test/unit/use_libtest_harness/main.rs") + assert_argv_contains_not(env, action, "--test") + assert_list_contains_adjacent_elements(env, action.argv, ["--cfg", "test"]) + return analysistest.end(env) + use_libtest_harness_rustc_flags_test = analysistest.make(_use_libtest_harness_rustc_flags_test_impl) use_libtest_harness_rustc_noharness_flags_test = analysistest.make(_use_libtest_harness_rustc_noharness_flags_test_impl) +use_libtest_harness_rustc_noharness_main_flags_test = analysistest.make(_use_libtest_harness_rustc_noharness_main_flags_test_impl) def _use_libtest_harness_test(): rust_test( @@ -41,6 +52,16 @@ def _use_libtest_harness_test(): use_libtest_harness = False, ) + rust_test( + name = "mytest_noharness_main", + srcs = [ + "main.rs", + "mytest.rs", + ], + edition = "2018", + use_libtest_harness = False, + ) + use_libtest_harness_rustc_flags_test( name = "use_libtest_harness_rustc_flags_test", target_under_test = ":mytest", @@ -51,6 +72,11 @@ def _use_libtest_harness_test(): target_under_test = ":mytest_noharness", ) + use_libtest_harness_rustc_noharness_main_flags_test( + name = "use_libtest_harness_rustc_noharness_main_flags_test", + target_under_test = ":mytest_noharness_main", + ) + def use_libtest_harness_test_suite(name): """Entry-point macro called from the BUILD file.