mod common;
use dioxus_swdir_tree_core::{DirectoryTree, SelectionMode};
use common::fixture;
#[test]
fn s3_1_initial_selection_is_empty() {
let fx = fixture();
let tree = DirectoryTree::new(&fx.root);
assert!(tree.selected_paths().is_empty());
assert!(tree.selected_path().is_none());
}
#[test]
fn s3_2_replace_selects_one_path() {
let fx = fixture();
let mut tree = DirectoryTree::new(&fx.root);
tree.expand_blocking(&fx.root).expect("root scan");
let alpha = fx.path("alpha");
tree.on_selected(&alpha, true, SelectionMode::Replace);
assert_eq!(tree.selected_paths(), std::slice::from_ref(&alpha));
assert_eq!(tree.selected_path(), Some(alpha.as_path()));
assert!(tree.is_selected(&alpha));
let zeta = fx.path("zeta.txt");
assert!(!tree.is_selected(&zeta));
let node = tree.find(&alpha).unwrap();
assert!(node.is_selected);
let node_zeta = tree.find(&zeta).unwrap();
assert!(!node_zeta.is_selected);
}
#[test]
fn s3_3_selected_path_tracks_active_not_last_pushed() {
let fx = fixture();
let mut tree = DirectoryTree::new(&fx.root);
tree.expand_blocking(&fx.root).expect("root scan");
let alpha = fx.path("alpha");
let beta = fx.path("beta");
tree.on_selected(&beta, true, SelectionMode::Toggle);
tree.on_selected(&alpha, true, SelectionMode::Toggle);
assert_eq!(tree.selected_paths(), [beta.clone(), alpha.clone()]);
assert_eq!(tree.selected_path(), Some(alpha.as_path()));
tree.on_selected(&beta, true, SelectionMode::Toggle);
assert_eq!(tree.selected_path(), Some(beta.as_path()));
assert!(!tree.is_selected(&beta));
}
#[test]
fn s3_4_replace_on_already_selected_row_is_idempotent() {
let fx = fixture();
let mut tree = DirectoryTree::new(&fx.root);
tree.expand_blocking(&fx.root).expect("root scan");
let alpha = fx.path("alpha");
tree.on_selected(&alpha, true, SelectionMode::Replace);
tree.on_selected(&alpha, true, SelectionMode::Replace);
assert_eq!(tree.selected_paths(), std::slice::from_ref(&alpha));
assert_eq!(tree.selected_path(), Some(alpha.as_path()));
}
#[test]
fn selecting_unloaded_path_survives_until_visible() {
let fx = fixture();
let mut tree = DirectoryTree::new(&fx.root);
tree.expand_blocking(&fx.root).expect("root scan");
let inner = fx.path("alpha/inner");
assert!(tree.find(&inner).is_none());
tree.on_selected(&inner, true, SelectionMode::Replace);
assert!(tree.is_selected(&inner));
tree.expand_blocking(&fx.path("alpha")).expect("alpha scan");
let node = tree.find(&inner).expect("inner now visible");
assert!(node.is_selected);
}