summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@sequoia-pgp.org>2024-04-12 10:40:25 +0200
committerNeal H. Walfield <neal@sequoia-pgp.org>2024-04-12 10:50:11 +0200
commit4d46a45f6e30d323917184c483b9f8cf53c369e3 (patch)
treef3cad89878a0843c8b437bbf75da274c1980fb6c
parent31cbb3c3b49da561ca7d011a04a48249322e7d48 (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.rs52
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";