use futures::executor::block_on; use futures::io::{AsyncWriteExt, LineWriter}; use std::io; #[test] fn line_writer() { let mut writer = LineWriter::new(Vec::new()); block_on(writer.write(&[0])).unwrap(); assert_eq!(*writer.get_ref(), []); block_on(writer.write(&[1])).unwrap(); assert_eq!(*writer.get_ref(), []); block_on(writer.flush()).unwrap(); assert_eq!(*writer.get_ref(), [0, 1]); block_on(writer.write(&[0, b'\n', 1, b'\n', 2])).unwrap(); assert_eq!(*writer.get_ref(), [0, 1, 0, b'\n', 1, b'\n']); block_on(writer.flush()).unwrap(); assert_eq!(*writer.get_ref(), [0, 1, 0, b'\n', 1, b'\n', 2]); block_on(writer.write(&[3, b'\n'])).unwrap(); assert_eq!(*writer.get_ref(), [0, 1, 0, b'\n', 1, b'\n', 2, 3, b'\n']); } #[test] fn line_vectored() { let mut line_writer = LineWriter::new(Vec::new()); assert_eq!( block_on(line_writer.write_vectored(&[ io::IoSlice::new(&[]), io::IoSlice::new(b"\n"), io::IoSlice::new(&[]), io::IoSlice::new(b"a"), ])) .unwrap(), 2 ); assert_eq!(line_writer.get_ref(), b"\n"); assert_eq!( block_on(line_writer.write_vectored(&[ io::IoSlice::new(&[]), io::IoSlice::new(b"b"), io::IoSlice::new(&[]), io::IoSlice::new(b"a"), io::IoSlice::new(&[]), io::IoSlice::new(b"c"), ])) .unwrap(), 3 ); assert_eq!(line_writer.get_ref(), b"\n"); block_on(line_writer.flush()).unwrap(); assert_eq!(line_writer.get_ref(), b"\nabac"); assert_eq!(block_on(line_writer.write_vectored(&[])).unwrap(), 0); assert_eq!( block_on(line_writer.write_vectored(&[ io::IoSlice::new(&[]), io::IoSlice::new(&[]), io::IoSlice::new(&[]), io::IoSlice::new(&[]), ])) .unwrap(), 0 ); assert_eq!(block_on(line_writer.write_vectored(&[io::IoSlice::new(b"a\nb")])).unwrap(), 3); assert_eq!(line_writer.get_ref(), b"\nabaca\nb"); }