use std::borrow::Cow;
use std::path::{Path, PathBuf};
#[macro_use]
mod support;
pub use self::support::*;
#[test]
fn get_cur_dir() {
let tempdir = mktmp!();
let path = tempdir.path();
let env = VirtualWorkingDirEnv::new(path).unwrap();
assert_eq!(env.current_working_dir(), path);
}
#[test]
fn cur_dir_should_not_change_absolute_paths() {
let tempdir_first = mktmp!();
let tempdir_second = mktmp!();
let env = VirtualWorkingDirEnv::new(tempdir_first).unwrap();
let path = tempdir_second.path();
assert_eq!(env.path_relative_to_working_dir(Cow::Borrowed(path)), path);
}
#[test]
fn cur_dir_should_prefix_relative_paths_with_cwd() {
let tempdir = mktmp!();
let env = VirtualWorkingDirEnv::new(tempdir.path()).unwrap();
let path = Cow::Borrowed(Path::new("../bar"));
let mut expected = PathBuf::new();
expected.push(tempdir.path());
expected.pop();
expected.push("bar");
assert_eq!(env.path_relative_to_working_dir(path), expected);
}
#[test]
fn change_cur_dir_should_accept_absolute_paths() {
let tempdir = mktmp!();
let mut env = VirtualWorkingDirEnv::with_process_working_dir().unwrap();
env.change_working_dir(Cow::Borrowed(tempdir.path())).expect("change_working_dir failed");
assert_eq!(env.current_working_dir(), tempdir.path());
}
#[test]
fn change_cur_dir_should_accept_relative_paths() {
let tempdir = mktmp!();
let mut env = VirtualWorkingDirEnv::new(PathBuf::from(tempdir.path())).unwrap();
env.change_working_dir(Cow::Borrowed(Path::new(".."))).expect("change_working_dir failed");
let mut expected = PathBuf::new();
expected.push(tempdir.path());
expected.pop();
assert_eq!(env.current_working_dir(), expected);
}