use log::info;
use super::Action;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Lower {}
impl Action for Lower {
fn act(&self, input: &str) -> String {
info!("Lowercasing: '{input}'");
input.to_lowercase()
}
}
#[cfg(test)]
mod tests {
use rstest::rstest;
use super::*;
#[rstest]
#[case("A", "a")]
#[case("a", "a")]
#[case("Ä", "ä")]
#[case("ä", "ä")]
#[case("Ö", "ö")]
#[case("ö", "ö")]
#[case("Ü", "ü")]
#[case("ü", "ü")]
#[case("ẞ", "ß")]
#[case("ß", "ß")]
#[case("AaÄäÖöÜüẞß!", "aaääööüüßß!")]
#[case("SS", "ss")]
#[case("你好!", "你好!")]
#[case("こんにちは!", "こんにちは!")]
#[case("안녕하세요!", "안녕하세요!")]
#[case("ПРИВЕТ!", "привет!")]
#[case("👋\0", "👋\0")]
fn substitute(#[case] input: &str, #[case] expected: &str) {
assert_eq!(Lower {}.act(input), expected);
}
}