//! Integration coverage for client binary startup wiring. //! //! Scope: include `client/src/main.rs` and exercise startup guards/tracing //! branches without launching the full runtime app loop. //! Targets: `client/src/main.rs`. //! Why: keep client startup behavior deterministic and directly attributed to //! the binary entrypoint source file. #[allow(clippy::suspicious_open_options)] mod client_main_binary { include!(env!("LESAVKA_CLIENT_MAIN_SRC")); use serial_test::serial; use temp_env::with_var; #[test] #[serial] fn main_returns_ok_when_test_skip_flag_enabled() { with_var("LESAVKA_HEADLESS", Some("1"), || { with_var("LESAVKA_DEV_MODE", None::<&str>, || { with_var("LESAVKA_TEST_SKIP_APP", Some("1"), || { let result = main(); assert!(result.is_ok(), "test skip flag should bypass app runtime"); }); }); }); } #[test] #[serial] fn main_dev_mode_branch_initializes_and_returns_when_skipped() { with_var("LESAVKA_HEADLESS", Some("1"), || { with_var("LESAVKA_DEV_MODE", Some("1"), || { with_var("LESAVKA_TEST_SKIP_APP", Some("1"), || { let result = main(); assert!(result.is_ok(), "dev-mode startup should succeed in test skip mode"); }); }); }); } #[test] #[serial] fn main_checks_runtime_dir_when_not_headless() { with_var("LESAVKA_HEADLESS", None::<&str>, || { with_var("XDG_RUNTIME_DIR", Some("/run/user/1000"), || { with_var("LESAVKA_DEV_MODE", None::<&str>, || { with_var("LESAVKA_TEST_SKIP_APP", Some("1"), || { let result = main(); assert!(result.is_ok(), "runtime-dir path should pass startup guard"); }); }); }); }); } #[test] #[serial] fn ensure_runtime_dir_panics_in_tests_when_missing() { with_var("XDG_RUNTIME_DIR", None::<&str>, || { let panic_result = std::panic::catch_unwind(ensure_runtime_dir); assert!(panic_result.is_err(), "missing runtime dir should panic in test cfg"); }); } }