about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSébastien Paolacci <sebastien.paolacci@gmail.com>2013-12-22 19:07:08 +0100
committerSébastien Paolacci <sebastien.paolacci@gmail.com>2013-12-23 09:35:52 +0100
commitee887d70780bce4c89a8977d04f724064ee1ae8f (patch)
tree3d1d5047924d35164847eea2ceb00410447fa92e
parentcab687853a63198e5de9aa094d4ac01d068d0285 (diff)
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'.
-rw-r--r--src/libstd/io/buffered.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs
index 6350fabb018..df52f036d46 100644
--- a/src/libstd/io/buffered.rs
+++ b/src/libstd/io/buffered.rs
@@ -322,6 +322,21 @@ mod test {
         fn write(&mut self, _: &[u8]) { }
     }
 
+    /// A dummy reader intended at testing short-reads propagation.
+    pub struct ShortReader {
+        priv lengths: ~[uint],
+    }
+
+    impl Reader for ShortReader {
+        fn read(&mut self, _: &mut [u8]) -> Option<uint> {
+            self.lengths.shift_opt()
+        }
+
+        fn eof(&mut self) -> bool {
+            self.lengths.len() == 0
+        }
+    }
+
     #[test]
     fn test_buffered_reader() {
         let inner = MemReader::new(~[0, 1, 2, 3, 4]);
@@ -475,6 +490,19 @@ mod test {
         assert_eq!(it.next(), None);
     }
 
+    #[test]
+    fn test_short_reads() {
+        let inner = ShortReader{lengths: ~[0, 1, 2, 0, 1, 0]};
+        let mut reader = BufferedReader::new(inner);
+        let mut buf = [0, 0];
+        assert_eq!(reader.read(buf), Some(0));
+        assert_eq!(reader.read(buf), Some(1));
+        assert_eq!(reader.read(buf), Some(2));
+        assert_eq!(reader.read(buf), Some(0));
+        assert_eq!(reader.read(buf), Some(1));
+        assert_eq!(reader.read(buf), None);
+    }
+
 
     #[bench]
     fn bench_buffered_reader(bh: &mut Harness) {