Skip to content

Commit 4a11249

Browse files
committed
Add tests
1 parent f342675 commit 4a11249

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

std/src/io/tests.rs

+63
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,69 @@ fn read_buf_full_read() {
735735
assert_eq!(BufReader::new(FullRead).fill_buf().unwrap().len(), DEFAULT_BUF_SIZE);
736736
}
737737

738+
struct DataAndErrorReader(&'static [u8]);
739+
740+
impl Read for DataAndErrorReader {
741+
fn read(&mut self, _buf: &mut [u8]) -> io::Result<usize> {
742+
panic!("We want tests to use `read_buf`")
743+
}
744+
745+
fn read_buf(&mut self, buf: io::BorrowedCursor<'_>) -> io::Result<()> {
746+
self.0.read_buf(buf).unwrap();
747+
Err(io::Error::other("error"))
748+
}
749+
}
750+
751+
#[test]
752+
fn read_buf_data_and_error_take() {
753+
let mut buf = [0; 64];
754+
let mut buf = io::BorrowedBuf::from(buf.as_mut_slice());
755+
756+
let mut r = DataAndErrorReader(&[4, 5, 6]).take(1);
757+
assert!(r.read_buf(buf.unfilled()).is_err());
758+
assert_eq!(buf.filled(), &[4]);
759+
760+
assert!(r.read_buf(buf.unfilled()).is_ok());
761+
assert_eq!(buf.filled(), &[4]);
762+
assert_eq!(r.get_ref().0, &[5, 6]);
763+
}
764+
765+
#[test]
766+
fn read_buf_data_and_error_buf() {
767+
let mut r = BufReader::new(DataAndErrorReader(&[4, 5, 6]));
768+
769+
assert!(r.fill_buf().is_err());
770+
assert_eq!(r.fill_buf().unwrap(), &[4, 5, 6]);
771+
}
772+
773+
#[test]
774+
fn read_buf_data_and_error_read_to_end() {
775+
let mut r = DataAndErrorReader(&[4, 5, 6]);
776+
777+
let mut v = Vec::with_capacity(200);
778+
assert!(r.read_to_end(&mut v).is_err());
779+
780+
assert_eq!(v, &[4, 5, 6]);
781+
}
782+
783+
#[test]
784+
fn read_to_end_error() {
785+
struct ErrorReader;
786+
787+
impl Read for ErrorReader {
788+
fn read(&mut self, _buf: &mut [u8]) -> io::Result<usize> {
789+
Err(io::Error::other("error"))
790+
}
791+
}
792+
793+
let mut r = [4, 5, 6].chain(ErrorReader);
794+
795+
let mut v = Vec::with_capacity(200);
796+
assert!(r.read_to_end(&mut v).is_err());
797+
798+
assert_eq!(v, &[4, 5, 6]);
799+
}
800+
738801
#[test]
739802
// Miri does not support signalling OOM
740803
#[cfg_attr(miri, ignore)]

0 commit comments

Comments
 (0)