Author: Armin Rigo <ar...@tunes.org> Branch: py3.5 Changeset: r89473:26d691d3df32 Date: 2017-01-10 12:42 +0100 http://bitbucket.org/pypy/pypy/changeset/26d691d3df32/
Log: readinto1(), and fix expected error messages for readinto() test diff --git a/pypy/module/_io/interp_bufferedio.py b/pypy/module/_io/interp_bufferedio.py --- a/pypy/module/_io/interp_bufferedio.py +++ b/pypy/module/_io/interp_bufferedio.py @@ -107,18 +107,25 @@ self._unsupportedoperation(space, "detach") def readinto_w(self, space, w_buffer): + return self._readinto(space, w_buffer, "read") + + def readinto1_w(self, space, w_buffer): + return self._readinto(space, w_buffer, "read1") + + def _readinto(self, space, w_buffer, methodname): rwbuffer = space.getarg_w('w*', w_buffer) length = rwbuffer.getlength() - w_data = space.call_method(self, "read", space.wrap(length)) + w_data = space.call_method(self, methodname, space.wrap(length)) if not space.isinstance_w(w_data, space.w_str): - raise oefmt(space.w_TypeError, "read() should return bytes") + raise oefmt(space.w_TypeError, "%s() should return bytes", + methodname) data = space.bytes_w(w_data) if len(data) > length: raise oefmt(space.w_ValueError, - "read() returned too much data: " + "%s() returned too much data: " "%d bytes requested, %d returned", - length, len(data)) + methodname, length, len(data)) rwbuffer.setslice(0, data) return space.wrap(len(data)) @@ -144,6 +151,7 @@ write = interp2app(W_BufferedIOBase.write_w), detach = interp2app(W_BufferedIOBase.detach_w), readinto = interp2app(W_BufferedIOBase.readinto_w), + readinto1 = interp2app(W_BufferedIOBase.readinto1_w), ) class RawBuffer(Buffer): diff --git a/pypy/module/_io/interp_bytesio.py b/pypy/module/_io/interp_bytesio.py --- a/pypy/module/_io/interp_bytesio.py +++ b/pypy/module/_io/interp_bytesio.py @@ -83,9 +83,6 @@ limit = convert_size(space, w_limit) return space.newbytes(self.readline(limit)) - def read1_w(self, space, w_size): - return self.read_w(space, w_size) - def readinto_w(self, space, w_buffer): self._check_closed(space) rwbuffer = space.getarg_w('w*', w_buffer) @@ -203,9 +200,10 @@ __init__ = interp2app(W_BytesIO.descr_init), read = interp2app(W_BytesIO.read_w), - read1 = interp2app(W_BytesIO.read1_w), + read1 = interp2app(W_BytesIO.read_w), readline = interp2app(W_BytesIO.readline_w), readinto = interp2app(W_BytesIO.readinto_w), + readinto1 = interp2app(W_BytesIO.readinto_w), write = interp2app(W_BytesIO.write_w), truncate = interp2app(W_BytesIO.truncate_w), getbuffer = interp2app(W_BytesIO.getbuffer_w), diff --git a/pypy/module/_io/test/test_bufferedio.py b/pypy/module/_io/test/test_bufferedio.py --- a/pypy/module/_io/test/test_bufferedio.py +++ b/pypy/module/_io/test/test_bufferedio.py @@ -152,19 +152,28 @@ def test_readinto(self): import _io - a = bytearray(b'x' * 10) - raw = _io.FileIO(self.tmpfile) - f = _io.BufferedReader(raw) - assert f.readinto(a) == 5 - f.seek(0) - m = memoryview(bytearray(b"hello")) - assert f.readinto(m) == 5 - exc = raises(TypeError, f.readinto, u"hello") - assert str(exc.value) == "must be read-write buffer, not str" - exc = raises(TypeError, f.readinto, memoryview(b"hello")) - assert str(exc.value) == "must be read-write buffer, not memoryview" - f.close() - assert a == b'a\nb\ncxxxxx' + for methodname in ["readinto", "readinto1"]: + a = bytearray(b'x' * 10) + raw = _io.FileIO(self.tmpfile) + f = _io.BufferedReader(raw) + readinto = getattr(f, methodname) + assert readinto(a) == 5 + f.seek(0) + m = memoryview(bytearray(b"hello")) + assert readinto(m) == 5 + # + exc = raises(TypeError, readinto, u"hello") + msg = str(exc.value) + print(msg) + assert " read-write b" in msg and msg.endswith(", not str") + # + exc = raises(TypeError, readinto, memoryview(b"hello")) + msg = str(exc.value) + print(msg) + assert " read-write b" in msg and msg.endswith(", not memoryview") + # + f.close() + assert a == b'a\nb\ncxxxxx' def test_readinto_buffer_overflow(self): import _io diff --git a/pypy/module/_io/test/test_bytesio.py b/pypy/module/_io/test/test_bytesio.py --- a/pypy/module/_io/test/test_bytesio.py +++ b/pypy/module/_io/test/test_bytesio.py @@ -98,23 +98,31 @@ def test_readinto(self): import _io - - b = _io.BytesIO(b"hello") - a1 = bytearray(b't') - a2 = bytearray(b'testing') - assert b.readinto(a1) == 1 - assert b.readinto(a2) == 4 - b.seek(0) - m = memoryview(bytearray(b"world")) - assert b.readinto(m) == 5 - exc = raises(TypeError, b.readinto, u"hello") - assert str(exc.value) == "must be read-write buffer, not str" - exc = raises(TypeError, b.readinto, memoryview(b"hello")) - assert str(exc.value) == "must be read-write buffer, not memoryview" - b.close() - assert a1 == b"h" - assert a2 == b"elloing" - raises(ValueError, b.readinto, bytearray(b"hello")) + for methodname in ["readinto", "readinto1"]: + b = _io.BytesIO(b"hello") + readinto = getattr(b, methodname) + a1 = bytearray(b't') + a2 = bytearray(b'testing') + assert readinto(a1) == 1 + assert readinto(a2) == 4 + b.seek(0) + m = memoryview(bytearray(b"world")) + assert readinto(m) == 5 + # + exc = raises(TypeError, readinto, u"hello") + msg = str(exc.value) + print(msg) + assert " read-write b" in msg and msg.endswith(", not str") + # + exc = raises(TypeError, readinto, memoryview(b"hello")) + msg = str(exc.value) + print(msg) + assert " read-write b" in msg and msg.endswith(", not memoryview") + # + b.close() + assert a1 == b"h" + assert a2 == b"elloing" + raises(ValueError, readinto, bytearray(b"hello")) def test_getbuffer(self): import _io _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit