#[derive(Debug, Clone)]
pub enum Verification {
FileContains(String),
FileEquals(String),
}
impl Verification {
pub fn check(&self, contents: &str) -> bool {
match self {
Verification::FileContains(needle) => contents.contains(needle),
Verification::FileEquals(expected) => contents == expected,
}
}
pub fn describe(&self) -> String {
match self {
Verification::FileContains(needle) => {
format!("the file must contain exactly this text: {needle:?}")
}
Verification::FileEquals(expected) => {
format!("the file's entire contents must equal exactly: {expected:?}")
}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn contains_passes_and_fails() {
let v = Verification::FileContains("fn hello".into());
assert!(v.check("pub fn hello() {}"));
assert!(!v.check("pub fn world() {}"));
}
#[test]
fn equals_is_exact() {
let v = Verification::FileEquals("a".into());
assert!(v.check("a"));
assert!(!v.check("a "));
}
}