summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_io.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_io.py')
-rw-r--r--Lib/test/test_io.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 42dbbd3..6c30a44 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -1703,6 +1703,23 @@ class BufferedWriterTest(unittest.TestCase, CommonBufferedTests):
with self.open(support.TESTFN, "rb", buffering=0) as f:
self.assertEqual(f.read(), b"abc")
+ def test_truncate_after_write(self):
+ # Ensure that truncate preserves the file position after
+ # writes longer than the buffer size.
+ # Issue: https://bugs.python.org/issue32228
+ with self.open(support.TESTFN, "wb") as f:
+ # Fill with some buffer
+ f.write(b'\x00' * 10000)
+ buffer_sizes = [8192, 4096, 200]
+ for buffer_size in buffer_sizes:
+ with self.open(support.TESTFN, "r+b", buffering=buffer_size) as f:
+ f.write(b'\x00' * (buffer_size + 1))
+ # After write write_pos and write_end are set to 0
+ f.read(1)
+ # read operation makes sure that pos != raw_pos
+ f.truncate()
+ self.assertEqual(f.tell(), buffer_size + 2)
+
@unittest.skipUnless(threading, 'Threading required for this test.')
@support.requires_resource('cpu')
def test_threads(self):