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