mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #12591: Allow io.TextIOWrapper to work with raw IO objects (without
a read1() method), and add a *write_through* parameter to mandate unbuffered writes.
This commit is contained in:
commit
d42c1d09e9
4 changed files with 45 additions and 8 deletions
|
@ -2314,6 +2314,27 @@ class TextIOWrapperTest(unittest.TestCase):
|
|||
with self.assertRaises(AttributeError):
|
||||
txt.buffer = buf
|
||||
|
||||
def test_rawio(self):
|
||||
# Issue #12591: TextIOWrapper must work with raw I/O objects, so
|
||||
# that subprocess.Popen() can have the required unbuffered
|
||||
# semantics with universal_newlines=True.
|
||||
raw = self.MockRawIO([b'abc', b'def', b'ghi\njkl\nopq\n'])
|
||||
txt = self.TextIOWrapper(raw, encoding='ascii', newline='\n')
|
||||
# Reads
|
||||
self.assertEqual(txt.read(4), 'abcd')
|
||||
self.assertEqual(txt.readline(), 'efghi\n')
|
||||
self.assertEqual(list(txt), ['jkl\n', 'opq\n'])
|
||||
|
||||
def test_rawio_write_through(self):
|
||||
# Issue #12591: with write_through=True, writes don't need a flush
|
||||
raw = self.MockRawIO([b'abc', b'def', b'ghi\njkl\nopq\n'])
|
||||
txt = self.TextIOWrapper(raw, encoding='ascii', newline='\n',
|
||||
write_through=True)
|
||||
txt.write('1')
|
||||
txt.write('23\n4')
|
||||
txt.write('5')
|
||||
self.assertEqual(b''.join(raw._write_stack), b'123\n45')
|
||||
|
||||
class CTextIOWrapperTest(TextIOWrapperTest):
|
||||
|
||||
def test_initialization(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue