diff --git a/tokio-xmpp/src/xmlstream/capture.rs b/tokio-xmpp/src/xmlstream/capture.rs index 5b809bf20037735598d602cabc483acd236eb592..686c15360df72c8c404974f72c22b32ac6c7e499 100644 --- a/tokio-xmpp/src/xmlstream/capture.rs +++ b/tokio-xmpp/src/xmlstream/capture.rs @@ -202,3 +202,75 @@ pub(super) fn log_recv(err: Option<&xmpp_parsers::Error>, capture: Option must return zero. + assert_eq!(Pin::new(&mut src).take_capture().unwrap().len(), 0); + + src.consume(5); + assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b"Hello"); + + src.consume(6); + assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b" World"); + } + + #[tokio::test] + async fn discard_capture_drops_consumed_data() { + let mut src = &b"Hello World!"[..]; + let src = tokio::io::BufReader::new(&mut src); + let mut src = CaptureBufRead::wrap(src); + src.enable_capture(); + + assert_eq!(src.fill_buf().await.unwrap().len(), 12); + // We haven't consumed any bytes yet -> must return zero. + assert_eq!(Pin::new(&mut src).take_capture().unwrap().len(), 0); + + src.consume(5); + Pin::new(&mut src).discard_capture(); + + src.consume(6); + assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b" World"); + } + + #[tokio::test] + async fn captured_data_accumulates() { + let mut src = &b"Hello World!"[..]; + let src = tokio::io::BufReader::new(&mut src); + let mut src = CaptureBufRead::wrap(src); + src.enable_capture(); + + assert_eq!(src.fill_buf().await.unwrap().len(), 12); + // We haven't consumed any bytes yet -> must return zero. + assert_eq!(Pin::new(&mut src).take_capture().unwrap().len(), 0); + + src.consume(5); + src.consume(6); + assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b"Hello World"); + } +}