#![cfg(all(test, not(any(target_os = "emscripten", target_os = "wasi", target_env = "sgx"))))]

//! Note that this test changes the current directory so
//! should not be in the same process as other tests.

use std::path::{Path, PathBuf};
use std::{env, fs};

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]
#[cfg_attr(all(miri, windows), ignore)] // File system access on Windows not supported by Miri
fn create_dir_all_bare() {
    let tmpdir = common::tmpdir();
    CurrentDir::with(tmpdir.path(), || {
        fs::create_dir_all("create-dir-all-bare").unwrap();
    });
}
