use super::*;
#[test]
fn test_parse_size_with_suffix_memory() {
assert_eq!(parse_size_with_suffix("8192", "MB"), Some(8192));
assert_eq!(parse_size_with_suffix("2048", "MB"), Some(2048));
assert_eq!(parse_size_with_suffix("8GB", "MB"), Some(8192));
assert_eq!(parse_size_with_suffix("8gb", "MB"), Some(8192)); assert_eq!(parse_size_with_suffix("32GB", "MB"), Some(32768));
assert_eq!(parse_size_with_suffix("96GB", "MB"), Some(98304)); assert_eq!(parse_size_with_suffix("1024GB", "MB"), Some(1048576));
assert_eq!(parse_size_with_suffix("8192MB", "MB"), Some(8192));
assert_eq!(parse_size_with_suffix("8388608KB", "MB"), Some(8192));
assert_eq!(parse_size_with_suffix(" 8192 ", "MB"), Some(8192));
assert_eq!(parse_size_with_suffix("8 GB", "MB"), Some(8192));
}
#[test]
fn test_parse_size_with_suffix_disk() {
assert_eq!(parse_size_with_suffix("500", "GB"), Some(500));
assert_eq!(parse_size_with_suffix("100", "GB"), Some(100));
assert_eq!(parse_size_with_suffix("500GB", "GB"), Some(500));
assert_eq!(parse_size_with_suffix("500gb", "GB"), Some(500));
assert_eq!(parse_size_with_suffix("512000MB", "GB"), Some(500));
assert_eq!(parse_size_with_suffix("1024MB", "GB"), Some(1));
}
#[test]
fn test_parse_size_with_suffix_invalid() {
assert_eq!(parse_size_with_suffix("", "MB"), None);
assert_eq!(parse_size_with_suffix("abc", "MB"), None);
assert_eq!(parse_size_with_suffix("GB", "MB"), None);
assert_eq!(parse_size_with_suffix("-100", "MB"), None);
}
fn cfg_with(network: &str, backend: &str) -> WizardQemuConfig {
WizardQemuConfig {
network_model: network.to_string(),
network_backend: backend.to_string(),
..Default::default()
}
}
#[test]
fn is_visible_network_none_hides_all_network_subfields() {
let cfg = cfg_with("none", "user");
assert!(!QemuField::NetBackend.is_visible(&cfg));
assert!(!QemuField::BridgeName.is_visible(&cfg));
assert!(!QemuField::PortForwards.is_visible(&cfg));
assert!(!QemuField::MacAddress.is_visible(&cfg));
assert!(QemuField::Memory.is_visible(&cfg));
assert!(QemuField::Network.is_visible(&cfg));
assert!(QemuField::DiskInterface.is_visible(&cfg));
assert!(QemuField::RtcLocal.is_visible(&cfg));
}
#[test]
fn is_visible_user_backend_hides_bridge_keeps_forwards_and_mac() {
let cfg = cfg_with("virtio", "user");
assert!(QemuField::NetBackend.is_visible(&cfg));
assert!(!QemuField::BridgeName.is_visible(&cfg));
assert!(QemuField::PortForwards.is_visible(&cfg));
assert!(QemuField::MacAddress.is_visible(&cfg));
}
#[test]
fn is_visible_bridge_backend_hides_forwards_keeps_bridge_and_mac() {
let cfg = cfg_with("virtio", "bridge");
assert!(QemuField::NetBackend.is_visible(&cfg));
assert!(QemuField::BridgeName.is_visible(&cfg));
assert!(!QemuField::PortForwards.is_visible(&cfg));
assert!(QemuField::MacAddress.is_visible(&cfg));
}
#[test]
fn is_visible_passt_backend_hides_bridge_keeps_forwards() {
let cfg = cfg_with("virtio", "passt");
assert!(QemuField::NetBackend.is_visible(&cfg));
assert!(!QemuField::BridgeName.is_visible(&cfg));
assert!(QemuField::PortForwards.is_visible(&cfg));
assert!(QemuField::MacAddress.is_visible(&cfg));
}
#[test]
fn next_visible_field_skips_hidden_when_network_none() {
let cfg = cfg_with("none", "user");
assert_eq!(next_visible_field(4, &cfg, 1), 9, "Down from Network");
assert_eq!(next_visible_field(9, &cfg, -1), 4, "Up from DiskInterface");
}
#[test]
fn next_visible_field_skips_bridge_with_user_backend() {
let cfg = cfg_with("virtio", "user");
assert_eq!(next_visible_field(5, &cfg, 1), 7);
assert_eq!(next_visible_field(7, &cfg, -1), 5);
}
#[test]
fn next_visible_field_skips_forwards_with_bridge_backend() {
let cfg = cfg_with("virtio", "bridge");
assert_eq!(next_visible_field(6, &cfg, 1), 8);
assert_eq!(next_visible_field(8, &cfg, -1), 6);
}
#[test]
fn next_visible_field_stays_put_at_bounds() {
let cfg = WizardQemuConfig::default();
assert_eq!(next_visible_field(16, &cfg, 1), 16);
assert_eq!(next_visible_field(0, &cfg, -1), 0);
}
#[test]
fn snap_focus_to_visible_moves_off_hidden_field() {
let cfg = cfg_with("none", "user");
assert_eq!(snap_focus_to_visible(5, &cfg), 9);
assert_eq!(snap_focus_to_visible(8, &cfg), 9);
}
#[test]
fn snap_focus_to_visible_keeps_visible_focus_put() {
let cfg = WizardQemuConfig::default();
assert_eq!(snap_focus_to_visible(0, &cfg), 0);
assert_eq!(snap_focus_to_visible(4, &cfg), 4);
assert_eq!(snap_focus_to_visible(16, &cfg), 16);
}