#![allow(
clippy::missing_docs_in_private_items,
reason = "test helpers and fixtures do not need doc comments"
)]
#[cfg(target_os = "macos")]
use super::*;
#[cfg(target_os = "macos")]
#[test]
fn plist_carries_label_program_args_and_supervision_keys() {
let plist = render_plist(
std::path::Path::new("/opt/moadim/bin/moadim"),
std::path::Path::new("/Users/u/.config/moadim/daemon.log"),
std::path::Path::new("/Users/u"),
std::path::Path::new("/Users/u/.hermes"),
);
assert!(plist.contains("<string>io.moadim.daemon</string>"));
assert!(plist.contains("<string>/opt/moadim/bin/moadim</string>"));
assert!(plist.contains("<string>--interactive</string>"));
assert!(plist.contains("<key>RunAtLoad</key>"));
assert!(plist.contains("<key>KeepAlive</key>"));
assert!(plist.contains("<key>SuccessfulExit</key>"));
assert!(
!plist.contains("<key>KeepAlive</key>\n <true/>"),
"KeepAlive must not be unconditional true"
);
assert!(plist.contains("/Users/u/.config/moadim/daemon.log"));
assert!(plist.contains("<key>WorkingDirectory</key>"));
assert!(plist.contains("<string>/Users/u/.hermes</string>"));
assert!(plist.contains("<key>EnvironmentVariables</key>"));
assert!(plist.contains("/opt/homebrew/bin:/usr/local/bin:/Users/u/.cargo/bin"));
}
#[cfg(target_os = "macos")]
#[test]
fn plist_escapes_xml_metacharacters_in_paths() {
let plist = render_plist(
std::path::Path::new("/tmp/a&b<c>"),
std::path::Path::new("/tmp/log"),
std::path::Path::new("/tmp/home"),
std::path::Path::new("/tmp/work&root"),
);
assert!(plist.contains("/tmp/a&b<c>"));
assert!(plist.contains("/tmp/work&root"));
assert!(!plist.contains("a&b<c>"));
}
#[cfg(target_os = "macos")]
#[test]
fn xml_escape_covers_all_five_metacharacters() {
assert_eq!(xml_escape("&<>\"'"), "&<>"'");
}
#[cfg(target_os = "macos")]
#[test]
fn plist_path_is_under_launch_agents() {
let path = plist_path().unwrap();
assert!(path.ends_with("Library/LaunchAgents/io.moadim.daemon.plist"));
}
#[cfg(target_os = "macos")]
#[test]
fn plist_path_honors_home_override() {
let base = std::env::temp_dir().join(format!("moadim-plist-home-{}", uuid::Uuid::new_v4()));
let prev_override = std::env::var_os("MOADIM_HOME_OVERRIDE");
unsafe {
std::env::set_var("MOADIM_HOME_OVERRIDE", &base);
}
let path = plist_path().unwrap();
unsafe {
match prev_override {
Some(value) => std::env::set_var("MOADIM_HOME_OVERRIDE", value),
None => std::env::remove_var("MOADIM_HOME_OVERRIDE"),
}
}
assert_eq!(
path,
base.join("Library/LaunchAgents/io.moadim.daemon.plist"),
"plist_path() must land under MOADIM_HOME_OVERRIDE, not the real home"
);
if let Some(real_home) = dirs::home_dir() {
assert!(
!path.starts_with(real_home),
"plist_path() must not resolve under the real home when the override is set"
);
}
}
#[cfg(any(target_os = "macos", target_os = "linux"))]
#[test]
fn run_succeeds_for_a_zero_exit_command() {
super::common::run("true", &[]).unwrap();
}
#[cfg(any(target_os = "macos", target_os = "linux"))]
#[test]
fn run_errors_on_nonzero_exit() {
assert!(super::common::run("false", &[]).is_err());
}
#[cfg(any(target_os = "macos", target_os = "linux"))]
#[test]
fn run_errors_when_program_is_missing() {
assert!(super::common::run("moadim-no-such-binary-zzzqq", &[]).is_err());
}
#[cfg(any(target_os = "macos", target_os = "linux"))]
#[test]
fn moadim_exe_errors_when_current_exe_resolution_fails() {
let env = crate::utils::process::CURRENT_EXE_FAIL_ENV;
let prev = std::env::var_os(env);
unsafe {
std::env::set_var(env, "1");
}
let result = super::common::moadim_exe();
unsafe {
match prev {
Some(value) => std::env::set_var(env, value),
None => std::env::remove_var(env),
}
}
assert!(result.is_err());
}
include!("launchctl_bin_never_resolves_to_real_launchctl_in_test_builds_tests.rs");