1#[cfg(test)]
2use googletest::prelude::*;
3
4pub(crate) fn matches_ignore(rel: &str, patterns: &[impl AsRef<str>]) -> bool {
6 patterns
7 .iter()
8 .any(|pat| glob_match::glob_match(pat.as_ref(), rel))
9}
10
11#[cfg(test)]
12mod tests {
13 use super::*;
14
15 #[gtest]
16 fn literal_path() -> Result<()> {
17 verify_true!(matches_ignore(
18 "crates/common/src/parsers/dbc/rows.rs",
19 &["crates/common/src/parsers/dbc/rows.rs"]
20 ))?;
21
22 Ok(())
23 }
24
25 #[gtest]
26 fn double_star_prefix() -> Result<()> {
27 verify_true!(matches_ignore("crates/cli/src/main.rs", &["**/main.rs"]))?;
28 verify_true!(matches_ignore("main.rs", &["**/main.rs"]))?;
29
30 Ok(())
31 }
32
33 #[gtest]
34 fn double_star_suffix() -> Result<()> {
35 verify_true!(matches_ignore(
36 "crates/cli/src/commands/foo.rs",
37 &["crates/cli/**"]
38 ))?;
39 verify_false!(matches_ignore(
40 "crates/common/src/lib.rs",
41 &["crates/cli/**"]
42 ))?;
43
44 Ok(())
45 }
46
47 #[gtest]
48 fn star_extension() -> Result<()> {
49 verify_true!(matches_ignore("crates/engine/build.rs", &["**/build.rs"]))?;
50
51 Ok(())
52 }
53
54 #[gtest]
55 fn no_match() -> Result<()> {
56 verify_false!(matches_ignore("crates/engine/src/lib.rs", &["**/main.rs"]))?;
57
58 Ok(())
59 }
60
61 #[gtest]
62 fn empty_patterns() -> Result<()> {
63 let empty: &[&str] = &[];
64
65 verify_false!(matches_ignore("anything.rs", empty))?;
66
67 Ok(())
68 }
69
70 #[gtest]
71 fn mixed_patterns() -> Result<()> {
72 let patterns = &["**/main.rs", "crates/cli/**", "**/build.rs"];
73
74 verify_true!(matches_ignore("crates/sentinel/src/main.rs", patterns))?;
75 verify_true!(matches_ignore("crates/cli/src/commands/foo.rs", patterns))?;
76 verify_true!(matches_ignore("crates/engine/build.rs", patterns))?;
77 verify_false!(matches_ignore("crates/engine/src/lib.rs", patterns))?;
78
79 Ok(())
80 }
81
82 #[gtest]
83 fn string_vec_patterns() -> Result<()> {
84 let patterns = vec!["**/main.rs".to_string(), "crates/cli/**".to_string()];
85
86 verify_true!(matches_ignore("crates/cli/src/main.rs", &patterns))?;
87 verify_false!(matches_ignore("crates/engine/src/lib.rs", &patterns))?;
88
89 Ok(())
90 }
91}