From 4d46a45f6e30d323917184c483b9f8cf53c369e3 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Fri, 12 Apr 2024 10:40:25 +0200 Subject: buffered-reader: Add a test. - Add a test to ensure that the `impl BufferedReader for &mut T` also works with cookies. --- buffered-reader/src/lib.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs index 49e93ea3..df241d39 100644 --- a/buffered-reader/src/lib.rs +++ b/buffered-reader/src/lib.rs @@ -1453,6 +1453,58 @@ mod test { assert_eq!(suffix, b"suffix"); } + #[test] + fn mutable_reference_with_cookie() { + use crate::Memory; + const DATA : &[u8] = b"01234567890123456789suffix"; + + /// API that consumes the memory reader. + fn parse_ten_bytes(mut r: B) + where B: BufferedReader, + C: std::fmt::Debug + Send + Sync + { + let d = r.data_consume_hard(10).unwrap(); + assert!(d.len() >= 10); + assert_eq!(&d[..10], &DATA[..10]); + drop(r); // We consumed the reader. + } + + #[derive(Debug)] + struct Cookie { + } + + impl Default for Cookie { + fn default() -> Self { Cookie {} } + } + + let mut mem = Memory::with_cookie(DATA, Cookie::default()); + parse_ten_bytes(&mut mem); + parse_ten_bytes(&mut mem); + let suffix = mem.data_eof().unwrap(); + assert_eq!(suffix, b"suffix"); + + let mut mem = Memory::with_cookie(DATA, Cookie::default()); + let mut limitor = Limitor::with_cookie( + &mut mem, 20, Cookie::default()); + parse_ten_bytes(&mut limitor); + parse_ten_bytes(&mut limitor); + assert!(limitor.eof()); + drop(limitor); + let suffix = mem.data_eof().unwrap(); + assert_eq!(suffix, b"suffix"); + + let mut mem = Memory::with_cookie(DATA, Cookie::default()); + let mut mem = Box::new(&mut mem) as Box>; + let mut limitor = Limitor::with_cookie( + &mut mem, 20, Cookie::default()); + parse_ten_bytes(&mut limitor); + parse_ten_bytes(&mut limitor); + assert!(limitor.eof()); + drop(limitor); + let suffix = mem.data_eof().unwrap(); + assert_eq!(suffix, b"suffix"); + } + #[test] fn mutable_reference_inner() { use crate::Memory; -- cgit v1.2.3