@@ -11,6 +11,7 @@ use std::env::{self, remove_var, set_var, var_os};
11
11
use std::ffi::{OsStr, OsString};
12
12
use std::fs;
13
13
use std::io;
14
+ use std::lazy::SyncLazy;
14
15
use std::path::{Path, PathBuf};
15
16
use test_utils::IS_RUSTC_TEST_SUITE;
16
17
@@ -64,11 +65,11 @@ extern crate tokio;
64
65
/// dependencies must be added to Cargo.toml at the project root. Test
65
66
/// dependencies that are not *directly* used by this test module require an
66
67
/// `extern crate` declaration.
67
- fn extern_flags() -> String {
68
+ static EXTERN_FLAGS: SyncLazy<String> = SyncLazy::new(|| {
68
69
let current_exe_depinfo = {
69
70
let mut path = env::current_exe().unwrap();
70
71
path.set_extension("d");
71
- std:: fs::read_to_string(path).unwrap()
72
+ fs::read_to_string(path).unwrap()
72
73
};
73
74
let mut crates: HashMap<&str, &str> = HashMap::with_capacity(TEST_DEPENDENCIES.len());
74
75
for line in current_exe_depinfo.lines() {
@@ -112,24 +113,25 @@ fn extern_flags() -> String {
112
113
.into_iter()
113
114
.map(|(name, path)| format!(" --extern {}={}", name, path))
114
115
.collect()
115
- }
116
+ });
116
117
117
- fn default_config( ) -> compiletest::Config {
118
+ fn base_config(test_dir: &str ) -> compiletest::Config {
118
119
let mut config = compiletest::Config {
119
120
edition: Some("2021".into()),
121
+ mode: TestMode::Ui,
120
122
..compiletest::Config::default()
121
123
};
122
124
123
125
if let Ok(filters) = env::var("TESTNAME") {
124
- config.filters = filters.split(',').map(std::string:: ToString::to_string).collect();
126
+ config.filters = filters.split(',').map(ToString::to_string).collect();
125
127
}
126
128
127
129
if let Some(path) = option_env!("RUSTC_LIB_PATH") {
128
130
let path = PathBuf::from(path);
129
131
config.run_lib_path = path.clone();
130
132
config.compile_lib_path = path;
131
133
}
132
- let current_exe_path = std:: env::current_exe().unwrap();
134
+ let current_exe_path = env::current_exe().unwrap();
133
135
let deps_path = current_exe_path.parent().unwrap();
134
136
let profile_path = deps_path.parent().unwrap();
135
137
@@ -143,10 +145,11 @@ fn default_config() -> compiletest::Config {
143
145
"--emit=metadata -Dwarnings -Zui-testing -L dependency={}{}{}",
144
146
deps_path.display(),
145
147
host_libs,
146
- extern_flags() ,
148
+ &*EXTERN_FLAGS ,
147
149
));
148
150
149
- config.build_base = profile_path.join("test");
151
+ config.src_base = Path::new("tests").join(test_dir);
152
+ config.build_base = profile_path.join("test").join(test_dir);
150
153
config.rustc_path = profile_path.join(if cfg!(windows) {
151
154
"clippy-driver.exe"
152
155
} else {
@@ -155,38 +158,31 @@ fn default_config() -> compiletest::Config {
155
158
config
156
159
}
157
160
158
- fn run_ui(cfg: &mut compiletest::Config) {
159
- cfg.mode = TestMode::Ui;
160
- cfg.src_base = Path::new("tests").join("ui");
161
+ fn run_ui() {
162
+ let config = base_config("ui");
161
163
// use tests/clippy.toml
162
- let _g = VarGuard::set("CARGO_MANIFEST_DIR", std:: fs::canonicalize("tests").unwrap());
163
- compiletest::run_tests(cfg );
164
+ let _g = VarGuard::set("CARGO_MANIFEST_DIR", fs::canonicalize("tests").unwrap());
165
+ compiletest::run_tests(&config );
164
166
}
165
167
166
- fn run_ui_test(cfg: &mut compiletest::Config) {
167
- cfg.mode = TestMode::Ui;
168
- cfg.src_base = Path::new("tests").join("ui_test");
169
- let _g = VarGuard::set("CARGO_MANIFEST_DIR", std::fs::canonicalize("tests").unwrap());
170
- let rustcflags = cfg.target_rustcflags.get_or_insert_with(Default::default);
171
- let len = rustcflags.len();
168
+ fn run_ui_test() {
169
+ let mut config = base_config("ui_test");
170
+ let _g = VarGuard::set("CARGO_MANIFEST_DIR", fs::canonicalize("tests").unwrap());
171
+ let rustcflags = config.target_rustcflags.get_or_insert_with(Default::default);
172
172
rustcflags.push_str(" --test");
173
- compiletest::run_tests(cfg);
174
- if let Some(ref mut flags) = &mut cfg.target_rustcflags {
175
- flags.truncate(len);
176
- }
173
+ compiletest::run_tests(&config);
177
174
}
178
175
179
- fn run_internal_tests(cfg: &mut compiletest::Config ) {
176
+ fn run_internal_tests() {
180
177
// only run internal tests with the internal-tests feature
181
178
if !RUN_INTERNAL_TESTS {
182
179
return;
183
180
}
184
- cfg.mode = TestMode::Ui;
185
- cfg.src_base = Path::new("tests").join("ui-internal");
186
- compiletest::run_tests(cfg);
181
+ let config = base_config("ui-internal");
182
+ compiletest::run_tests(&config);
187
183
}
188
184
189
- fn run_ui_toml(config: &mut compiletest::Config ) {
185
+ fn run_ui_toml() {
190
186
fn run_tests(config: &compiletest::Config, mut tests: Vec<tester::TestDescAndFn>) -> Result<bool, io::Error> {
191
187
let mut result = true;
192
188
let opts = compiletest::test_opts(config);
@@ -222,12 +218,12 @@ fn run_ui_toml(config: &mut compiletest::Config) {
222
218
Ok(result)
223
219
}
224
220
225
- config.mode = TestMode::Ui ;
226
- config.src_base = Path::new("tests").join("ui-toml") .canonicalize().unwrap();
221
+ let mut config = base_config("ui-toml") ;
222
+ config.src_base = config.src_base .canonicalize().unwrap();
227
223
228
- let tests = compiletest::make_tests(config);
224
+ let tests = compiletest::make_tests(& config);
229
225
230
- let res = run_tests(config, tests);
226
+ let res = run_tests(& config, tests);
231
227
match res {
232
228
Ok(true) => {},
233
229
Ok(false) => panic!("Some tests failed"),
@@ -237,7 +233,7 @@ fn run_ui_toml(config: &mut compiletest::Config) {
237
233
}
238
234
}
239
235
240
- fn run_ui_cargo(config: &mut compiletest::Config ) {
236
+ fn run_ui_cargo() {
241
237
fn run_tests(
242
238
config: &compiletest::Config,
243
239
filters: &[String],
@@ -310,13 +306,13 @@ fn run_ui_cargo(config: &mut compiletest::Config) {
310
306
return;
311
307
}
312
308
313
- config.mode = TestMode::Ui ;
314
- config.src_base = Path::new("tests").join("ui-cargo") .canonicalize().unwrap();
309
+ let mut config = base_config("ui-cargo") ;
310
+ config.src_base = config.src_base .canonicalize().unwrap();
315
311
316
- let tests = compiletest::make_tests(config);
312
+ let tests = compiletest::make_tests(& config);
317
313
318
314
let current_dir = env::current_dir().unwrap();
319
- let res = run_tests(config, &config.filters, tests);
315
+ let res = run_tests(& config, &config.filters, tests);
320
316
env::set_current_dir(current_dir).unwrap();
321
317
322
318
match res {
@@ -331,12 +327,11 @@ fn run_ui_cargo(config: &mut compiletest::Config) {
331
327
#[test]
332
328
fn compile_test() {
333
329
set_var("CLIPPY_DISABLE_DOCS_LINKS", "true");
334
- let mut config = default_config();
335
- run_ui(&mut config);
336
- run_ui_test(&mut config);
337
- run_ui_toml(&mut config);
338
- run_ui_cargo(&mut config);
339
- run_internal_tests(&mut config);
330
+ run_ui();
331
+ run_ui_test();
332
+ run_ui_toml();
333
+ run_ui_cargo();
334
+ run_internal_tests();
340
335
}
341
336
342
337
/// Restores an env var on drop
0 commit comments