Codex Handbook
core/src/tools/hosted_spec_tests.rs 68 lines
use super::*;use codex_protocol::config_types::WebSearchContextSize;use codex_protocol::config_types::WebSearchFilters;use codex_protocol::config_types::WebSearchUserLocation;use codex_protocol::config_types::WebSearchUserLocationType;use codex_tools::ResponsesApiWebSearchFilters;use codex_tools::ResponsesApiWebSearchUserLocation;use pretty_assertions::assert_eq;#[test]fn image_generation_tool_matches_expected_spec() {    assert_eq!(        create_image_generation_tool("png"),        ToolSpec::ImageGeneration {            output_format: "png".to_string(),        }    );}#[test]fn web_search_tool_preserves_configured_options() {    assert_eq!(        create_web_search_tool(WebSearchToolOptions {            web_search_mode: Some(WebSearchMode::Live),            web_search_config: Some(&WebSearchConfig {                filters: Some(WebSearchFilters {                    allowed_domains: Some(vec!["example.com".to_string()]),                }),                user_location: Some(WebSearchUserLocation {                    r#type: WebSearchUserLocationType::Approximate,                    country: Some("US".to_string()),                    region: None,                    city: None,                    timezone: Some("America/Los_Angeles".to_string()),                }),                search_context_size: Some(WebSearchContextSize::Low),            }),            web_search_tool_type: WebSearchToolType::TextAndImage,        }),        Some(ToolSpec::WebSearch {            external_web_access: Some(true),            filters: Some(ResponsesApiWebSearchFilters {                allowed_domains: Some(vec!["example.com".to_string()]),            }),            user_location: Some(ResponsesApiWebSearchUserLocation {                r#type: WebSearchUserLocationType::Approximate,                country: Some("US".to_string()),                region: None,                city: None,                timezone: Some("America/Los_Angeles".to_string()),            }),            search_context_size: Some(WebSearchContextSize::Low),            search_content_types: Some(vec!["text".to_string(), "image".to_string()]),        })    );}#[test]fn web_search_tool_is_absent_when_disabled() {    assert_eq!(        create_web_search_tool(WebSearchToolOptions {            web_search_mode: Some(WebSearchMode::Disabled),            web_search_config: None,            web_search_tool_type: WebSearchToolType::Text,        }),        None    );}