diff options
author | memoryruins <memoryruinsmusic@gmail.com> | 2019-02-23 21:07:04 -0500 |
---|---|---|
committer | memoryruins <memoryruinsmusic@gmail.com> | 2019-02-23 21:07:04 -0500 |
commit | 5d1f100988c12dabf5a34854e9db6875b999e357 (patch) | |
tree | 998e3a2cbcdd3b8e74372240a9c330dd42da0001 /src/libtest | |
parent | aadbc459bd97a0325897e2ff94999efbec6a499c (diff) | |
download | rust-5d1f100988c12dabf5a34854e9db6875b999e357.tar.gz |
Add unstable option to ignore should_panic tests.
Diffstat (limited to 'src/libtest')
-rw-r--r-- | src/libtest/lib.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index 5c7fb1b8044..a712d409230 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", "Sets #[should_panic] tests to imply #[ignore]") .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,14 @@ 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))); + // Set #[should_panic] tests to ignore + if opts.exclude_should_panic { + filtered + .iter_mut() + .filter(|test| test.desc.should_panic != ShouldPanic::No) + .for_each(|test| test.desc.ignore = true); + } + // maybe unignore tests match opts.run_ignored { RunIgnored::Yes => { @@ -1984,6 +2003,32 @@ 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::YesWithMessage("should panic with message"), + allow_fail: false, + }, + testfn: DynTestFn(Box::new(move || {})), + }); + + let filtered = filter_tests(&opts, tests); + + assert_eq!(filtered.len(), 3); + assert!(filtered[0].desc.ignore); + assert!(!filtered[1].desc.ignore); + assert!(filtered[2].desc.ignore); + } + + #[test] pub fn exact_filter_match() { fn tests() -> Vec<TestDescAndFn> { vec!["base", "base::test", "base::test1", "base::test2"] |