#![allow(
clippy::missing_docs_in_private_items,
reason = "test helpers and fixtures do not need doc comments"
)]
use super::*;
fn with_path(value: &std::path::Path, body: impl FnOnce()) {
let saved = std::env::var_os("PATH");
unsafe {
std::env::set_var("PATH", value);
}
body();
unsafe {
match saved {
Some(prev) => std::env::set_var("PATH", prev),
None => std::env::remove_var("PATH"),
}
}
}
#[test]
fn tmux_available_in_true_when_fake_tmux_present() {
let dir = std::env::temp_dir().join(format!("moadim-tmux-present-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
let tmux = dir.join("tmux");
std::fs::write(&tmux, "#!/bin/sh\n").unwrap();
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt as _;
std::fs::set_permissions(&tmux, std::fs::Permissions::from_mode(0o755)).unwrap();
}
assert!(tmux_available_in(&dir.to_string_lossy()));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn tmux_available_in_false_when_dir_has_no_tmux() {
let dir = std::env::temp_dir().join(format!("moadim-tmux-missing-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
assert!(!tmux_available_in(&dir.to_string_lossy()));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn tmux_available_reads_live_path_present() {
let dir = std::env::temp_dir().join(format!("moadim-tmux-live-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
let tmux = dir.join("tmux");
std::fs::write(&tmux, "#!/bin/sh\n").unwrap();
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt as _;
std::fs::set_permissions(&tmux, std::fs::Permissions::from_mode(0o755)).unwrap();
}
with_path(&dir, || assert!(tmux_available()));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn tmux_available_false_when_path_unset() {
let saved = std::env::var_os("PATH");
unsafe {
std::env::remove_var("PATH");
}
assert!(!tmux_available());
unsafe {
if let Some(prev) = saved {
std::env::set_var("PATH", prev);
}
}
}
#[test]
fn agent_command_available_in_true_when_fake_command_present() {
let dir =
std::env::temp_dir().join(format!("moadim-agentcmd-present-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
let bin = dir.join("fake-agent-cmd");
std::fs::write(&bin, "#!/bin/sh\n").unwrap();
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt as _;
std::fs::set_permissions(&bin, std::fs::Permissions::from_mode(0o755)).unwrap();
}
assert!(agent_command_available_in(
&dir.to_string_lossy(),
"fake-agent-cmd"
));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn resolve_tmux_bin_from_prefers_path_over_fallbacks() {
let dir =
std::env::temp_dir().join(format!("moadim-resolve-tmux-path-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
std::fs::write(dir.join("tmux"), "#!/bin/sh\n").unwrap();
let dir_str = dir.to_string_lossy().into_owned();
let resolved = resolve_tmux_bin_from(&dir_str, &["/definitely/not/here".to_string()]);
assert_eq!(resolved, format!("{dir_str}/tmux"));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn agent_command_available_in_false_when_dir_has_no_command() {
let dir =
std::env::temp_dir().join(format!("moadim-agentcmd-missing-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
assert!(!agent_command_available_in(
&dir.to_string_lossy(),
"fake-agent-cmd"
));
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn resolve_tmux_bin_from_falls_back_to_first_matching_fallback_dir() {
let base =
std::env::temp_dir().join(format!("moadim-resolve-tmux-fb-{}", uuid::Uuid::new_v4()));
let missing = base.join("missing");
let present = base.join("present");
std::fs::create_dir_all(&present).unwrap();
std::fs::write(present.join("tmux"), "#!/bin/sh\n").unwrap();
let resolved = resolve_tmux_bin_from(
"",
&[
missing.to_string_lossy().into_owned(),
present.to_string_lossy().into_owned(),
],
);
assert_eq!(resolved, format!("{}/tmux", present.to_string_lossy()));
let _ = std::fs::remove_dir_all(&base);
}
include!("resolve_tmux_bin_from_returns_bare_name_when_nowhere_found_tests.rs");