use super::*;
#[test]
fn duplicate_notice_renders_default_message_with_pid() {
let notice = render_duplicate_notice("demo-app", Some(Pid::from_u32(42)), None);
assert_eq!(
notice,
"Detected existing process 'demo-app' (pid 42): focusing the existing window and exiting."
);
}
#[test]
fn duplicate_notice_renders_template_placeholders() {
let notice = render_duplicate_notice(
"demo-app",
Some(Pid::from_u32(7)),
Some("proc={{proc}},pid={{pid}}"),
);
assert_eq!(notice, "proc=demo-app,pid=7");
}
#[test]
fn activation_payload_parser_accepts_json_line() {
let payload = parse_activation_payload(
r#"{"processName":"demo-app","pid":9,"argv":["demo","--flag"],"cwd":"/tmp"}"#,
)
.unwrap();
assert_eq!(payload.process_name, "demo-app");
assert_eq!(payload.pid, 9);
assert_eq!(payload.argv, vec!["demo", "--flag"]);
assert_eq!(payload.cwd.as_deref(), Some("/tmp"));
}
#[test]
fn activation_payload_parser_rejects_invalid_json() {
assert!(parse_activation_payload("not json").is_none());
}
#[test]
fn stale_pid_file_cleanup_removes_invalid_contents() {
let dir =
std::env::temp_dir().join(format!("single-window-test-invalid-{}", std::process::id()));
let _ = fs::create_dir_all(&dir);
let path = dir.join("invalid.pid");
fs::write(&path, "not-a-pid").unwrap();
cleanup_stale_pid_file(&path, None);
assert!(!path.exists());
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn stale_pid_file_cleanup_removes_dead_pid() {
let dir = std::env::temp_dir().join(format!("single-window-test-dead-{}", std::process::id()));
let _ = fs::create_dir_all(&dir);
let path = dir.join("dead.pid");
fs::write(&path, u32::MAX.to_string()).unwrap();
cleanup_stale_pid_file(&path, None);
assert!(!path.exists());
let _ = fs::remove_dir_all(&dir);
}
#[test]
fn config_can_set_target_window_label() {
let config = crate::Config::new().with_target_window("secondary");
assert_eq!(config.target_window_label.as_deref(), Some("secondary"));
}
#[test]
fn config_can_disable_window_focus() {
let config = crate::Config::new().without_window_focus();
assert!(!config.focus_existing_window);
}
#[test]
fn stale_pid_reason_rejects_invalid_data() {
assert_eq!(
stale_pid_reason("abc", None),
Some("PID file contained invalid data")
);
}
#[test]
fn stale_pid_reason_rejects_dead_pid() {
let current_pid = std::process::id().to_string();
assert_eq!(
stale_pid_reason(¤t_pid, None),
Some("PID file pointed to a non-primary process")
);
}
#[test]
fn same_executable_matches_identical_filenames() {
let left = std::path::Path::new("/tmp/a/tauri-app");
let right = std::path::Path::new("/proc/self/cwd/tauri-app");
assert!(same_executable(left, right));
}