use std::path::PathBuf;
use crate::domain::DriveInfo;
use iced::Theme;
#[derive(Debug, Clone)]
pub enum Message {
SelectImageClicked,
RefreshDrivesClicked,
UsbHotplugDetected,
TargetDriveClicked(DriveInfo),
OpenDeviceSelection,
CloseDeviceSelection,
FlashClicked,
EscalateAndFlash,
ResetClicked,
CancelClicked,
CancelFlash,
AnimationTick,
ImageSelected(Option<PathBuf>),
DrivesRefreshed(Vec<DriveInfo>),
FlashProgressUpdate(f32, u64, f32),
VerifyProgressUpdate(f32, &'static str, u64, u64, f32),
Status(String),
FlashCompleted(Result<(), String>),
ThemeChanged(Theme),
}
#[cfg(test)]
mod tests {
use super::*;
use std::path::PathBuf;
#[test]
fn message_implements_debug() {
let msg = Message::SelectImageClicked;
let debug_str = format!("{:?}", msg);
assert!(!debug_str.is_empty());
}
#[test]
fn message_implements_clone() {
let msg = Message::AnimationTick;
let cloned = msg.clone();
assert_eq!(format!("{:?}", msg), format!("{:?}", cloned));
}
#[test]
fn select_image_clicked_can_be_constructed() {
let _msg = Message::SelectImageClicked;
}
#[test]
fn animation_tick_can_be_constructed() {
let _msg = Message::AnimationTick;
}
#[test]
fn flash_progress_update_holds_values() {
let msg = Message::FlashProgressUpdate(0.5, 1024, 10.0);
match msg {
Message::FlashProgressUpdate(progress, bytes, speed) => {
assert!((progress - 0.5).abs() < f32::EPSILON);
assert_eq!(bytes, 1024);
assert!((speed - 10.0).abs() < f32::EPSILON);
}
_ => panic!("wrong variant"),
}
}
#[test]
fn flash_completed_ok() {
let msg = Message::FlashCompleted(Ok(()));
match msg {
Message::FlashCompleted(Ok(())) => {} _ => panic!("expected FlashCompleted(Ok(()))"),
}
}
#[test]
fn flash_completed_err() {
let msg = Message::FlashCompleted(Err("test".into()));
match msg {
Message::FlashCompleted(Err(e)) => assert_eq!(e, "test"),
_ => panic!("expected FlashCompleted(Err(..))"),
}
}
#[test]
fn status_holds_string() {
let msg = Message::Status("test".into());
match msg {
Message::Status(s) => assert_eq!(s, "test"),
_ => panic!("expected Status"),
}
}
#[test]
fn theme_changed_holds_theme() {
let msg = Message::ThemeChanged(Theme::Light);
match msg {
Message::ThemeChanged(t) => {
let _ = format!("{:?}", t);
}
_ => panic!("expected ThemeChanged"),
}
}
#[test]
fn image_selected_none() {
let msg = Message::ImageSelected(None);
match msg {
Message::ImageSelected(None) => {} _ => panic!("expected ImageSelected(None)"),
}
}
#[test]
fn image_selected_some_path() {
let msg = Message::ImageSelected(Some(PathBuf::from("/test")));
match msg {
Message::ImageSelected(Some(p)) => assert_eq!(p, PathBuf::from("/test")),
_ => panic!("expected ImageSelected(Some(..))"),
}
}
}