bpo-35950: Raise UnsupportedOperation in BufferedReader.truncate() (GH-18586)
The truncate() method of io.BufferedReader() should raise
UnsupportedOperation when it is called on a read-only
io.BufferedReader() instance.
https://bugs.python.org/issue35950
Automerge-Triggered-By: @methane
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 0bfa4d2..c27dfd9 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -1528,6 +1528,13 @@
self.assertRaises(ValueError, b.peek)
self.assertRaises(ValueError, b.read1, 1)
+ def test_truncate_on_read_only(self):
+ rawio = self.MockFileIO(b"abc")
+ bufio = self.tp(rawio)
+ self.assertFalse(bufio.writable())
+ self.assertRaises(self.UnsupportedOperation, bufio.truncate)
+ self.assertRaises(self.UnsupportedOperation, bufio.truncate, 0)
+
class CBufferedReaderTest(BufferedReaderTest, SizeofTest):
tp = io.BufferedReader
@@ -2372,6 +2379,10 @@
# You can't construct a BufferedRandom over a non-seekable stream.
test_unseekable = None
+ # writable() returns True, so there's no point to test it over
+ # a writable stream.
+ test_truncate_on_read_only = None
+
class CBufferedRandomTest(BufferedRandomTest, SizeofTest):
tp = io.BufferedRandom