diff options
author | Antoine Pitrou <pitrou@free.fr> | 2017-06-03 10:32:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-03 10:32:28 (GMT) |
commit | 3c2817b6884a5fcf792197203f3c26b157210607 (patch) | |
tree | 36f32bf5581fb14a60257630be600cc1077a260c /Lib/test/test_io.py | |
parent | ae8750bca8234a9af9382b9d7e457b57f810ad64 (diff) | |
download | cpython-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.py | 51 |
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 |