mirror of
https://gitlab.steamos.cloud/holo/steamos-manager.git
synced 2025-07-12 01:12:30 -04:00
wifi: Add enum round-trip tests
This commit is contained in:
parent
b7b09e6c17
commit
89a757b7fc
2 changed files with 73 additions and 3 deletions
|
@ -9,6 +9,38 @@ thread_local! {
|
||||||
static TEST: RefCell<Option<Rc<Test>>> = RefCell::new(None);
|
static TEST: RefCell<Option<Rc<Test>>> = RefCell::new(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! enum_roundtrip {
|
||||||
|
($enum:ident => $value:literal : str = $variant:ident) => {
|
||||||
|
assert_eq!($enum::$variant.to_string(), $value);
|
||||||
|
assert_eq!($enum::from_str($value).unwrap(), $enum::$variant);
|
||||||
|
};
|
||||||
|
($enum:ident => $value:literal : $ty:ty = $variant:ident) => {
|
||||||
|
assert_eq!($enum::$variant as $ty, $value);
|
||||||
|
assert_eq!($enum::try_from($value), Ok($enum::$variant));
|
||||||
|
};
|
||||||
|
|
||||||
|
($enum:ident { $($value:literal : $ty:ident = $variant:ident,)+ }) => {
|
||||||
|
$(enum_roundtrip!($enum => $value : $ty = $variant);)+
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! enum_on_off {
|
||||||
|
($enum:ident => ($on:ident, $off:ident)) => {
|
||||||
|
assert_eq!($enum::from_str("on").unwrap(), $enum::$on);
|
||||||
|
assert_eq!($enum::from_str("On").unwrap(), $enum::$on);
|
||||||
|
assert_eq!($enum::from_str("enable").unwrap(), $enum::$on);
|
||||||
|
assert_eq!($enum::from_str("enabled").unwrap(), $enum::$on);
|
||||||
|
assert_eq!($enum::from_str("1").unwrap(), $enum::$on);
|
||||||
|
assert_eq!($enum::from_str("off").unwrap(), $enum::$off);
|
||||||
|
assert_eq!($enum::from_str("Off").unwrap(), $enum::$off);
|
||||||
|
assert_eq!($enum::from_str("disable").unwrap(), $enum::$off);
|
||||||
|
assert_eq!($enum::from_str("disabled").unwrap(), $enum::$off);
|
||||||
|
assert_eq!($enum::from_str("0").unwrap(), $enum::$off);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn start() -> TestHandle {
|
pub fn start() -> TestHandle {
|
||||||
TEST.with(|lock| {
|
TEST.with(|lock| {
|
||||||
assert!(lock.borrow().as_ref().is_none());
|
assert!(lock.borrow().as_ref().is_none());
|
||||||
|
|
44
src/wifi.rs
44
src/wifi.rs
|
@ -67,7 +67,7 @@ impl TryFrom<u32> for WifiDebugMode {
|
||||||
impl FromStr for WifiDebugMode {
|
impl FromStr for WifiDebugMode {
|
||||||
type Err = Error;
|
type Err = Error;
|
||||||
fn from_str(input: &str) -> Result<WifiDebugMode, Self::Err> {
|
fn from_str(input: &str) -> Result<WifiDebugMode, Self::Err> {
|
||||||
Ok(match input {
|
Ok(match input.to_lowercase().as_str() {
|
||||||
"enable" | "enabled" | "on" | "1" => WifiDebugMode::On,
|
"enable" | "enabled" | "on" | "1" => WifiDebugMode::On,
|
||||||
"disable" | "disabled" | "off" | "0" => WifiDebugMode::Off,
|
"disable" | "disabled" | "off" | "0" => WifiDebugMode::Off,
|
||||||
v => bail!("No enum match for value {v}"),
|
v => bail!("No enum match for value {v}"),
|
||||||
|
@ -98,7 +98,7 @@ impl TryFrom<u32> for WifiPowerManagement {
|
||||||
impl FromStr for WifiPowerManagement {
|
impl FromStr for WifiPowerManagement {
|
||||||
type Err = Error;
|
type Err = Error;
|
||||||
fn from_str(input: &str) -> Result<WifiPowerManagement, Self::Err> {
|
fn from_str(input: &str) -> Result<WifiPowerManagement, Self::Err> {
|
||||||
Ok(match input {
|
Ok(match input.to_lowercase().as_str() {
|
||||||
"enable" | "enabled" | "on" | "1" => WifiPowerManagement::Enabled,
|
"enable" | "enabled" | "on" | "1" => WifiPowerManagement::Enabled,
|
||||||
"disable" | "disabled" | "off" | "0" => WifiPowerManagement::Disabled,
|
"disable" | "disabled" | "off" | "0" => WifiPowerManagement::Disabled,
|
||||||
v => bail!("No enum match for value {v}"),
|
v => bail!("No enum match for value {v}"),
|
||||||
|
@ -292,7 +292,7 @@ pub(crate) async fn set_wifi_power_management_state(state: WifiPowerManagement)
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::testing;
|
use crate::{enum_on_off, enum_roundtrip, testing};
|
||||||
use tokio::fs::{create_dir_all, read_to_string, remove_dir, try_exists, write};
|
use tokio::fs::{create_dir_all, read_to_string, remove_dir, try_exists, write};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -379,4 +379,42 @@ mod test {
|
||||||
WifiBackend::WPASupplicant
|
WifiBackend::WPASupplicant
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn wifi_debug_mode_roundtrip() {
|
||||||
|
enum_roundtrip!(WifiDebugMode {
|
||||||
|
0: u32 = Off,
|
||||||
|
1: u32 = On,
|
||||||
|
"Off": str = Off,
|
||||||
|
"On": str = On,
|
||||||
|
});
|
||||||
|
enum_on_off!(WifiDebugMode => (On, Off));
|
||||||
|
assert!(WifiDebugMode::try_from(2).is_err());
|
||||||
|
assert!(WifiDebugMode::from_str("onf").is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn wifi_power_management_roundtrip() {
|
||||||
|
enum_roundtrip!(WifiPowerManagement {
|
||||||
|
0: u32 = Disabled,
|
||||||
|
1: u32 = Enabled,
|
||||||
|
"Disabled": str = Disabled,
|
||||||
|
"Enabled": str = Enabled,
|
||||||
|
});
|
||||||
|
enum_on_off!(WifiPowerManagement => (Enabled, Disabled));
|
||||||
|
assert!(WifiPowerManagement::try_from(2).is_err());
|
||||||
|
assert!(WifiPowerManagement::from_str("onf").is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn wifi_backend_roundtrip() {
|
||||||
|
enum_roundtrip!(WifiBackend {
|
||||||
|
0: u32 = Iwd,
|
||||||
|
1: u32 = WPASupplicant,
|
||||||
|
"iwd": str = Iwd,
|
||||||
|
"wpa_supplicant": str = WPASupplicant,
|
||||||
|
});
|
||||||
|
assert!(WifiBackend::try_from(2).is_err());
|
||||||
|
assert!(WifiBackend::from_str("iwl").is_err());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue