Skip to content

Commit

Permalink
Auto merge of #36604 - japaric:libtest-skip, r=alexcrichton
Browse files Browse the repository at this point in the history
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
  • Loading branch information
bors committed Sep 28, 2016
2 parents 755516b + 45916ec commit d75c84a
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/libtest/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,7 @@ pub struct TestOpts {
pub color: ColorConfig,
pub quiet: bool,
pub test_threads: Option<usize>,
pub skip: Vec<String>,
}

impl TestOpts {
Expand All @@ -318,6 +319,7 @@ impl TestOpts {
color: AutoColor,
quiet: false,
test_threads: None,
skip: vec![],
}
}
}
Expand All @@ -337,6 +339,8 @@ fn optgroups() -> Vec<getopts::OptGroup> {
task, allow printing directly"),
getopts::optopt("", "test-threads", "Number of threads used for running tests \
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::optopt("", "color", "Configure coloring of output:
auto = colorize if stdout is a tty and tests are run on serially (default);
Expand Down Expand Up @@ -446,6 +450,7 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> {
color: color,
quiet: quiet,
test_threads: test_threads,
skip: matches.opt_strs("skip"),
};

Some(Ok(test_opts))
Expand Down Expand Up @@ -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
filtered = if !opts.run_ignored {
filtered
Expand Down
1 change: 1 addition & 0 deletions src/tools/compiletest/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
},
color: test::AutoColor,
test_threads: None,
skip: vec![],
}
}

Expand Down

0 comments on commit d75c84a

Please sign in to comment.