#[cfg(test)]
mod tests {
use std::collections::HashSet;
use std::fs;
use tempfile::tempdir;
use std::sync::Arc;
use arc_swap::ArcSwap;
use crate::views::file_selector::FileSelector;
use crate::file_index::SharedRegistry;
use crate::views::View;
#[test]
fn test_file_selector_reveal_flow() -> anyhow::Result<()> {
let td = tempdir()?;
let root = td.path().join("project");
fs::create_dir_all(root.join("a/b/c"))?;
fs::write(root.join("a/b/c/file.rs"), "fn main() {}")?;
let shared: SharedRegistry = Arc::new(ArcSwap::from_pointee(None));
let initial = Some(root.join("a/b/c/file.rs"));
let mut fs_view = FileSelector::new(root.clone(), &[], shared, HashSet::new(), initial.clone());
assert!(fs_view.pending_load.is_some());
let settings = crate::settings::Settings::new(&root.join(".oo/config.yaml"))?;
while let Some(dir) = fs_view.pending_load.take() {
let mut entries = vec![];
for entry in fs::read_dir(&dir)? {
let e = entry?;
let p = e.path();
entries.push((p.clone(), p.is_dir()));
}
let op = crate::operation::FileSelectorOp::DirLoaded { path: dir.clone(), entries };
let _ = fs_view.handle_operation(&crate::operation::Operation::FileSelectorLocal(op), &settings);
}
let sel = fs_view.tree_selected_file();
assert_eq!(sel, initial);
Ok(())
}
}