| """Unittests for rust rules.""" |
| |
| load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") |
| load( |
| "//rust:defs.bzl", |
| "rust_common", |
| "rust_library", |
| "rust_proc_macro", |
| "rust_shared_library", |
| "rust_static_library", |
| ) |
| |
| def _rule_provides_crate_info_test_impl(ctx): |
| env = analysistest.begin(ctx) |
| tut = analysistest.target_under_test(env) |
| asserts.true( |
| env, |
| rust_common.crate_info in tut, |
| "{} should provide CrateInfo".format(tut.label.name), |
| ) |
| return analysistest.end(env) |
| |
| def _rule_does_not_provide_crate_info_test_impl(ctx): |
| env = analysistest.begin(ctx) |
| tut = analysistest.target_under_test(env) |
| asserts.false( |
| env, |
| rust_common.crate_info in tut, |
| "{} should not provide CrateInfo".format(tut.label.name), |
| ) |
| asserts.true( |
| env, |
| rust_common.test_crate_info in tut, |
| "{} should provide a TestCrateInfo".format(tut.label.name), |
| ) |
| return analysistest.end(env) |
| |
| rule_provides_crate_info_test = analysistest.make(_rule_provides_crate_info_test_impl) |
| rule_does_not_provide_crate_info_test = analysistest.make(_rule_does_not_provide_crate_info_test_impl) |
| |
| def _crate_info_test(): |
| rust_library( |
| name = "rlib", |
| srcs = ["lib.rs"], |
| edition = "2018", |
| ) |
| |
| rust_proc_macro( |
| name = "proc_macro", |
| srcs = ["lib.rs"], |
| edition = "2018", |
| ) |
| |
| rust_static_library( |
| name = "staticlib", |
| srcs = ["lib.rs"], |
| edition = "2018", |
| ) |
| |
| rust_shared_library( |
| name = "cdylib", |
| srcs = ["lib.rs"], |
| edition = "2018", |
| ) |
| |
| rule_provides_crate_info_test( |
| name = "rlib_provides_crate_info_test", |
| target_under_test = ":rlib", |
| ) |
| |
| rule_provides_crate_info_test( |
| name = "proc_macro_provides_crate_info_test", |
| target_under_test = ":proc_macro", |
| ) |
| |
| rule_does_not_provide_crate_info_test( |
| name = "cdylib_does_not_provide_crate_info_test", |
| target_under_test = ":cdylib", |
| ) |
| |
| rule_does_not_provide_crate_info_test( |
| name = "staticlib_does_not_provide_crate_info_test", |
| target_under_test = ":staticlib", |
| ) |
| |
| def crate_info_test_suite(name): |
| """Entry-point macro called from the BUILD file. |
| |
| Args: |
| name: Name of the macro. |
| """ |
| _crate_info_test() |
| |
| native.test_suite( |
| name = name, |
| tests = [ |
| ":rlib_provides_crate_info_test", |
| ":proc_macro_provides_crate_info_test", |
| ":cdylib_does_not_provide_crate_info_test", |
| ":staticlib_does_not_provide_crate_info_test", |
| ], |
| ) |