1 use std::io;
2 use tokio::io::AsyncReadExt;
3 use tokio_test::io::Builder;
4
5 #[tokio::test]
to_string_does_not_truncate_on_utf8_error()6 async fn to_string_does_not_truncate_on_utf8_error() {
7 let data = vec![0xff, 0xff, 0xff];
8
9 let mut s = "abc".to_string();
10
11 match AsyncReadExt::read_to_string(&mut data.as_slice(), &mut s).await {
12 Ok(len) => panic!("Should fail: {} bytes.", len),
13 Err(err) if err.to_string() == "stream did not contain valid UTF-8" => {}
14 Err(err) => panic!("Fail: {}.", err),
15 }
16
17 assert_eq!(s, "abc");
18 }
19
20 #[tokio::test]
to_string_does_not_truncate_on_io_error()21 async fn to_string_does_not_truncate_on_io_error() {
22 let mut mock = Builder::new()
23 .read(b"def")
24 .read_error(io::Error::new(io::ErrorKind::Other, "whoops"))
25 .build();
26 let mut s = "abc".to_string();
27
28 match AsyncReadExt::read_to_string(&mut mock, &mut s).await {
29 Ok(len) => panic!("Should fail: {} bytes.", len),
30 Err(err) if err.to_string() == "whoops" => {}
31 Err(err) => panic!("Fail: {}.", err),
32 }
33
34 assert_eq!(s, "abc");
35 }
36
37 #[tokio::test]
to_string_appends()38 async fn to_string_appends() {
39 let data = b"def".to_vec();
40
41 let mut s = "abc".to_string();
42
43 let len = AsyncReadExt::read_to_string(&mut data.as_slice(), &mut s)
44 .await
45 .unwrap();
46
47 assert_eq!(len, 3);
48 assert_eq!(s, "abcdef");
49 }
50