@@ -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