From 8814bc53e3392e085279ac94b43f4242452241f2 Mon Sep 17 00:00:00 2001 From: Clement Tsang <34804052+ClementTsang@users.noreply.github.com> Date: Mon, 3 Apr 2023 01:47:57 -0400 Subject: [PATCH] other: add test for multiple regexes in filter (#1082) --- src/app/filter.rs | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/app/filter.rs b/src/app/filter.rs index b9695268..10629d94 100644 --- a/src/app/filter.rs +++ b/src/app/filter.rs @@ -9,11 +9,13 @@ impl Filter { /// Whether the filter should keep the entry or reject it. #[inline] pub(crate) fn keep_entry(&self, value: &str) -> bool { - self.list - .iter() - .find(|regex| regex.is_match(value)) - .map(|_| !self.is_list_ignored) - .unwrap_or(self.is_list_ignored) + if self.list.iter().any(|regex| regex.is_match(value)) { + // If a match is found, then if we wanted to ignore if we match, return false. If we want + // to keep if we match, return true. Thus, return the inverse of `is_list_ignored`. + !self.is_list_ignored + } else { + self.is_list_ignored + } } } @@ -58,5 +60,37 @@ mod test { .collect::>(), vec!["CPU socket temperature", "motherboard temperature"] ); + + let multi_true = Filter { + is_list_ignored: true, + list: vec![ + Regex::new("socket").unwrap(), + Regex::new("temperature").unwrap(), + ], + }; + + assert_eq!( + results + .into_iter() + .filter(|r| multi_true.keep_entry(r)) + .collect::>(), + vec!["wifi_0", "amd gpu"] + ); + + let multi_false = Filter { + is_list_ignored: false, + list: vec![ + Regex::new("socket").unwrap(), + Regex::new("temperature").unwrap(), + ], + }; + + assert_eq!( + results + .into_iter() + .filter(|r| multi_false.keep_entry(r)) + .collect::>(), + vec!["CPU socket temperature", "motherboard temperature"] + ); } }