@@ -735,6 +735,69 @@ fn read_buf_full_read() {
735
735
assert_eq ! ( BufReader :: new( FullRead ) . fill_buf( ) . unwrap( ) . len( ) , DEFAULT_BUF_SIZE ) ;
736
736
}
737
737
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
+
738
801
#[ test]
739
802
// Miri does not support signalling OOM
740
803
#[ cfg_attr( miri, ignore) ]
0 commit comments