diff options
| author | Emerentius <emerentius@arcor.de> | 2018-08-20 13:26:57 +0200 |
|---|---|---|
| committer | Emerentius <emerentius@arcor.de> | 2018-08-20 18:29:44 +0200 |
| commit | 435b0abd49f3b0146b7c8710a26411be88d4a844 (patch) | |
| tree | 4b9b1dec499d8b86e3d1b5f53de6379ab3136eb5 | |
| parent | f28f648a9699db67b86735f97d609c3dd06f9ded (diff) | |
| download | rust-435b0abd49f3b0146b7c8710a26411be88d4a844.tar.gz rust-435b0abd49f3b0146b7c8710a26411be88d4a844.zip | |
refactor filter_tests
same behaviour, just shorter
| -rw-r--r-- | src/libtest/lib.rs | 66 |
1 files changed, 23 insertions, 43 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index 060ea1ea9b1..5a0663f776b 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -1296,54 +1296,34 @@ fn get_concurrency() -> usize { pub fn filter_tests(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> Vec<TestDescAndFn> { let mut filtered = tests; - // Remove tests that don't match the test filter - filtered = match opts.filter { - None => filtered, - Some(ref filter) => filtered - .into_iter() - .filter(|test| { - if opts.filter_exact { - test.desc.name.as_slice() == &filter[..] - } else { - test.desc.name.as_slice().contains(&filter[..]) - } - }) - .collect(), + let matches_filter = |test: &TestDescAndFn, filter: &str| { + let test_name = test.desc.name.as_slice(); + + match opts.filter_exact { + true => test_name == filter, + false => test_name.contains(filter), + } }; + // Remove tests that don't match the test filter + if let Some(ref filter) = opts.filter { + filtered.retain(|test| matches_filter(test, filter)); + } + // Skip tests that match any of the skip filters - filtered = filtered - .into_iter() - .filter(|t| { - !opts.skip.iter().any(|sf| { - if opts.filter_exact { - t.desc.name.as_slice() == &sf[..] - } else { - t.desc.name.as_slice().contains(&sf[..]) - } - }) - }) - .collect(); + filtered.retain(|test| { + !opts.skip.iter().any(|sf| matches_filter(test, sf)) + }); // Maybe pull out the ignored test and unignore them - filtered = if !opts.run_ignored { - filtered - } else { - fn filter(test: TestDescAndFn) -> Option<TestDescAndFn> { - if test.desc.ignore { - let TestDescAndFn { desc, testfn } = test; - Some(TestDescAndFn { - desc: TestDesc { - ignore: false, - ..desc - }, - testfn, - }) - } else { - None - } - } - filtered.into_iter().filter_map(filter).collect() + if opts.run_ignored { + filtered = filtered.into_iter() + .filter(|test| test.desc.ignore) + .map(|mut test| { + test.desc.ignore = false; + test + }) + .collect(); }; // Sort the tests alphabetically |
