use command_stream::commands::{disable_virtual_commands, enable_virtual_commands};
use command_stream::run;
use std::env;
use std::fs;
#[tokio::test]
async fn command_runs_even_when_working_directory_was_deleted() {
let start_dir = env::current_dir().expect("should have a valid start dir");
disable_virtual_commands();
let tmp = env::temp_dir().join(format!("getcwd-test-{}", std::process::id()));
fs::create_dir_all(&tmp).expect("create temp dir");
env::set_current_dir(&tmp).expect("chdir into temp dir");
if fs::remove_dir_all(&tmp).is_err() {
let _ = env::set_current_dir(&start_dir);
enable_virtual_commands();
eprintln!("skipping: platform does not allow deleting the current working directory");
return;
}
let result = run("echo deleted dir").await;
let _ = env::set_current_dir(&start_dir);
enable_virtual_commands();
let result = result.expect("command should run despite deleted working dir");
assert!(result.is_success(), "exit code should be 0: {:?}", result);
assert!(
result.stdout.contains("deleted dir"),
"unexpected stdout: {:?}",
result.stdout
);
}