Create a unit test for the parse_aaamode_from_str and fix the shuffle parse

This commit is contained in:
Anas Elgarhy 2023-02-11 02:58:00 +02:00
parent 94ea4eefae
commit 6856fe947a
No known key found for this signature in database
GPG key ID: 0501802A1D496528

View file

@ -5,11 +5,19 @@ use crate::cmus::CmusError;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct PlayerSettings { pub struct PlayerSettings {
pub repeat: bool, pub repeat: bool,
pub shuffle: bool, pub shuffle: Shuffle,
pub aa_mode: AAAMode, pub aa_mode: AAAMode,
pub volume: Volume, pub volume: Volume,
} }
#[derive(Debug, PartialEq, Default)]
pub enum Shuffle {
#[default]
Off,
Tracks,
Albums,
}
#[derive(Debug, PartialEq, Default)] #[derive(Debug, PartialEq, Default)]
pub struct Volume { pub struct Volume {
pub left: u8, pub left: u8,
@ -18,11 +26,10 @@ pub struct Volume {
#[derive(Debug, PartialEq, Default)] #[derive(Debug, PartialEq, Default)]
pub enum AAAMode { pub enum AAAMode {
#[default]
All, All,
Album, Album,
Artist, Artist,
#[default]
None,
} }
impl FromStr for AAAMode { impl FromStr for AAAMode {
@ -33,29 +40,41 @@ impl FromStr for AAAMode {
"all" => Ok(Self::All), "all" => Ok(Self::All),
"album" => Ok(Self::Album), "album" => Ok(Self::Album),
"artist" => Ok(Self::Artist), "artist" => Ok(Self::Artist),
"none" => Ok(Self::None),
_ => Err(CmusError::UnknownAAAMode(s.to_string())) _ => Err(CmusError::UnknownAAAMode(s.to_string()))
} }
} }
} }
impl FromStr for Shuffle {
type Err = CmusError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"off" => Ok(Self::Off),
"tracks" => Ok(Self::Tracks),
"albums" => Ok(Self::Albums),
_ => Err(CmusError::UnknownShuffleMode(s.to_string()))
}
}
}
impl FromStr for PlayerSettings { impl FromStr for PlayerSettings {
type Err = CmusError; type Err = CmusError;
fn from_str(s: &str) -> Result<Self, Self::Err> { fn from_str(s: &str) -> Result<Self, Self::Err> {
let mut repeat = false; let mut repeat = false;
let mut shuffle = false; let mut shuffle = Shuffle::default();
let mut aa_mode = AAAMode::default(); let mut aa_mode = AAAMode::default();
let mut volume = Volume::default(); let mut volume = Volume::default();
for line in s.lines() { for line in s.lines() {
if line.starts_with("set ") { if line.starts_with("set ") {
let line = &line[4..]; let line = &line[4..];
let (key, value) = line.split_once(" ").ok_or("Corrupted cmus response")?; let (key, value) = line.split_once(" ").ok_or(CmusError::UnknownError("Corrupted cmus response".to_string()))?;
match key { match key {
"repeat" => repeat = value == "true", "repeat" => repeat = value == "true",
"shuffle" => shuffle = value == "true", "shuffle" => shuffle = Shuffle::from_str(value)?,
"aa_mode" => aa_mode = AAAMode::from_str(value)?, "aa_mode" => aa_mode = AAAMode::from_str(value)?,
"vol_left" => volume.left = value.parse().map_err(|e: ParseIntError| CmusError::UnknownError(e.to_string()))?, "vol_left" => volume.left = value.parse().map_err(|e: ParseIntError| CmusError::UnknownError(e.to_string()))?,
"vol_right" => volume.right = value.parse().map_err(|e: ParseIntError| CmusError::UnknownError(e.to_string()))?, "vol_right" => volume.right = value.parse().map_err(|e: ParseIntError| CmusError::UnknownError(e.to_string()))?,
@ -72,3 +91,26 @@ impl FromStr for PlayerSettings {
}) })
} }
} }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_aaamode_from_str() {
let all = AAAMode::from_str("all");
let album = AAAMode::from_str("album");
let artist = AAAMode::from_str("artist");
let unknown = AAAMode::from_str("unknown");
assert_eq!(all, Ok(AAAMode::All));
assert_eq!(album, Ok(AAAMode::Album));
assert_eq!(artist, Ok(AAAMode::Artist));
assert_eq!(unknown, Err(CmusError::UnknownAAAMode("unknown".to_string())));
}
#[test]
fn test_parse_player_settings_from_str() {
}
}