#![cfg(windows)]
use std::process::Command;
#[test]
fn cmd_and_powershell_can_launch_bot_forge() {
let binary = env!("CARGO_BIN_EXE_bot-forge");
let cmd = Command::new("cmd")
.args(["/C", binary, "--version"])
.output()
.unwrap();
assert!(cmd.status.success());
let powershell = Command::new("powershell")
.args([
"-NoProfile",
"-Command",
&format!("& '{}' --version", binary.replace('\'', "''")),
])
.output()
.unwrap();
assert!(powershell.status.success());
}
#[test]
fn windows_data_and_path_overrides_are_honored() {
let temp = std::env::temp_dir().join(format!("bot-forge-windows-{}", std::process::id()));
let output = Command::new(env!("CARGO_BIN_EXE_bot-forge"))
.env("BOT_FORGE_HOME", &temp)
.env("BOT_FORGE_BIN_DIR", temp.join("managed-bin"))
.arg("doctor")
.output()
.unwrap();
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains(&temp.display().to_string()));
assert!(stdout.contains("managed-bin"));
}
#[test]
fn windows_machine_output_and_cache_paths_handle_spaces() {
let temp = std::env::temp_dir().join(format!("bot forge windows {}", std::process::id()));
let status = Command::new(env!("CARGO_BIN_EXE_bot-forge"))
.env("BOT_FORGE_HOME", &temp)
.args(["cache", "status", "--format", "json"])
.output()
.unwrap();
assert!(status.status.success());
let value: serde_json::Value = serde_json::from_slice(&status.stdout).unwrap();
assert_eq!(value["root"], temp.display().to_string());
std::fs::remove_dir_all(temp).ok();
}