1"""Unit tests for crate names.""" 2 3load("@bazel_skylib//lib:unittest.bzl", "analysistest") 4load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_shared_library", "rust_static_library", "rust_test") 5load("//test/unit:common.bzl", "assert_argv_contains", "assert_argv_contains_prefix_not") 6 7def _default_crate_name_library_test_impl(ctx): 8 env = analysistest.begin(ctx) 9 tut = analysistest.target_under_test(env) 10 11 # Note: Hyphens in crate name converted to underscores. 12 assert_argv_contains(env, tut.actions[0], "--crate-name=default_crate_name_library") 13 return analysistest.end(env) 14 15def _custom_crate_name_library_test_impl(ctx): 16 env = analysistest.begin(ctx) 17 tut = analysistest.target_under_test(env) 18 assert_argv_contains(env, tut.actions[0], "--crate-name=custom_name") 19 return analysistest.end(env) 20 21def _default_crate_name_binary_test_impl(ctx): 22 env = analysistest.begin(ctx) 23 tut = analysistest.target_under_test(env) 24 25 # Note: Hyphens in crate name converted to underscores. 26 assert_argv_contains(env, tut.actions[0], "--crate-name=default_crate_name_binary") 27 return analysistest.end(env) 28 29def _custom_crate_name_binary_test_impl(ctx): 30 env = analysistest.begin(ctx) 31 tut = analysistest.target_under_test(env) 32 assert_argv_contains(env, tut.actions[0], "--crate-name=custom_name") 33 return analysistest.end(env) 34 35def _default_crate_name_test_test_impl(ctx): 36 env = analysistest.begin(ctx) 37 tut = analysistest.target_under_test(env) 38 39 # Note: Hyphens in crate name converted to underscores. 40 assert_argv_contains(env, tut.actions[0], "--crate-name=default_crate_name_test") 41 return analysistest.end(env) 42 43def _custom_crate_name_test_test_impl(ctx): 44 env = analysistest.begin(ctx) 45 tut = analysistest.target_under_test(env) 46 assert_argv_contains(env, tut.actions[0], "--crate-name=custom_name") 47 return analysistest.end(env) 48 49def _slib_library_name_test_impl(ctx): 50 """Regression test for extra-filename. 51 52 Checks that the extra hash value appended to the library filename only 53 contains one dash. Previously, the hash for `slib` was negative, 54 resulting in an extra dash in the filename (--codegen_extra_filename=--NUM). 55 56 Args: 57 ctx: rule context. 58 """ 59 env = analysistest.begin(ctx) 60 tut = analysistest.target_under_test(env) 61 assert_argv_contains(env, tut.actions[0], "--codegen=metadata=-2102077805") 62 assert_argv_contains(env, tut.actions[0], "--codegen=extra-filename=-2102077805") 63 return analysistest.end(env) 64 65def _no_extra_filename_test_impl(ctx): 66 """Check that no extra filename is used. 67 68 Args: 69 ctx: rule context. 70 """ 71 env = analysistest.begin(ctx) 72 tut = analysistest.target_under_test(env) 73 assert_argv_contains_prefix_not(env, tut.actions[0], "--codegen=metadata=") 74 assert_argv_contains_prefix_not(env, tut.actions[0], "--codegen=extra-filename=") 75 return analysistest.end(env) 76 77default_crate_name_library_test = analysistest.make( 78 _default_crate_name_library_test_impl, 79) 80custom_crate_name_library_test = analysistest.make( 81 _custom_crate_name_library_test_impl, 82) 83default_crate_name_binary_test = analysistest.make( 84 _default_crate_name_binary_test_impl, 85) 86custom_crate_name_binary_test = analysistest.make( 87 _custom_crate_name_binary_test_impl, 88) 89default_crate_name_test_test = analysistest.make( 90 _default_crate_name_test_test_impl, 91) 92custom_crate_name_test_test = analysistest.make( 93 _custom_crate_name_test_test_impl, 94) 95slib_library_name_test = analysistest.make( 96 _slib_library_name_test_impl, 97) 98no_extra_filename_test = analysistest.make( 99 _no_extra_filename_test_impl, 100) 101 102def _crate_name_test(): 103 rust_library( 104 name = "default/crate-name-library", 105 srcs = ["lib.rs"], 106 edition = "2018", 107 ) 108 109 rust_library( 110 name = "custom-crate-name-library", 111 crate_name = "custom_name", 112 srcs = ["lib.rs"], 113 edition = "2018", 114 ) 115 116 rust_binary( 117 name = "default/crate-name-binary", 118 srcs = ["main.rs"], 119 edition = "2018", 120 ) 121 122 rust_binary( 123 name = "custom-crate-name-binary", 124 crate_name = "custom_name", 125 srcs = ["main.rs"], 126 edition = "2018", 127 ) 128 129 rust_test( 130 name = "default/crate-name-test", 131 srcs = ["main.rs"], 132 edition = "2018", 133 ) 134 135 rust_test( 136 name = "custom-crate-name-test", 137 crate_name = "custom_name", 138 srcs = ["main.rs"], 139 edition = "2018", 140 ) 141 142 rust_library( 143 name = "slib", 144 srcs = ["slib.rs"], 145 edition = "2018", 146 ) 147 148 rust_shared_library( 149 name = "shared_lib", 150 srcs = ["lib.rs"], 151 edition = "2018", 152 ) 153 154 rust_static_library( 155 name = "static_lib", 156 srcs = ["lib.rs"], 157 edition = "2018", 158 ) 159 160 slib_library_name_test( 161 name = "slib_library_name_test", 162 target_under_test = ":slib", 163 ) 164 165 default_crate_name_library_test( 166 name = "default_crate_name_library_test", 167 target_under_test = ":default/crate-name-library", 168 ) 169 170 custom_crate_name_library_test( 171 name = "custom_crate_name_library_test", 172 target_under_test = ":custom-crate-name-library", 173 ) 174 175 default_crate_name_binary_test( 176 name = "default_crate_name_binary_test", 177 target_under_test = ":default/crate-name-binary", 178 ) 179 180 custom_crate_name_binary_test( 181 name = "custom_crate_name_binary_test", 182 target_under_test = ":custom-crate-name-binary", 183 ) 184 185 default_crate_name_test_test( 186 name = "default_crate_name_test_test", 187 target_under_test = ":default/crate-name-test", 188 ) 189 190 custom_crate_name_test_test( 191 name = "custom_crate_name_test_test", 192 target_under_test = ":custom-crate-name-test", 193 ) 194 195 no_extra_filename_test( 196 name = "no_extra_filename_for_shared_library_test", 197 target_under_test = ":shared_lib", 198 ) 199 200 no_extra_filename_test( 201 name = "no_extra_filename_for_static_library_test", 202 target_under_test = ":static_lib", 203 ) 204 205def crate_name_test_suite(name): 206 """Entry-point macro called from the BUILD file. 207 208 Args: 209 name: Name of the macro. 210 """ 211 212 _crate_name_test() 213 214 native.test_suite( 215 name = name, 216 tests = [ 217 ":default_crate_name_library_test", 218 ":custom_crate_name_library_test", 219 ":default_crate_name_binary_test", 220 ":custom_crate_name_binary_test", 221 ":default_crate_name_test_test", 222 ":custom_crate_name_test_test", 223 ], 224 ) 225