#[cfg(test)]
mod binary_main_tests {
use std::env;
use std::io::IsTerminal;
fn detect_execution_mode_test() -> String {
let is_mcp = !std::io::stdin().is_terminal() && std::env::args().len() == 1
|| std::env::var("MCP_VERSION").is_ok();
if is_mcp {
"Mcp".to_string()
} else {
"Cli".to_string()
}
}
#[test]
fn test_execution_mode_detection_with_mcp_version() {
env::set_var("MCP_VERSION", "1.0.0");
let mode = detect_execution_mode_test();
assert_eq!(mode, "Mcp");
env::remove_var("MCP_VERSION");
}
#[test]
fn test_execution_mode_detection_without_mcp_version() {
env::remove_var("MCP_VERSION");
let mode = detect_execution_mode_test();
assert!(mode == "Cli" || mode == "Mcp");
}
#[test]
fn test_env_filter_creation() {
use tracing_subscriber::EnvFilter;
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
assert!(format!("{filter:?}").contains("info") || !format!("{filter:?}").is_empty());
}
#[test]
fn test_server_creation_logic() {
use pmat::stateless_server::StatelessTemplateServer;
use std::sync::Arc;
let server_result = StatelessTemplateServer::new();
assert!(server_result.is_ok());
let server = Arc::new(server_result.unwrap());
assert!(Arc::strong_count(&server) > 0);
}
#[test]
#[ignore = "Environment variable manipulation unsafe in parallel tests"]
fn test_mcp_version_environment_variable() {
let test_values = vec!["1.0.0", "2.0.0", "latest", ""];
for value in test_values {
env::set_var("MCP_VERSION", value);
assert!(env::var("MCP_VERSION").is_ok());
env::remove_var("MCP_VERSION");
}
}
#[test]
fn test_argument_count_behavior() {
let args: Vec<String> = env::args().collect();
assert!(!args.is_empty());
let single_arg = args.len() == 1;
let _ = single_arg;
}
#[tokio::test]
async fn test_async_runtime_setup() {
let result = tokio::spawn(async {
let server_result = pmat::stateless_server::StatelessTemplateServer::new();
server_result.is_ok()
})
.await;
assert!(result.is_ok());
assert!(result.unwrap());
}
#[test]
fn test_tracing_initialization() {
use tracing_subscriber::{fmt, EnvFilter};
let result = std::panic::catch_unwind(|| {
let _subscriber = fmt().with_env_filter(
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")),
);
});
assert!(result.is_ok());
}
#[test]
fn test_terminal_detection() {
let is_terminal = std::io::IsTerminal::is_terminal(&std::io::stdin());
let _ = is_terminal;
}
#[test]
fn test_error_handling_setup() {
use anyhow::Result;
let test_result: Result<()> = Ok(());
assert!(test_result.is_ok());
let error_result: Result<()> = Err(anyhow::anyhow!("Test error"));
assert!(error_result.is_err());
}
}