1 use futures::executor::block_on;
2 use futures::io::{AsyncWriteExt, LineWriter};
3 use std::io;
4 
5 #[test]
line_writer()6 fn line_writer() {
7     let mut writer = LineWriter::new(Vec::new());
8 
9     block_on(writer.write(&[0])).unwrap();
10     assert_eq!(*writer.get_ref(), []);
11 
12     block_on(writer.write(&[1])).unwrap();
13     assert_eq!(*writer.get_ref(), []);
14 
15     block_on(writer.flush()).unwrap();
16     assert_eq!(*writer.get_ref(), [0, 1]);
17 
18     block_on(writer.write(&[0, b'\n', 1, b'\n', 2])).unwrap();
19     assert_eq!(*writer.get_ref(), [0, 1, 0, b'\n', 1, b'\n']);
20 
21     block_on(writer.flush()).unwrap();
22     assert_eq!(*writer.get_ref(), [0, 1, 0, b'\n', 1, b'\n', 2]);
23 
24     block_on(writer.write(&[3, b'\n'])).unwrap();
25     assert_eq!(*writer.get_ref(), [0, 1, 0, b'\n', 1, b'\n', 2, 3, b'\n']);
26 }
27 
28 #[test]
line_vectored()29 fn line_vectored() {
30     let mut line_writer = LineWriter::new(Vec::new());
31     assert_eq!(
32         block_on(line_writer.write_vectored(&[
33             io::IoSlice::new(&[]),
34             io::IoSlice::new(b"\n"),
35             io::IoSlice::new(&[]),
36             io::IoSlice::new(b"a"),
37         ]))
38         .unwrap(),
39         2
40     );
41     assert_eq!(line_writer.get_ref(), b"\n");
42 
43     assert_eq!(
44         block_on(line_writer.write_vectored(&[
45             io::IoSlice::new(&[]),
46             io::IoSlice::new(b"b"),
47             io::IoSlice::new(&[]),
48             io::IoSlice::new(b"a"),
49             io::IoSlice::new(&[]),
50             io::IoSlice::new(b"c"),
51         ]))
52         .unwrap(),
53         3
54     );
55     assert_eq!(line_writer.get_ref(), b"\n");
56     block_on(line_writer.flush()).unwrap();
57     assert_eq!(line_writer.get_ref(), b"\nabac");
58     assert_eq!(block_on(line_writer.write_vectored(&[])).unwrap(), 0);
59 
60     assert_eq!(
61         block_on(line_writer.write_vectored(&[
62             io::IoSlice::new(&[]),
63             io::IoSlice::new(&[]),
64             io::IoSlice::new(&[]),
65             io::IoSlice::new(&[]),
66         ]))
67         .unwrap(),
68         0
69     );
70 
71     assert_eq!(block_on(line_writer.write_vectored(&[io::IoSlice::new(b"a\nb")])).unwrap(), 3);
72     assert_eq!(line_writer.get_ref(), b"\nabaca\nb");
73 }
74