diff options
| author | bors <bors@rust-lang.org> | 2019-03-01 05:17:14 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-03-01 05:17:14 +0000 |
| commit | 7b4f8f969caa9321b2c4881b00162ee2d68896fd (patch) | |
| tree | 783a4d382b0a43eec62eecf6828ebd67154b03c5 | |
| parent | 20cfc9deb5a85c4daf235871e47c0a81daa9b700 (diff) | |
| parent | 43e7434120a10f86713091667258f58b6c245e2d (diff) | |
| download | rust-7b4f8f969caa9321b2c4881b00162ee2d68896fd.tar.gz rust-7b4f8f969caa9321b2c4881b00162ee2d68896fd.zip | |
Auto merge of #58689 - memoryruins:exclude_should_panic, r=oli-obk
Add unstable option to ignore should_panic tests Add an unstable option `--exclude-should-panic` to libtest to workaround https://github.com/rust-lang/miri/issues/636 ?r @oli-obk cc @RalfJung
| -rw-r--r-- | src/libtest/lib.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index 5c7fb1b8044..ea821a1d939 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -366,6 +366,7 @@ pub struct TestOpts { pub list: bool, pub filter: Option<String>, pub filter_exact: bool, + pub exclude_should_panic: bool, pub run_ignored: RunIgnored, pub run_tests: bool, pub bench_benchmarks: bool, @@ -385,6 +386,7 @@ impl TestOpts { list: false, filter: None, filter_exact: false, + exclude_should_panic: false, run_ignored: RunIgnored::No, run_tests: false, bench_benchmarks: false, @@ -406,6 +408,7 @@ fn optgroups() -> getopts::Options { let mut opts = getopts::Options::new(); opts.optflag("", "include-ignored", "Run ignored and not ignored tests") .optflag("", "ignored", "Run only ignored tests") + .optflag("", "exclude-should-panic", "Excludes tests marked as should_panic") .optflag("", "test", "Run tests and not benchmarks") .optflag("", "bench", "Run benchmarks instead of tests") .optflag("", "list", "List all tests and benchmarks") @@ -558,6 +561,13 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> { None }; + let exclude_should_panic = matches.opt_present("exclude-should-panic"); + if !allow_unstable && exclude_should_panic { + return Some(Err( + "The \"exclude-should-panic\" flag is only accepted on the nightly compiler".into(), + )); + } + let include_ignored = matches.opt_present("include-ignored"); if !allow_unstable && include_ignored { return Some(Err( @@ -648,6 +658,7 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> { list, filter, filter_exact: exact, + exclude_should_panic, run_ignored, run_tests, bench_benchmarks, @@ -1365,6 +1376,11 @@ pub fn filter_tests(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> Vec<TestDescA // Skip tests that match any of the skip filters filtered.retain(|test| !opts.skip.iter().any(|sf| matches_filter(test, sf))); + // Excludes #[should_panic] tests + if opts.exclude_should_panic { + filtered.retain(|test| test.desc.should_panic == ShouldPanic::No); + } + // maybe unignore tests match opts.run_ignored { RunIgnored::Yes => { @@ -1984,6 +2000,29 @@ mod tests { } #[test] + pub fn exclude_should_panic_option() { + let mut opts = TestOpts::new(); + opts.run_tests = true; + opts.exclude_should_panic = true; + + let mut tests = one_ignored_one_unignored_test(); + tests.push(TestDescAndFn { + desc: TestDesc { + name: StaticTestName("3"), + ignore: false, + should_panic: ShouldPanic::Yes, + allow_fail: false, + }, + testfn: DynTestFn(Box::new(move || {})), + }); + + let filtered = filter_tests(&opts, tests); + + assert_eq!(filtered.len(), 2); + assert!(filtered.iter().all(|test| test.desc.should_panic == ShouldPanic::No)); + } + + #[test] pub fn exact_filter_match() { fn tests() -> Vec<TestDescAndFn> { vec!["base", "base::test", "base::test1", "base::test2"] |
