use iced::{Size, window};
use super::windows::{detached_monitor_size, detached_storage_size};
use super::{DesktopApp, Message, ToolWindowKind};
#[test]
fn detached_monitor_matches_attached_dialog_size() {
assert_eq!(
detached_monitor_size(Size::new(1180.0, 720.0)),
Size::new(1060.0, 600.0)
);
}
#[test]
fn detached_storage_matches_attached_dialog_size() {
assert_eq!(detached_storage_size(), Size::new(760.0, 340.0));
}
#[cfg(windows)]
#[test]
fn second_startup_frame_does_not_prepare_hidden_tool_windows() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
app.main_window_id = Some(window::Id::unique());
app.startup_frames_seen = 1;
let _task = app.update(Message::FrameRendered);
assert!(app.monitor_window.id.is_none());
assert!(app.floppy_window.id.is_none());
assert!(app.hdd_window.id.is_none());
assert!(app.network_window.id.is_none());
assert!(app.printer_window.id.is_none());
}
#[cfg(windows)]
#[test]
fn detaching_storage_lazily_opens_native_window() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let _task = app.update(Message::DetachToolWindow(ToolWindowKind::Floppy));
assert!(app.floppy_open);
assert!(app.floppy_window.id.is_some());
assert!(app.floppy_window.detached);
assert!(!app.floppy_window.ready);
}
#[cfg(windows)]
#[test]
fn detaching_storage_reuses_prepared_native_windows() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let floppy = window::Id::unique();
let hdd = window::Id::unique();
app.floppy_open = true;
app.floppy_window.id = Some(floppy);
app.floppy_window.ready = true;
app.hdd_open = true;
app.hdd_window.id = Some(hdd);
app.hdd_window.ready = true;
let _task = app.update(Message::DetachToolWindow(ToolWindowKind::Floppy));
let _task = app.update(Message::DetachToolWindow(ToolWindowKind::Hdd));
assert_eq!(app.floppy_window.id, Some(floppy));
assert!(app.floppy_window.detached);
assert_eq!(app.hdd_window.id, Some(hdd));
assert!(app.hdd_window.detached);
}
#[cfg(windows)]
#[test]
fn detaching_monitor_reuses_prepared_native_window() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let monitor = window::Id::unique();
app.monitor_open = true;
app.monitor_window.id = Some(monitor);
app.monitor_window.ready = true;
let _task = app.update(Message::DetachToolWindow(ToolWindowKind::Monitor));
assert!(app.monitor_open);
assert_eq!(app.monitor_window.id, Some(monitor));
assert!(app.monitor_window.detached);
}
#[cfg(windows)]
#[test]
fn attaching_monitor_hides_native_window_and_restores_overlay() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let monitor = window::Id::unique();
app.monitor_open = true;
app.monitor_window.id = Some(monitor);
app.monitor_window.ready = true;
app.monitor_window.detached = true;
app.monitor_window.always_on_top = true;
let _task = app.update(Message::AttachToolWindow(ToolWindowKind::Monitor));
assert!(app.monitor_open);
assert_eq!(app.monitor_window.id, Some(monitor));
assert!(!app.monitor_window.detached);
assert!(!app.monitor_window.always_on_top);
}
#[test]
fn detached_monitor_pin_toggles_always_on_top() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let monitor = window::Id::unique();
app.monitor_open = true;
app.monitor_window.detached = true;
app.monitor_window.ready = true;
app.monitor_window.id = Some(monitor);
let _task = app.update(Message::ToggleToolWindowAlwaysOnTop(
ToolWindowKind::Monitor,
));
assert!(app.monitor_window.always_on_top);
assert!(app.monitor_open);
assert!(app.monitor_window.detached);
assert!(app.monitor_window.ready);
assert_eq!(app.monitor_window.id, Some(monitor));
let _task = app.update(Message::ToggleToolWindowAlwaysOnTop(
ToolWindowKind::Monitor,
));
assert!(!app.monitor_window.always_on_top);
assert!(app.monitor_open);
assert!(app.monitor_window.detached);
assert!(app.monitor_window.ready);
assert_eq!(app.monitor_window.id, Some(monitor));
}
#[test]
fn detached_storage_pin_and_attach_are_independent() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let floppy = window::Id::unique();
let hdd = window::Id::unique();
app.floppy_open = true;
app.floppy_window.id = Some(floppy);
app.floppy_window.ready = true;
app.floppy_window.detached = true;
app.hdd_window.id = Some(hdd);
app.hdd_window.ready = true;
let _task = app.update(Message::ToggleToolWindowAlwaysOnTop(ToolWindowKind::Floppy));
assert!(app.floppy_window.always_on_top);
assert!(!app.hdd_window.always_on_top);
let _task = app.update(Message::AttachToolWindow(ToolWindowKind::Floppy));
assert!(app.floppy_open);
assert!(!app.floppy_window.detached);
assert!(!app.floppy_window.always_on_top);
assert_eq!(app.floppy_window.id, Some(floppy));
assert_eq!(app.hdd_window.id, Some(hdd));
}
#[test]
fn detached_network_pin_and_attach_are_independent() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let network = window::Id::unique();
app.network_open = true;
app.network_window.id = Some(network);
app.network_window.ready = true;
app.network_window.detached = true;
let _task = app.update(Message::ToggleToolWindowAlwaysOnTop(
ToolWindowKind::Network,
));
assert!(app.network_window.always_on_top);
let _task = app.update(Message::AttachToolWindow(ToolWindowKind::Network));
assert!(app.network_open);
assert!(!app.network_window.detached);
assert!(!app.network_window.always_on_top);
assert_eq!(app.network_window.id, Some(network));
}
#[test]
fn detached_printer_pin_and_attach_are_independent() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let printer = window::Id::unique();
app.printer_open = true;
app.printer_window.id = Some(printer);
app.printer_window.ready = true;
app.printer_window.detached = true;
let _task = app.update(Message::ToggleToolWindowAlwaysOnTop(
ToolWindowKind::Printer,
));
assert!(app.printer_window.always_on_top);
let _task = app.update(Message::AttachToolWindow(ToolWindowKind::Printer));
assert!(app.printer_open);
assert!(!app.printer_window.detached);
assert!(!app.printer_window.always_on_top);
assert_eq!(app.printer_window.id, Some(printer));
}
#[test]
fn printer_buffer_view_toggles_between_hex_and_text() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
assert!(!app.printer_text_view);
let _task = app.update(Message::TogglePrinterBufferView);
assert!(app.printer_text_view);
let _task = app.update(Message::TogglePrinterBufferView);
assert!(!app.printer_text_view);
}
#[test]
fn network_buffer_view_toggles_between_hex_and_text() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
assert!(!app.network_text_view);
let _task = app.update(Message::ToggleNetworkBufferView);
assert!(app.network_text_view);
let _task = app.update(Message::ToggleNetworkBufferView);
assert!(!app.network_text_view);
}
#[test]
fn closing_detached_monitor_does_not_close_main_window() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let main = window::Id::unique();
let monitor = window::Id::unique();
app.main_window_id = Some(main);
app.monitor_window.id = Some(monitor);
app.monitor_window.ready = true;
app.monitor_window.detached = true;
app.monitor_open = true;
let _task = app.update(Message::WindowCloseRequested(monitor));
assert_eq!(app.main_window_id, Some(main));
#[cfg(windows)]
assert_eq!(app.monitor_window.id, Some(monitor));
#[cfg(not(windows))]
assert_eq!(app.monitor_window.id, None);
assert!(!app.monitor_window.detached);
assert!(!app.monitor_open);
}
#[test]
fn closing_detached_hdd_does_not_close_main_window() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let main = window::Id::unique();
let hdd = window::Id::unique();
app.main_window_id = Some(main);
app.hdd_window.id = Some(hdd);
app.hdd_window.ready = true;
app.hdd_window.detached = true;
app.hdd_open = true;
let _task = app.update(Message::WindowCloseRequested(hdd));
assert_eq!(app.main_window_id, Some(main));
#[cfg(windows)]
assert_eq!(app.hdd_window.id, Some(hdd));
#[cfg(not(windows))]
assert_eq!(app.hdd_window.id, None);
assert!(!app.hdd_window.detached);
assert!(!app.hdd_open);
}
#[test]
fn closing_detached_printer_does_not_close_main_window() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let main = window::Id::unique();
let printer = window::Id::unique();
app.main_window_id = Some(main);
app.printer_window.id = Some(printer);
app.printer_window.ready = true;
app.printer_window.detached = true;
app.printer_open = true;
let _task = app.update(Message::WindowCloseRequested(printer));
assert_eq!(app.main_window_id, Some(main));
#[cfg(windows)]
assert_eq!(app.printer_window.id, Some(printer));
#[cfg(not(windows))]
assert_eq!(app.printer_window.id, None);
assert!(!app.printer_window.detached);
assert!(!app.printer_open);
}
#[test]
fn opening_detached_monitor_does_not_replace_main_window_id() {
let (mut app, _task) = DesktopApp::with_initial_path(None);
let main = window::Id::unique();
let monitor = window::Id::unique();
app.main_window_id = Some(main);
app.monitor_window.id = Some(monitor);
app.monitor_window.detached = true;
let _task = app.update(Message::WindowOpened(monitor));
assert_eq!(app.main_window_id, Some(main));
assert_eq!(app.monitor_window.id, Some(monitor));
assert!(app.monitor_window.ready);
}