@@ -322,6 +322,21 @@ mod test {
322322 fn write ( & mut self , _: & [ u8 ] ) { }
323323 }
324324
325+ /// A dummy reader intended at testing short-reads propagation.
326+ pub struct ShortReader {
327+ priv lengths : ~[ uint ] ,
328+ }
329+
330+ impl Reader for ShortReader {
331+ fn read ( & mut self , _: & mut [ u8 ] ) -> Option < uint > {
332+ self . lengths . shift_opt ( )
333+ }
334+
335+ fn eof ( & mut self ) -> bool {
336+ self . lengths . len ( ) == 0
337+ }
338+ }
339+
325340 #[ test]
326341 fn test_buffered_reader ( ) {
327342 let inner = MemReader :: new ( ~[ 0 , 1 , 2 , 3 , 4 ] ) ;
@@ -475,6 +490,19 @@ mod test {
475490 assert_eq ! ( it. next( ) , None ) ;
476491 }
477492
493+ #[ test]
494+ fn test_short_reads ( ) {
495+ let inner = ShortReader { lengths : ~[ 0 , 1 , 2 , 0 , 1 , 0 ] } ;
496+ let mut reader = BufferedReader :: new ( inner) ;
497+ let mut buf = [ 0 , 0 ] ;
498+ assert_eq ! ( reader. read( buf) , Some ( 0 ) ) ;
499+ assert_eq ! ( reader. read( buf) , Some ( 1 ) ) ;
500+ assert_eq ! ( reader. read( buf) , Some ( 2 ) ) ;
501+ assert_eq ! ( reader. read( buf) , Some ( 0 ) ) ;
502+ assert_eq ! ( reader. read( buf) , Some ( 1 ) ) ;
503+ assert_eq ! ( reader. read( buf) , None ) ;
504+ }
505+
478506
479507 #[ bench]
480508 fn bench_buffered_reader ( bh : & mut Harness ) {
0 commit comments