about summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorSteven Allen <steven@stebalien.com>2016-03-07 18:00:22 -0500
committerSteven Allen <steven@stebalien.com>2016-03-07 18:00:22 -0500
commitc516335815c0bda958d81ca5f964473c212e5a4d (patch)
treeef38712cf12669d7bb40da734c050ff90ac2f406 /src/libstd/io
parent6ea8222913de9f628edac825c1f3d599762aa96f (diff)
downloadrust-c516335815c0bda958d81ca5f964473c212e5a4d.tar.gz
rust-c516335815c0bda958d81ca5f964473c212e5a4d.zip
Add test case for #32085
Diffstat (limited to 'src/libstd/io')
-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 bc26b63c153..08877fe9744 100644
--- a/src/libstd/io/buffered.rs
+++ b/src/libstd/io/buffered.rs
@@ -985,6 +985,34 @@ mod tests {
     }
 
     #[test]
+    fn test_line_buffer_fail_flush() {
+        // Issue #32085
+        struct FailFlushWriter<'a>(&'a mut Vec<u8>);
+
+        impl<'a> Write for FailFlushWriter<'a> {
+            fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+                self.0.extend_from_slice(buf);
+                Ok(buf.len())
+            }
+            fn flush(&mut self) -> io::Result<()> {
+                Err(io::Error::new(io::ErrorKind::Other, "flush failed"))
+            }
+        }
+
+        let mut buf = Vec::new();
+        {
+            let mut writer = LineWriter::new(FailFlushWriter(&mut buf));
+            let to_write = b"abc\ndef";
+            if let Ok(written) = writer.write(to_write) {
+                assert!(written < to_write.len(), "didn't flush on new line");
+                // PASS
+                return;
+            }
+        }
+        assert!(buf.is_empty(), "write returned an error but wrote data");
+    }
+
+    #[test]
     fn test_line_buffer() {
         let mut writer = LineWriter::new(Vec::new());
         writer.write(&[0]).unwrap();