Skip to content

Commit

Permalink
Add test skip support
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
chbaker0 committed May 10, 2022
1 parent e013f9e commit b2316c1
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/bootstrap/builder/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
21 changes: 19 additions & 2 deletions src/bootstrap/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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"),
Expand Down Expand Up @@ -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> {
Expand Down
4 changes: 4 additions & 0 deletions src/tools/compiletest/src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,

Expand Down
6 changes: 5 additions & 1 deletion src/tools/compiletest/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
"",
Expand Down Expand Up @@ -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>()
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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());
Expand Down

0 comments on commit b2316c1

Please sign in to comment.