use super::*; use pretty_assertions::assert_eq; #[derive(Default)] struct TestHandler; impl ToolHandler for TestHandler { type Output = crate::tools::context::FunctionToolOutput; fn kind(&self) -> ToolKind { ToolKind::Function } async fn handle(&self, _invocation: ToolInvocation) -> Result { Ok(crate::tools::context::FunctionToolOutput::from_text( "ok".to_string(), Some(true), )) } } #[test] fn handler_looks_up_namespaced_aliases_explicitly() { let plain_handler = Arc::new(TestHandler) as Arc; let namespaced_handler = Arc::new(TestHandler) as Arc; let namespace = "mcp__codex_apps__gmail"; let tool_name = "gmail_get_recent_emails"; let plain_name = codex_tools::ToolName::plain(tool_name); let namespaced_name = codex_tools::ToolName::namespaced(namespace, tool_name); let registry = ToolRegistry::new(HashMap::from([ (plain_name.clone(), Arc::clone(&plain_handler)), (namespaced_name.clone(), Arc::clone(&namespaced_handler)), ])); let plain = registry.handler(&plain_name); let namespaced = registry.handler(&namespaced_name); let missing_namespaced = registry.handler(&codex_tools::ToolName::namespaced( "mcp__codex_apps__calendar", tool_name, )); assert_eq!(plain.is_some(), true); assert_eq!(namespaced.is_some(), true); assert_eq!(missing_namespaced.is_none(), true); assert!( plain .as_ref() .is_some_and(|handler| Arc::ptr_eq(handler, &plain_handler)) ); assert!( namespaced .as_ref() .is_some_and(|handler| Arc::ptr_eq(handler, &namespaced_handler)) ); }