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.
This commit is contained in:
parent
e013f9e0ca
commit
b2316c1a88
4 changed files with 30 additions and 3 deletions
|
@ -495,6 +495,7 @@ mod dist {
|
|||
config.stage = 0;
|
||||
config.cmd = Subcommand::Test {
|
||||
paths: vec!["library/std".into()],
|
||||
skip: vec![],
|
||||
test_args: vec![],
|
||||
rustc_args: vec![],
|
||||
fail_fast: true,
|
||||
|
@ -565,6 +566,7 @@ mod dist {
|
|||
let mut config = configure(&["A"], &["A"]);
|
||||
config.cmd = Subcommand::Test {
|
||||
paths: vec![],
|
||||
skip: vec![],
|
||||
test_args: vec![],
|
||||
rustc_args: vec![],
|
||||
fail_fast: true,
|
||||
|
|
|
@ -111,6 +111,7 @@ pub enum Subcommand {
|
|||
compare_mode: Option<String>,
|
||||
pass: Option<String>,
|
||||
run: Option<String>,
|
||||
skip: Vec<String>,
|
||||
test_args: Vec<String>,
|
||||
rustc_args: Vec<String>,
|
||||
fail_fast: bool,
|
||||
|
@ -261,6 +262,7 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`",
|
|||
match subcommand {
|
||||
Kind::Test => {
|
||||
opts.optflag("", "no-fail-fast", "Run all tests regardless of failure");
|
||||
opts.optmulti("", "skip", "skips tests matching SUBSTRING, if supported by test tool. May be passed multiple times", "SUBSTRING");
|
||||
opts.optmulti(
|
||||
"",
|
||||
"test-args",
|
||||
|
@ -545,6 +547,7 @@ Arguments:
|
|||
compare_mode: matches.opt_str("compare-mode"),
|
||||
pass: matches.opt_str("pass"),
|
||||
run: matches.opt_str("run"),
|
||||
skip: matches.opt_strs("skip"),
|
||||
test_args: matches.opt_strs("test-args"),
|
||||
rustc_args: matches.opt_strs("rustc-args"),
|
||||
fail_fast: !matches.opt_present("no-fail-fast"),
|
||||
|
@ -689,12 +692,26 @@ impl Subcommand {
|
|||
}
|
||||
|
||||
pub fn test_args(&self) -> Vec<&str> {
|
||||
let mut args = vec![];
|
||||
|
||||
match *self {
|
||||
Subcommand::Test { ref skip, .. } => {
|
||||
for s in skip {
|
||||
args.push("--skip");
|
||||
args.push(s.as_str());
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
};
|
||||
|
||||
match *self {
|
||||
Subcommand::Test { ref test_args, .. } | Subcommand::Bench { ref test_args, .. } => {
|
||||
test_args.iter().flat_map(|s| s.split_whitespace()).collect()
|
||||
args.extend(test_args.iter().flat_map(|s| s.split_whitespace()))
|
||||
}
|
||||
_ => Vec::new(),
|
||||
_ => (),
|
||||
}
|
||||
|
||||
args
|
||||
}
|
||||
|
||||
pub fn rustc_args(&self) -> Vec<&str> {
|
||||
|
|
|
@ -246,6 +246,10 @@ pub struct Config {
|
|||
/// Only run tests that match these filters
|
||||
pub filters: Vec<String>,
|
||||
|
||||
/// Skip tests tests matching these substrings. Corresponds to
|
||||
/// `test::TestOpts::skip`. `filter_exact` does not apply to these flags.
|
||||
pub skip: Vec<String>,
|
||||
|
||||
/// Exactly match the filter, rather than a substring
|
||||
pub filter_exact: bool,
|
||||
|
||||
|
|
|
@ -91,6 +91,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
|
|||
)
|
||||
.optopt("", "run", "whether to execute run-* tests", "auto | always | never")
|
||||
.optflag("", "ignored", "run tests marked as ignored")
|
||||
.optmulti("", "skip", "skip tests matching SUBSTRING. Can be passed multiple times", "SUBSTRING")
|
||||
.optflag("", "exact", "filters match exactly")
|
||||
.optopt(
|
||||
"",
|
||||
|
@ -236,6 +237,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
|
|||
debugger: None,
|
||||
run_ignored,
|
||||
filters: matches.free.clone(),
|
||||
skip: matches.opt_strs("skip"),
|
||||
filter_exact: matches.opt_present("exact"),
|
||||
force_pass_mode: matches.opt_str("pass").map(|mode| {
|
||||
mode.parse::<PassMode>()
|
||||
|
@ -312,6 +314,7 @@ pub fn log_config(config: &Config) {
|
|||
logv(c, format!("mode: {}", config.mode));
|
||||
logv(c, format!("run_ignored: {}", config.run_ignored));
|
||||
logv(c, format!("filters: {:?}", config.filters));
|
||||
logv(c, format!("skip: {:?}", config.skip));
|
||||
logv(c, format!("filter_exact: {}", config.filter_exact));
|
||||
logv(
|
||||
c,
|
||||
|
@ -506,7 +509,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
|
|||
shuffle: false,
|
||||
shuffle_seed: None,
|
||||
test_threads: None,
|
||||
skip: vec![],
|
||||
skip: config.skip.clone(),
|
||||
list: false,
|
||||
options: test::Options::new(),
|
||||
time_options: None,
|
||||
|
@ -595,6 +598,7 @@ fn collect_tests_from_dir(
|
|||
debug!("found test file: {:?}", file_path.display());
|
||||
let paths =
|
||||
TestPaths { file: file_path, relative_dir: relative_dir_path.to_path_buf() };
|
||||
|
||||
tests.extend(make_test(config, &paths, inputs))
|
||||
} else if file_path.is_dir() {
|
||||
let relative_file_path = relative_dir_path.join(file.file_name());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue