diff options
author | Neal H. Walfield <neal@sequoia-pgp.org> | 2024-04-12 10:40:25 +0200 |
---|---|---|
committer | Neal H. Walfield <neal@sequoia-pgp.org> | 2024-04-12 10:50:11 +0200 |
commit | 4d46a45f6e30d323917184c483b9f8cf53c369e3 (patch) | |
tree | f3cad89878a0843c8b437bbf75da274c1980fb6c | |
parent | 31cbb3c3b49da561ca7d011a04a48249322e7d48 (diff) |
buffered-reader: Add a test.
- Add a test to ensure that the `impl BufferedReader<C> for &mut T`
also works with cookies.
-rw-r--r-- | buffered-reader/src/lib.rs | 52 |
1 files changed, 52 insertions, 0 deletions
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 @@ -1454,6 +1454,58 @@ mod test { } #[test] + fn mutable_reference_with_cookie() { + use crate::Memory; + const DATA : &[u8] = b"01234567890123456789suffix"; + + /// API that consumes the memory reader. + fn parse_ten_bytes<B, C>(mut r: B) + where B: BufferedReader<C>, + 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<dyn BufferedReader<Cookie>>; + 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; const DATA : &[u8] = b"01234567890123456789suffix"; |