From 32d31e9d2761e5706dbd96c6839783428407c8f4 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 27 May 2024 19:37:52 -0700 Subject: [PATCH] cec: Add enum round-trip tests --- src/cec.rs | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/cec.rs b/src/cec.rs index 1637fba..84b2635 100644 --- a/src/cec.rs +++ b/src/cec.rs @@ -35,10 +35,10 @@ impl TryFrom for HdmiCecState { impl FromStr for HdmiCecState { type Err = Error; fn from_str(input: &str) -> Result { - Ok(match input { + Ok(match input.to_lowercase().as_str() { "disable" | "disabled" | "off" => HdmiCecState::Disabled, - "control-only" | "ControlOnly" => HdmiCecState::ControlOnly, - "control-wake" | "control-and-wake" | "ControlAndWake" => HdmiCecState::ControlAndWake, + "control-only" | "controlonly" => HdmiCecState::ControlOnly, + "control-wake" | "control-and-wake" | "controlandwake" => HdmiCecState::ControlAndWake, v => bail!("No enum match for value {v}"), }) } @@ -123,3 +123,40 @@ impl<'dbus> HdmiCecControl<'dbus> { Ok(()) } } + +#[cfg(test)] +mod test { + use super::*; + use crate::enum_roundtrip; + + #[test] + fn hdmi_cec_state_roundtrip() { + enum_roundtrip!(HdmiCecState { + 0: u32 = Disabled, + 1: u32 = ControlOnly, + 2: u32 = ControlAndWake, + "Disabled": str = Disabled, + "ControlOnly": str = ControlOnly, + "ControlAndWake": str = ControlAndWake, + }); + assert_eq!( + HdmiCecState::from_str("control-only").unwrap(), + HdmiCecState::ControlOnly + ); + assert_eq!( + HdmiCecState::from_str("control-and-wake").unwrap(), + HdmiCecState::ControlAndWake + ); + assert_eq!(HdmiCecState::Disabled.to_human_readable(), "disabled"); + assert_eq!( + HdmiCecState::ControlOnly.to_human_readable(), + "control-only" + ); + assert_eq!( + HdmiCecState::ControlAndWake.to_human_readable(), + "control-and-wake" + ); + assert!(HdmiCecState::try_from(3).is_err()); + assert!(HdmiCecState::from_str("working").is_err()); + } +}