Codex Handbook
memories/read/src/citations_tests.rs 71 lines
use super::parse_memory_citation;use super::thread_ids_from_memory_citation;use codex_protocol::ThreadId;use pretty_assertions::assert_eq;#[test]fn parse_memory_citation_supports_legacy_thread_ids() {    let first = ThreadId::new();    let second = ThreadId::new();    let citations = vec![format!(        "<memory_citation>\n<citation_entries>\nMEMORY.md:1-2|note=[x]\n</citation_entries>\n<thread_ids>\n{first}\nnot-a-uuid\n{second}\n</thread_ids>\n</memory_citation>"    )];    let parsed = parse_memory_citation(citations).expect("memory citation should parse");    assert_eq!(        thread_ids_from_memory_citation(&parsed),        vec![first, second]    );}#[test]fn parse_memory_citation_supports_rollout_ids() {    let thread_id = ThreadId::new();    let citations = vec![format!(        "<memory_citation>\n<rollout_ids>\n{thread_id}\n</rollout_ids>\n</memory_citation>"    )];    let parsed = parse_memory_citation(citations).expect("memory citation should parse");    assert_eq!(thread_ids_from_memory_citation(&parsed), vec![thread_id]);}#[test]fn parse_memory_citation_extracts_entries_and_rollout_ids() {    let first = ThreadId::new();    let second = ThreadId::new();    let citations = vec![format!(        "<citation_entries>\nMEMORY.md:1-2|note=[summary]\nrollout_summaries/foo.md:10-12|note=[details]\n</citation_entries>\n<rollout_ids>\n{first}\n{second}\n{first}\n</rollout_ids>"    )];    let parsed = parse_memory_citation(citations).expect("memory citation should parse");    assert_eq!(        parsed            .entries            .iter()            .map(|entry| (                entry.path.clone(),                entry.line_start,                entry.line_end,                entry.note.clone(),            ))            .collect::<Vec<_>>(),        vec![            ("MEMORY.md".to_string(), 1, 2, "summary".to_string()),            (                "rollout_summaries/foo.md".to_string(),                10,                12,                "details".to_string()            ),        ]    );    assert_eq!(        parsed.rollout_ids,        vec![first.to_string(), second.to_string()]    );}