summaryrefslogtreecommitdiff
path: root/tests/src/collect.rs
diff options
context:
space:
mode:
authorLeedehai <18319900+Leedehai@users.noreply.github.com>2024-04-18 08:20:42 -0400
committerGitHub <noreply@github.com>2024-04-18 12:20:42 +0000
commit1b091d628da58107134a5b4e04ec063e3c0be705 (patch)
treef1488776ec86e761a71de5b98fedfb5c68093913 /tests/src/collect.rs
parentc5c73ec9315b8148e851693ffa279c75a97982d3 (diff)
Enhance the test runner: regex, --list, --path (#3945)
Diffstat (limited to 'tests/src/collect.rs')
-rw-r--r--tests/src/collect.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/tests/src/collect.rs b/tests/src/collect.rs
index 44a325f2..ee4f9db9 100644
--- a/tests/src/collect.rs
+++ b/tests/src/collect.rs
@@ -257,7 +257,7 @@ impl<'a> Parser<'a> {
self.collector.large.insert(name.clone());
}
- if !filtered(&name) {
+ if !selected(&name, self.path.canonicalize().unwrap()) {
self.collector.skipped += 1;
continue;
}
@@ -383,14 +383,23 @@ impl<'a> Parser<'a> {
}
}
-/// Whether a test is within the filtered set.
-fn filtered(name: &str) -> bool {
+/// Whether a test is within the selected set to run.
+fn selected(name: &str, abs: PathBuf) -> bool {
+ let paths = &crate::ARGS.path;
+ if !paths.is_empty() && !paths.iter().any(|path| abs.starts_with(path)) {
+ return false;
+ }
+
let exact = crate::ARGS.exact;
- let filter = &crate::ARGS.filter;
- filter.is_empty()
- || filter
- .iter()
- .any(|v| if exact { name == v } else { name.contains(v) })
+ let patterns = &crate::ARGS.pattern;
+ patterns.is_empty()
+ || patterns.iter().any(|pattern: &regex::Regex| {
+ if exact {
+ name == pattern.as_str()
+ } else {
+ pattern.is_match(name)
+ }
+ })
}
/// An error in a test file.