summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_io.py
diff options
context:
space:
mode:
authorAntoine Pitrou <pitrou@free.fr>2017-06-03 10:32:28 (GMT)
committerGitHub <noreply@github.com>2017-06-03 10:32:28 (GMT)
commit3c2817b6884a5fcf792197203f3c26b157210607 (patch)
tree36f32bf5581fb14a60257630be600cc1077a260c /Lib/test/test_io.py
parentae8750bca8234a9af9382b9d7e457b57f810ad64 (diff)
downloadcpython-3c2817b6884a5fcf792197203f3c26b157210607.zip
cpython-3c2817b6884a5fcf792197203f3c26b157210607.tar.gz
cpython-3c2817b6884a5fcf792197203f3c26b157210607.tar.bz2
Fix bpo-30526: Add TextIOWrapper.reconfigure() and a TextIOWrapper.write_through attribute (#1922)
* Fix bpo-30526: Add TextIOWrapper.reconfigure() * Apply Nick's improved wording * Update Misc/NEWS
Diffstat (limited to 'Lib/test/test_io.py')
-rw-r--r--Lib/test/test_io.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 69487a1..83d6c4e 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2440,6 +2440,7 @@ class TextIOWrapperTest(unittest.TestCase):
self.assertEqual(t.encoding, "ascii")
self.assertEqual(t.errors, "strict")
self.assertFalse(t.line_buffering)
+ self.assertFalse(t.write_through)
def test_repr(self):
raw = self.BytesIO("hello".encode("utf-8"))
@@ -2482,6 +2483,33 @@ class TextIOWrapperTest(unittest.TestCase):
t.write("A\rB")
self.assertEqual(r.getvalue(), b"XY\nZA\rB")
+ def test_reconfigure_line_buffering(self):
+ r = self.BytesIO()
+ b = self.BufferedWriter(r, 1000)
+ t = self.TextIOWrapper(b, newline="\n", line_buffering=False)
+ t.write("AB\nC")
+ self.assertEqual(r.getvalue(), b"")
+
+ t.reconfigure(line_buffering=True) # implicit flush
+ self.assertEqual(r.getvalue(), b"AB\nC")
+ t.write("DEF\nG")
+ self.assertEqual(r.getvalue(), b"AB\nCDEF\nG")
+ t.write("H")
+ self.assertEqual(r.getvalue(), b"AB\nCDEF\nG")
+ t.reconfigure(line_buffering=False) # implicit flush
+ self.assertEqual(r.getvalue(), b"AB\nCDEF\nGH")
+ t.write("IJ")
+ self.assertEqual(r.getvalue(), b"AB\nCDEF\nGH")
+
+ # Keeping default value
+ t.reconfigure()
+ t.reconfigure(line_buffering=None)
+ self.assertEqual(t.line_buffering, False)
+ t.reconfigure(line_buffering=True)
+ t.reconfigure()
+ t.reconfigure(line_buffering=None)
+ self.assertEqual(t.line_buffering, True)
+
def test_default_encoding(self):
old_environ = dict(os.environ)
try:
@@ -3164,6 +3192,29 @@ class TextIOWrapperTest(unittest.TestCase):
self.assertTrue(write_called)
self.assertEqual(rawio.getvalue(), data * 11) # all flushed
+ def test_reconfigure_write_through(self):
+ raw = self.MockRawIO([])
+ t = self.TextIOWrapper(raw, encoding='ascii', newline='\n')
+ t.write('1')
+ t.reconfigure(write_through=True) # implied flush
+ self.assertEqual(t.write_through, True)
+ self.assertEqual(b''.join(raw._write_stack), b'1')
+ t.write('23')
+ self.assertEqual(b''.join(raw._write_stack), b'123')
+ t.reconfigure(write_through=False)
+ self.assertEqual(t.write_through, False)
+ t.write('45')
+ t.flush()
+ self.assertEqual(b''.join(raw._write_stack), b'12345')
+ # Keeping default value
+ t.reconfigure()
+ t.reconfigure(write_through=None)
+ self.assertEqual(t.write_through, False)
+ t.reconfigure(write_through=True)
+ t.reconfigure()
+ t.reconfigure(write_through=None)
+ self.assertEqual(t.write_through, True)
+
def test_read_nonbytes(self):
# Issue #17106
# Crash when underlying read() returns non-bytes