use crate::utils::TempDirectory;
use std::ops::Deref;
use std::path::{Path, PathBuf};
use std::thread::current as current_thread;
pub struct TestDirectory {
temp_dir: TempDirectory,
}
impl TestDirectory {
#[must_use]
pub fn new() -> Self {
let test_name = current_thread()
.name()
.expect("should be able to get test name")
.replace("::", "_");
Self {
temp_dir: TempDirectory::create(&test_name),
}
}
#[must_use]
pub fn output(&self) -> PathBuf {
self.temp_dir.join("output")
}
#[must_use]
pub fn cache(&self) -> PathBuf {
self.temp_dir.join("cache")
}
#[must_use]
pub fn keep(mut self) -> Self {
self.temp_dir = self.temp_dir.keep();
self
}
}
impl Deref for TestDirectory {
type Target = Path;
fn deref(&self) -> &Self::Target {
&self.temp_dir
}
}
impl AsRef<Path> for TestDirectory {
fn as_ref(&self) -> &Path {
&self.temp_dir
}
}