Skip to content

Commit 435b0ab

Browse files
committed
refactor filter_tests
same behaviour, just shorter
1 parent f28f648 commit 435b0ab

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
@@ -1296,54 +1296,34 @@ fn get_concurrency() -> usize {
12961296

12971297
pub fn filter_tests(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> Vec<TestDescAndFn> {
12981298
let mut filtered = tests;
1299-
// Remove tests that don't match the test filter
1300-
filtered = match opts.filter {
1301-
None => filtered,
1302-
Some(ref filter) => filtered
1303-
.into_iter()
1304-
.filter(|test| {
1305-
if opts.filter_exact {
1306-
test.desc.name.as_slice() == &filter[..]
1307-
} else {
1308-
test.desc.name.as_slice().contains(&filter[..])
1309-
}
1310-
})
1311-
.collect(),
1299+
let matches_filter = |test: &TestDescAndFn, filter: &str| {
1300+
let test_name = test.desc.name.as_slice();
1301+
1302+
match opts.filter_exact {
1303+
true => test_name == filter,
1304+
false => test_name.contains(filter),
1305+
}
13121306
};
13131307

1308+
// Remove tests that don't match the test filter
1309+
if let Some(ref filter) = opts.filter {
1310+
filtered.retain(|test| matches_filter(test, filter));
1311+
}
1312+
13141313
// Skip tests that match any of the skip filters
1315-
filtered = filtered
1316-
.into_iter()
1317-
.filter(|t| {
1318-
!opts.skip.iter().any(|sf| {
1319-
if opts.filter_exact {
1320-
t.desc.name.as_slice() == &sf[..]
1321-
} else {
1322-
t.desc.name.as_slice().contains(&sf[..])
1323-
}
1324-
})
1325-
})
1326-
.collect();
1314+
filtered.retain(|test| {
1315+
!opts.skip.iter().any(|sf| matches_filter(test, sf))
1316+
});
13271317

13281318
// Maybe pull out the ignored test and unignore them
1329-
filtered = if !opts.run_ignored {
1330-
filtered
1331-
} else {
1332-
fn filter(test: TestDescAndFn) -> Option<TestDescAndFn> {
1333-
if test.desc.ignore {
1334-
let TestDescAndFn { desc, testfn } = test;
1335-
Some(TestDescAndFn {
1336-
desc: TestDesc {
1337-
ignore: false,
1338-
..desc
1339-
},
1340-
testfn,
1341-
})
1342-
} else {
1343-
None
1344-
}
1345-
}
1346-
filtered.into_iter().filter_map(filter).collect()
1319+
if opts.run_ignored {
1320+
filtered = filtered.into_iter()
1321+
.filter(|test| test.desc.ignore)
1322+
.map(|mut test| {
1323+
test.desc.ignore = false;
1324+
test
1325+
})
1326+
.collect();
13471327
};
13481328

13491329
// Sort the tests alphabetically

0 commit comments

Comments
 (0)