Auto merge of #36604 - japaric:libtest-skip, r=alexcrichton
libtest: add a --skip flag to the test runner This flag takes a FILTER argument and instructs the test runner to skip the tests whose names contain the word FILTER. --skip can be used several times. --- My motivation for submitting this is that while using [smoke] to run `std` unit tests for cross targets I found that a few of the tests always fail due to limitations in QEMU (it can't handle too many threads) and I'd like to skip these problematic tests from the command line to be able to run the rest of the unit tests. [smoke]: https://github.com/japaric/smoke I know there is another mechanism to skip tests: `#[ignore]` but this doesn't work in my use case because I can't (easily) modify the source of the standard libraries to `#[ignore]` some tests. And even if I could, the change would involve conditionally ignoring some tests for some targets but that's not a perfect solution because those tests should pass if executed on real hardware so they should not be `#[ignored]` in that scenario. r? @alexcrichton cc @brson
This commit is contained in:
commit
d75c84af80
@ -303,6 +303,7 @@ pub struct TestOpts {
|
|||||||
pub color: ColorConfig,
|
pub color: ColorConfig,
|
||||||
pub quiet: bool,
|
pub quiet: bool,
|
||||||
pub test_threads: Option<usize>,
|
pub test_threads: Option<usize>,
|
||||||
|
pub skip: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TestOpts {
|
impl TestOpts {
|
||||||
@ -318,6 +319,7 @@ impl TestOpts {
|
|||||||
color: AutoColor,
|
color: AutoColor,
|
||||||
quiet: false,
|
quiet: false,
|
||||||
test_threads: None,
|
test_threads: None,
|
||||||
|
skip: vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -337,6 +339,8 @@ fn optgroups() -> Vec<getopts::OptGroup> {
|
|||||||
task, allow printing directly"),
|
task, allow printing directly"),
|
||||||
getopts::optopt("", "test-threads", "Number of threads used for running tests \
|
getopts::optopt("", "test-threads", "Number of threads used for running tests \
|
||||||
in parallel", "n_threads"),
|
in parallel", "n_threads"),
|
||||||
|
getopts::optmulti("", "skip", "Skip tests whose names contain FILTER (this flag can \
|
||||||
|
be used multiple times)","FILTER"),
|
||||||
getopts::optflag("q", "quiet", "Display one character per test instead of one line"),
|
getopts::optflag("q", "quiet", "Display one character per test instead of one line"),
|
||||||
getopts::optopt("", "color", "Configure coloring of output:
|
getopts::optopt("", "color", "Configure coloring of output:
|
||||||
auto = colorize if stdout is a tty and tests are run on serially (default);
|
auto = colorize if stdout is a tty and tests are run on serially (default);
|
||||||
@ -446,6 +450,7 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> {
|
|||||||
color: color,
|
color: color,
|
||||||
quiet: quiet,
|
quiet: quiet,
|
||||||
test_threads: test_threads,
|
test_threads: test_threads,
|
||||||
|
skip: matches.opt_strs("skip"),
|
||||||
};
|
};
|
||||||
|
|
||||||
Some(Ok(test_opts))
|
Some(Ok(test_opts))
|
||||||
@ -1101,6 +1106,11 @@ pub fn filter_tests(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> Vec<TestDescA
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Skip tests that match any of the skip filters
|
||||||
|
filtered = filtered.into_iter()
|
||||||
|
.filter(|t| !opts.skip.iter().any(|sf| t.desc.name.as_slice().contains(&sf[..])))
|
||||||
|
.collect();
|
||||||
|
|
||||||
// Maybe pull out the ignored test and unignore them
|
// Maybe pull out the ignored test and unignore them
|
||||||
filtered = if !opts.run_ignored {
|
filtered = if !opts.run_ignored {
|
||||||
filtered
|
filtered
|
||||||
|
@ -313,6 +313,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
|
|||||||
},
|
},
|
||||||
color: test::AutoColor,
|
color: test::AutoColor,
|
||||||
test_threads: None,
|
test_threads: None,
|
||||||
|
skip: vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user