Skip to content

Commit

Permalink
Auto merge of rust-lang#96493 - chbaker0:issue-96342-fix, r=Mark-Simu…
Browse files Browse the repository at this point in the history
…lacrum

Add compiletest and bootstrap "--skip" option forwarded to libtest

With this PR,  "x.py test --skip SKIP ..." will run the specified test suite, but forward "--skip SKIP" to the test tool. libtest already supports this option. The PR also adds it to compiletest which itself just forwards it to libtest.

Adds the functionality requested in rust-lang#96342. This is useful to work around tests broken upstream.

rust-lang#96362 (comment) is the specific test issue my project is trying to work around.
  • Loading branch information
bors committed May 13, 2022
2 parents ebb80ec + b2316c1 commit 925e774
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 @@ -507,6 +507,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 @@ -577,6 +578,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 925e774

Please sign in to comment.