use std::path::{Path, PathBuf};
use std::time::SystemTime;
use ratatui::crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
pub(crate) struct HomeSandbox {
_tmp: tempfile::TempDir,
_guard: std::sync::MutexGuard<'static, ()>,
home: PathBuf,
}
impl HomeSandbox {
pub(crate) fn new() -> Self {
let guard = crate::profile::HOME_TEST_LOCK
.lock()
.unwrap_or_else(|e| e.into_inner());
let tmp = tempfile::tempdir().expect("create home sandbox");
let home = tmp.path().to_path_buf();
crate::profile::set_home_override(home.clone());
Self {
_tmp: tmp,
_guard: guard,
home,
}
}
pub(crate) fn home(&self) -> &Path {
&self.home
}
}
impl Drop for HomeSandbox {
fn drop(&mut self) {
crate::profile::clear_home_override();
}
}
pub(crate) fn set_mtime(path: &Path, when: SystemTime) {
let file = std::fs::OpenOptions::new()
.write(true)
.open(path)
.expect("open for mtime");
file.set_modified(when).expect("set_modified");
}
pub(crate) fn key(code: KeyCode) -> KeyEvent {
KeyEvent::new(code, KeyModifiers::NONE)
}