mod common;
use common::{TmpDir, is_root};
use std::fs;
use std::path::PathBuf;
use iced_swdir_tree::{DirectoryTree, DirectoryTreeEvent, SelectionMode};
#[test]
fn nonexistent_root_does_not_crash() {
let bogus = PathBuf::from("/this/path/should/not/exist/for/iced-swdir-tree-tests");
let mut tree = DirectoryTree::new(bogus.clone());
tree.__test_expand_blocking(bogus.clone());
let _ = tree.update(DirectoryTreeEvent::Selected(
bogus.join("anything"),
false,
SelectionMode::Replace,
));
assert_eq!(tree.selected_path(), None);
}
#[test]
fn toggling_an_unknown_path_is_a_noop() {
let td = TmpDir::new("noop");
let mut tree = DirectoryTree::new(td.path().to_path_buf());
let t = tree.update(DirectoryTreeEvent::Toggled(PathBuf::from(
"/some/other/place",
)));
assert_eq!(t.units(), 0);
}
#[cfg(unix)]
#[test]
fn permission_denied_surfaces_as_error_node() {
use std::os::unix::fs::PermissionsExt;
if is_root() {
eprintln!("skipping permission_denied_surfaces_as_error_node: running as root");
return;
}
let td = TmpDir::new("noperm");
let sub = td.mkdir("forbidden");
fs::set_permissions(&sub, fs::Permissions::from_mode(0o000)).unwrap();
let mut tree = DirectoryTree::new(td.path().to_path_buf());
tree.__test_expand_blocking(td.path().to_path_buf());
tree.__test_expand_blocking(sub.clone());
let _ = tree.update(DirectoryTreeEvent::Selected(
sub.clone(),
true,
SelectionMode::Replace,
));
assert_eq!(tree.selected_path(), Some(sub.as_path()));
let _ = fs::set_permissions(&sub, fs::Permissions::from_mode(0o700));
}