1"""Unittest to verify compile_data (attribute) propagation""" 2 3load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 4load("//rust:defs.bzl", "rust_common", "rust_doc", "rust_library", "rust_test") 5load( 6 "//test/unit:common.bzl", 7 "assert_action_mnemonic", 8) 9 10def _target_has_compile_data(ctx, expected): 11 env = analysistest.begin(ctx) 12 target = analysistest.target_under_test(env) 13 14 # Extract compile_data from a target expected to have a `CrateInfo` provider 15 crate_info = target[rust_common.crate_info] 16 compile_data = crate_info.compile_data.to_list() 17 18 # Ensure compile data was correctly propagated to the provider 19 asserts.equals( 20 env, 21 sorted([data.short_path for data in compile_data]), 22 expected, 23 ) 24 25 return analysistest.end(env) 26 27def _compile_data_propagates_to_crate_info_test_impl(ctx): 28 return _target_has_compile_data( 29 ctx, 30 ["test/unit/compile_data/compile_data.txt"], 31 ) 32 33def _wrapper_rule_propagates_to_crate_info_test_impl(ctx): 34 return _target_has_compile_data( 35 ctx, 36 ["test/unit/compile_data/compile_data.txt"], 37 ) 38 39def _wrapper_rule_propagates_and_joins_compile_data_test_impl(ctx): 40 return _target_has_compile_data( 41 ctx, 42 [ 43 "test/unit/compile_data/compile_data.txt", 44 "test/unit/compile_data/test_compile_data.txt", 45 ], 46 ) 47 48def _compile_data_propagates_to_rust_doc_test_impl(ctx): 49 env = analysistest.begin(ctx) 50 target = analysistest.target_under_test(env) 51 52 actions = target.actions 53 action = actions[0] 54 assert_action_mnemonic(env, action, "Rustdoc") 55 56 return analysistest.end(env) 57 58compile_data_propagates_to_crate_info_test = analysistest.make(_compile_data_propagates_to_crate_info_test_impl) 59wrapper_rule_propagates_to_crate_info_test = analysistest.make(_wrapper_rule_propagates_to_crate_info_test_impl) 60wrapper_rule_propagates_and_joins_compile_data_test = analysistest.make(_wrapper_rule_propagates_and_joins_compile_data_test_impl) 61compile_data_propagates_to_rust_doc_test = analysistest.make(_compile_data_propagates_to_rust_doc_test_impl) 62 63def _define_test_targets(): 64 rust_library( 65 name = "compile_data", 66 srcs = ["compile_data.rs"], 67 compile_data = ["compile_data.txt"], 68 edition = "2018", 69 ) 70 71 rust_test( 72 name = "compile_data_unit_test", 73 crate = ":compile_data", 74 ) 75 76 rust_test( 77 name = "test_compile_data_unit_test", 78 compile_data = ["test_compile_data.txt"], 79 crate = ":compile_data", 80 rustc_flags = ["--cfg=test_compile_data"], 81 ) 82 83 rust_library( 84 name = "compile_data_env", 85 srcs = ["compile_data_env.rs"], 86 compile_data = ["compile_data.txt"], 87 rustc_env = { 88 "COMPILE_DATA_PATH": "$(execpath :compile_data.txt)", 89 }, 90 edition = "2018", 91 ) 92 93 rust_doc( 94 name = "compile_data_env_rust_doc", 95 crate = ":compile_data_env", 96 ) 97 98def compile_data_test_suite(name): 99 """Entry-point macro called from the BUILD file. 100 101 Args: 102 name (str): Name of the macro. 103 """ 104 105 _define_test_targets() 106 107 compile_data_propagates_to_crate_info_test( 108 name = "compile_data_propagates_to_crate_info_test", 109 target_under_test = ":compile_data", 110 ) 111 112 wrapper_rule_propagates_to_crate_info_test( 113 name = "wrapper_rule_propagates_to_crate_info_test", 114 target_under_test = ":compile_data_unit_test", 115 ) 116 117 wrapper_rule_propagates_and_joins_compile_data_test( 118 name = "wrapper_rule_propagates_and_joins_compile_data_test", 119 target_under_test = ":test_compile_data_unit_test", 120 ) 121 122 compile_data_propagates_to_rust_doc_test( 123 name = "compile_data_propagates_to_rust_doc_test", 124 target_under_test = ":compile_data_env_rust_doc", 125 ) 126 127 native.test_suite( 128 name = name, 129 tests = [ 130 ":compile_data_propagates_to_crate_info_test", 131 ":wrapper_rule_propagates_to_crate_info_test", 132 ":wrapper_rule_propagates_and_joins_compile_data_test", 133 ":compile_data_propagates_to_rust_doc_test", 134 ], 135 ) 136