Skip to content

Commit ee887d7

Browse files
committed
Add tests for 0-byte read propagation.
The two `Some(0)' used to be `None' before the patch, a zero-byte long read exhausting a reader (and thereafter) still produce a `None'.
1 parent cab6878 commit ee887d7

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/libstd/io/buffered.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)