Skip to content

Commit 68b5964

Browse files
committed
refactor filter_tests
same behaviour, just shorter
1 parent 8f19cad commit 68b5964

File tree

1 file changed

+23
-43
lines changed

1 file changed

+23
-43
lines changed

src/libtest/lib.rs

+23-43
Original file line numberDiff line numberDiff line change
@@ -1305,54 +1305,34 @@ fn get_concurrency() -> usize {
13051305

13061306
pub fn filter_tests(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> Vec<TestDescAndFn> {
13071307
let mut filtered = tests;
1308-
// Remove tests that don't match the test filter
1309-
filtered = match opts.filter {
1310-
None => filtered,
1311-
Some(ref filter) => filtered
1312-
.into_iter()
1313-
.filter(|test| {
1314-
if opts.filter_exact {
1315-
test.desc.name.as_slice() == &filter[..]
1316-
} else {
1317-
test.desc.name.as_slice().contains(&filter[..])
1318-
}
1319-
})
1320-
.collect(),
1308+
let matches_filter = |test: &TestDescAndFn, filter: &str| {
1309+
let test_name = test.desc.name.as_slice();
1310+
1311+
match opts.filter_exact {
1312+
true => test_name == filter,
1313+
false => test_name.contains(filter),
1314+
}
13211315
};
13221316

1317+
// Remove tests that don't match the test filter
1318+
if let Some(ref filter) = opts.filter {
1319+
filtered.retain(|test| matches_filter(test, filter));
1320+
}
1321+
13231322
// Skip tests that match any of the skip filters
1324-
filtered = filtered
1325-
.into_iter()
1326-
.filter(|t| {
1327-
!opts.skip.iter().any(|sf| {
1328-
if opts.filter_exact {
1329-
t.desc.name.as_slice() == &sf[..]
1330-
} else {
1331-
t.desc.name.as_slice().contains(&sf[..])
1332-
}
1333-
})
1334-
})
1335-
.collect();
1323+
filtered.retain(|test| {
1324+
!opts.skip.iter().any(|sf| matches_filter(test, sf))
1325+
});
13361326

13371327
// Maybe pull out the ignored test and unignore them
1338-
filtered = if !opts.run_ignored {
1339-
filtered
1340-
} else {
1341-
fn filter(test: TestDescAndFn) -> Option<TestDescAndFn> {
1342-
if test.desc.ignore {
1343-
let TestDescAndFn { desc, testfn } = test;
1344-
Some(TestDescAndFn {
1345-
desc: TestDesc {
1346-
ignore: false,
1347-
..desc
1348-
},
1349-
testfn,
1350-
})
1351-
} else {
1352-
None
1353-
}
1354-
}
1355-
filtered.into_iter().filter_map(filter).collect()
1328+
if opts.run_ignored {
1329+
filtered = filtered.into_iter()
1330+
.filter(|test| test.desc.ignore)
1331+
.map(|mut test| {
1332+
test.desc.ignore = false;
1333+
test
1334+
})
1335+
.collect();
13561336
};
13571337

13581338
// Sort the tests alphabetically

0 commit comments

Comments
 (0)