cec: Add enum round-trip tests

This commit is contained in:
Vicki Pfau 2024-05-27 19:37:52 -07:00
parent 8769298416
commit 32d31e9d27

View file

@ -35,10 +35,10 @@ impl TryFrom<u32> for HdmiCecState {
impl FromStr for HdmiCecState { impl FromStr for HdmiCecState {
type Err = Error; type Err = Error;
fn from_str(input: &str) -> Result<HdmiCecState, Self::Err> { fn from_str(input: &str) -> Result<HdmiCecState, Self::Err> {
Ok(match input { Ok(match input.to_lowercase().as_str() {
"disable" | "disabled" | "off" => HdmiCecState::Disabled, "disable" | "disabled" | "off" => HdmiCecState::Disabled,
"control-only" | "ControlOnly" => HdmiCecState::ControlOnly, "control-only" | "controlonly" => HdmiCecState::ControlOnly,
"control-wake" | "control-and-wake" | "ControlAndWake" => HdmiCecState::ControlAndWake, "control-wake" | "control-and-wake" | "controlandwake" => HdmiCecState::ControlAndWake,
v => bail!("No enum match for value {v}"), v => bail!("No enum match for value {v}"),
}) })
} }
@ -123,3 +123,40 @@ impl<'dbus> HdmiCecControl<'dbus> {
Ok(()) 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());
}
}