diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/io.py | 45 | ||||
-rw-r--r-- | Lib/test/test_codecs.py | 7 |
2 files changed, 33 insertions, 19 deletions
@@ -581,10 +581,10 @@ class BytesIO(_MemoryIOMixin): # XXX More docs - def __init__(self, inital_bytes=None): + def __init__(self, initial_bytes=None): buffer = b"" - if inital_bytes is not None: - buffer += inital_bytes + if initial_bytes is not None: + buffer += initial_bytes _MemoryIOMixin.__init__(self, buffer) @@ -595,21 +595,36 @@ class StringIO(_MemoryIOMixin): # XXX More docs - # Reuses the same code as BytesIO, just with a string rather that - # bytes as the _buffer value. + # Reuses the same code as BytesIO, but encode strings on the way in + # and decode them on the way out. - # XXX This doesn't work; _MemoryIOMixin's write() and truncate() - # methods assume the buffer is mutable. Simply redefining those - # to use slice concatenation will make it awfully slow (in fact, - # quadratic in the number of write() calls). Also, there are no - # readline() and readlines() methods. Etc., etc. - - def __init__(self, inital_string=None): - buffer = "" - if inital_string is not None: - buffer += inital_string + def __init__(self, initial_string=None): + if initial_string is not None: + buffer = initial_string.encode("unicode-internal") + else: + buffer = b"" _MemoryIOMixin.__init__(self, buffer) + def getvalue(self): + return self._buffer.encode("unicode-internal") + + def read(self, n=-1): + return super(StringIO, self).read(n*2).decode("unicode-internal") + + def write(self, s): + return super(StringIO, self).write(s.encode("unicode-internal"))//2 + + def seek(self, pos, whence=0): + return super(StringIO, self).seek(2*pos, whence)//2 + + def tell(self): + return super(StringIO, self).tell()//2 + + def truncate(self, pos=None): + if pos is not None: + pos *= 2 + return super(StringIO, self).truncate(pos)//2 + def readinto(self, b: bytes) -> int: self._unsupported("readinto") diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index f61cc33..03be34c 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -2,7 +2,6 @@ from test import test_support import unittest import codecs import sys, _testcapi, io -from StringIO import StringIO class Queue(object): """ @@ -493,7 +492,7 @@ class EscapeDecodeTest(unittest.TestCase): class RecodingTest(unittest.TestCase): def test_recoding(self): - f = StringIO() + f = io.StringIO() f2 = codecs.EncodedFile(f, "unicode_internal", "utf-8") f2.write("a") f2.close() @@ -991,14 +990,14 @@ class Str2StrTest(unittest.TestCase): def test_read(self): sin = "\x80".encode("base64_codec") - reader = codecs.getreader("base64_codec")(StringIO(sin)) + reader = codecs.getreader("base64_codec")(io.BytesIO(sin)) sout = reader.read() self.assertEqual(sout, "\x80") self.assert_(isinstance(sout, str)) def test_readline(self): sin = "\x80".encode("base64_codec") - reader = codecs.getreader("base64_codec")(StringIO(sin)) + reader = codecs.getreader("base64_codec")(io.BytesIO(sin)) sout = reader.readline() self.assertEqual(sout, "\x80") self.assert_(isinstance(sout, str)) |