Skip to content

Commit b2316c1

Browse files
committed
Add test skip support
libtest already supports a "--skip SUBSTRING" arg which excludes any test names matching SUBSTRING. This adds a "--skip" argument to compiletest and bootstrap which is forwarded to libtest.
1 parent e013f9e commit b2316c1

File tree

4 files changed

+30
-3
lines changed

4 files changed

+30
-3
lines changed

src/bootstrap/builder/tests.rs

+2
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,7 @@ mod dist {
495495
config.stage = 0;
496496
config.cmd = Subcommand::Test {
497497
paths: vec!["library/std".into()],
498+
skip: vec![],
498499
test_args: vec![],
499500
rustc_args: vec![],
500501
fail_fast: true,
@@ -565,6 +566,7 @@ mod dist {
565566
let mut config = configure(&["A"], &["A"]);
566567
config.cmd = Subcommand::Test {
567568
paths: vec![],
569+
skip: vec![],
568570
test_args: vec![],
569571
rustc_args: vec![],
570572
fail_fast: true,

src/bootstrap/flags.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ pub enum Subcommand {
111111
compare_mode: Option<String>,
112112
pass: Option<String>,
113113
run: Option<String>,
114+
skip: Vec<String>,
114115
test_args: Vec<String>,
115116
rustc_args: Vec<String>,
116117
fail_fast: bool,
@@ -261,6 +262,7 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`",
261262
match subcommand {
262263
Kind::Test => {
263264
opts.optflag("", "no-fail-fast", "Run all tests regardless of failure");
265+
opts.optmulti("", "skip", "skips tests matching SUBSTRING, if supported by test tool. May be passed multiple times", "SUBSTRING");
264266
opts.optmulti(
265267
"",
266268
"test-args",
@@ -545,6 +547,7 @@ Arguments:
545547
compare_mode: matches.opt_str("compare-mode"),
546548
pass: matches.opt_str("pass"),
547549
run: matches.opt_str("run"),
550+
skip: matches.opt_strs("skip"),
548551
test_args: matches.opt_strs("test-args"),
549552
rustc_args: matches.opt_strs("rustc-args"),
550553
fail_fast: !matches.opt_present("no-fail-fast"),
@@ -689,12 +692,26 @@ impl Subcommand {
689692
}
690693

691694
pub fn test_args(&self) -> Vec<&str> {
695+
let mut args = vec![];
696+
697+
match *self {
698+
Subcommand::Test { ref skip, .. } => {
699+
for s in skip {
700+
args.push("--skip");
701+
args.push(s.as_str());
702+
}
703+
}
704+
_ => (),
705+
};
706+
692707
match *self {
693708
Subcommand::Test { ref test_args, .. } | Subcommand::Bench { ref test_args, .. } => {
694-
test_args.iter().flat_map(|s| s.split_whitespace()).collect()
709+
args.extend(test_args.iter().flat_map(|s| s.split_whitespace()))
695710
}
696-
_ => Vec::new(),
711+
_ => (),
697712
}
713+
714+
args
698715
}
699716

700717
pub fn rustc_args(&self) -> Vec<&str> {

src/tools/compiletest/src/common.rs

+4
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ pub struct Config {
246246
/// Only run tests that match these filters
247247
pub filters: Vec<String>,
248248

249+
/// Skip tests tests matching these substrings. Corresponds to
250+
/// `test::TestOpts::skip`. `filter_exact` does not apply to these flags.
251+
pub skip: Vec<String>,
252+
249253
/// Exactly match the filter, rather than a substring
250254
pub filter_exact: bool,
251255

src/tools/compiletest/src/main.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
9191
)
9292
.optopt("", "run", "whether to execute run-* tests", "auto | always | never")
9393
.optflag("", "ignored", "run tests marked as ignored")
94+
.optmulti("", "skip", "skip tests matching SUBSTRING. Can be passed multiple times", "SUBSTRING")
9495
.optflag("", "exact", "filters match exactly")
9596
.optopt(
9697
"",
@@ -236,6 +237,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
236237
debugger: None,
237238
run_ignored,
238239
filters: matches.free.clone(),
240+
skip: matches.opt_strs("skip"),
239241
filter_exact: matches.opt_present("exact"),
240242
force_pass_mode: matches.opt_str("pass").map(|mode| {
241243
mode.parse::<PassMode>()
@@ -312,6 +314,7 @@ pub fn log_config(config: &Config) {
312314
logv(c, format!("mode: {}", config.mode));
313315
logv(c, format!("run_ignored: {}", config.run_ignored));
314316
logv(c, format!("filters: {:?}", config.filters));
317+
logv(c, format!("skip: {:?}", config.skip));
315318
logv(c, format!("filter_exact: {}", config.filter_exact));
316319
logv(
317320
c,
@@ -506,7 +509,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
506509
shuffle: false,
507510
shuffle_seed: None,
508511
test_threads: None,
509-
skip: vec![],
512+
skip: config.skip.clone(),
510513
list: false,
511514
options: test::Options::new(),
512515
time_options: None,
@@ -595,6 +598,7 @@ fn collect_tests_from_dir(
595598
debug!("found test file: {:?}", file_path.display());
596599
let paths =
597600
TestPaths { file: file_path, relative_dir: relative_dir_path.to_path_buf() };
601+
598602
tests.extend(make_test(config, &paths, inputs))
599603
} else if file_path.is_dir() {
600604
let relative_file_path = relative_dir_path.join(file.file_name());

0 commit comments

Comments
 (0)