Codex Handbook
rmcp-client/src/executor_process_transport_tests.rs 72 lines
use bytes::BytesMut;use pretty_assertions::assert_eq;use super::LineBuffer;#[test]fn searches_only_new_bytes_after_partial_line() {    let mut buffer = LineBuffer::default();    buffer.extend_from_slice(b"partial");    assert_eq!(buffer.take_line(), None);    assert_eq!(        buffer,        LineBuffer {            bytes: BytesMut::from(&b"partial"[..]),            scanned_len: 7,        }    );    buffer.extend_from_slice(b" line");    assert_eq!(buffer.take_line(), None);    assert_eq!(        buffer,        LineBuffer {            bytes: BytesMut::from(&b"partial line"[..]),            scanned_len: 12,        }    );    buffer.extend_from_slice(b"\nnext");    assert_eq!(        buffer.take_line(),        Some(BytesMut::from(&b"partial line"[..]))    );    assert_eq!(        buffer,        LineBuffer {            bytes: BytesMut::from(&b"next"[..]),            scanned_len: 0,        }    );}#[test]fn splits_multiple_lines_and_retains_partial_tail() {    let mut buffer = LineBuffer::default();    buffer.extend_from_slice(b"first\nsecond\npartial");    assert_eq!(buffer.take_line(), Some(BytesMut::from(&b"first"[..])));    assert_eq!(buffer.take_line(), Some(BytesMut::from(&b"second"[..])));    assert_eq!(buffer.take_line(), None);    assert_eq!(        buffer,        LineBuffer {            bytes: BytesMut::from(&b"partial"[..]),            scanned_len: 7,        }    );}#[test]fn takes_unterminated_remaining_bytes_at_eof() {    let mut buffer = LineBuffer::default();    buffer.extend_from_slice(b"remaining");    assert_eq!(buffer.take_line(), None);    assert_eq!(        buffer.take_remaining(),        Some(BytesMut::from(&b"remaining"[..]))    );    assert_eq!(buffer, LineBuffer::default());}