use std::fmt;
use predicates::reflection::PredicateReflection;
use predicates::Predicate;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TrimmedLinesMatchPredicate {
pattern: String,
}
impl TrimmedLinesMatchPredicate {
pub fn new(pattern: impl Into<String>) -> Self {
Self {
pattern: pattern.into(),
}
}
}
impl fmt::Display for TrimmedLinesMatchPredicate {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "trimmed_lines expects {}", self.pattern)
}
}
impl Predicate<str> for TrimmedLinesMatchPredicate {
fn eval(&self, variable: &str) -> bool {
let mut expected = self.pattern.lines();
let mut actual = variable.lines();
loop {
match (expected.next(), actual.next()) {
(Some(expected), Some(actual)) => {
if expected.trim() != actual.trim() {
return false;
}
}
(None, None) => return true,
_ => return false,
}
}
}
}
impl PredicateReflection for TrimmedLinesMatchPredicate {}