use dexios_domain::storage::{Error, FileStorage, Storage}; use std::fs; use std::io::Write; use std::ops::Deref; use std::path::{Path, PathBuf}; pub struct TestFileStorage { inner: FileStorage, test_case_n: u32, } impl TestFileStorage { pub fn new(test_case_n: u32) -> Self { Self { inner: FileStorage, test_case_n, } } } impl Deref for TestFileStorage { type Target = FileStorage; fn deref(&self) -> &Self::Target { &self.inner } } impl Drop for TestFileStorage { fn drop(&mut self) { fs::remove_file(format!("hello_{}.txt", self.test_case_n)).ok(); fs::remove_dir_all(format!("bar_{}/", self.test_case_n)).ok(); } } pub fn save_text_file

(stor: &TestFileStorage, path: P, content: &str) -> Result<(), Error> where P: AsRef, { let file = stor.create_file(path)?; file.try_writer()? .borrow_mut() .write_all(content.as_bytes()) .map_err(|_| Error::CreateFile)?; stor.flush_file(&file) } // -------------------------------- // TEST DATA // ------------------------------- pub fn add_hello_txt(stor: &TestFileStorage) -> Result<(), Error> { save_text_file( stor, format!("hello_{}.txt", stor.test_case_n), "hello world", ) } pub fn add_bar_foo_folder(stor: &TestFileStorage) -> Result<(), Error> { let bar_dir = format!("bar_{}", stor.test_case_n); fs::create_dir(&bar_dir).map_err(|_| Error::CreateFile)?; save_text_file(stor, format!("{}/hello.txt", &bar_dir), "hello")?; save_text_file(stor, format!("{}/world.txt", &bar_dir), "world")?; fs::create_dir(format!("{}/foo/", &bar_dir)).map_err(|_| Error::CreateFile)?; save_text_file(stor, format!("{}/foo/hello.txt", &bar_dir), "hello")?; save_text_file(stor, format!("{}/foo/world.txt", &bar_dir), "world")?; Ok(()) } pub fn add_bar_foo_folder_with_hidden(stor: &TestFileStorage) -> Result<(), Error> { let bar_dir = format!("bar_{}", stor.test_case_n); fs::create_dir(&bar_dir).map_err(|_| Error::CreateFile)?; save_text_file(stor, format!("{}/.hello.txt", &bar_dir), "hello")?; save_text_file(stor, format!("{}/world.txt", &bar_dir), "world")?; fs::create_dir(format!("{}/.foo/", &bar_dir)).map_err(|_| Error::CreateFile)?; save_text_file(stor, format!("{}/.foo/hello.txt", &bar_dir), "hello")?; save_text_file(stor, format!("{}/.foo/world.txt", &bar_dir), "world")?; Ok(()) } pub fn sorted_file_names(file_names: Vec<&PathBuf>) -> Vec<&str> { let mut keys = file_names .iter() .map(|k| k.to_str().unwrap()) .collect::>(); keys.sort_unstable(); keys }