rust/library/std/tests/create_dir_all_bare.rs
Chris Denton 9b18b4440a
Make create_dir_all_bare an std integration test
Moving `create_dir_all` out of `ui-fulldeps` is complicated by the fact it sets the current directory. This means it can't be a unit test. Instead, move it to its own integration test.
2023-02-21 18:33:19 +00:00

38 lines
947 B
Rust

//! Note that this test changes the current directory so
//! should not be in the same process as other tests.
use std::env;
use std::fs;
use std::path::{Path, PathBuf};
mod common;
// On some platforms, setting the current directory will prevent deleting it.
// So this helper ensures the current directory is reset.
struct CurrentDir(PathBuf);
impl CurrentDir {
fn new() -> Self {
Self(env::current_dir().unwrap())
}
fn set(&self, path: &Path) {
env::set_current_dir(path).unwrap();
}
fn with(path: &Path, f: impl FnOnce()) {
let current_dir = Self::new();
current_dir.set(path);
f();
}
}
impl Drop for CurrentDir {
fn drop(&mut self) {
env::set_current_dir(&self.0).unwrap();
}
}
#[test]
fn create_dir_all_bare() {
let tmpdir = common::tmpdir();
CurrentDir::with(tmpdir.path(), || {
fs::create_dir_all("create-dir-all-bare").unwrap();
});
}