Author: Philip Jenvey <pjen...@underboss.org> Branch: py3k Changeset: r71291:7549430fa354 Date: 2014-05-05 13:01 -0700 http://bitbucket.org/pypy/pypy/changeset/7549430fa354/
Log: use the new buffer interface, adapt tests diff --git a/pypy/module/struct/interp_struct.py b/pypy/module/struct/interp_struct.py --- a/pypy/module/struct/interp_struct.py +++ b/pypy/module/struct/interp_struct.py @@ -92,11 +92,7 @@ @unwrap_spec(format=str, offset=int) def unpack_from(space, format, w_buffer, offset=0): size = _calcsize(space, format) - buf = space.getarg_w('z*', w_buffer) - if buf is None: - w_module = space.getbuiltinmodule('struct') - w_error = space.getattr(w_module, space.wrap('error')) - raise oefmt(w_error, "unpack_from requires a buffer argument") + buf = space.buffer_w(w_buffer, space.BUF_SIMPLE) if offset < 0: offset += buf.getlength() if offset < 0 or (buf.getlength() - offset) < size: diff --git a/pypy/module/struct/test/test_struct.py b/pypy/module/struct/test/test_struct.py --- a/pypy/module/struct/test/test_struct.py +++ b/pypy/module/struct/test/test_struct.py @@ -354,32 +354,33 @@ def test_pack_unpack_buffer(self): import array - b = array.array('c', '\x00' * 19) + b = array.array('b', b'\x00' * 19) sz = self.struct.calcsize("ii") for offset in [2, -17]: self.struct.pack_into("ii", b, offset, 17, 42) - assert str(buffer(b)) == ('\x00' * 2 + - self.struct.pack("ii", 17, 42) + - '\x00' * (19-sz-2)) - exc = raises(TypeError, self.struct.pack_into, "ii", buffer(b), 0, 17, 42) - assert str(exc.value) == "buffer is read-only" + assert bytes(memoryview(b)) == (b'\x00' * 2 + + self.struct.pack("ii", 17, 42) + + b'\x00' * (19-sz-2)) + b2 = array.array('b', b'\x00' * 19) + self.struct.pack_into("ii", memoryview(b2), 0, 17, 42) + assert bytes(b2) == self.struct.pack("ii", 17, 42) + (b'\x00' * 11) + exc = raises(TypeError, self.struct.pack_into, "ii", 'test', 0, 17, 42) - assert str(exc.value) == "Cannot use string as modifiable buffer" + assert str(exc.value) == "expected an object with a writable buffer interface" exc = raises(self.struct.error, self.struct.pack_into, "ii", b[0:1], 0, 17, 42) assert str(exc.value) == "pack_into requires a buffer of at least 8 bytes" assert self.struct.unpack_from("ii", b, 2) == (17, 42) assert self.struct.unpack_from("ii", b, -17) == (17, 42) - assert self.struct.unpack_from("ii", buffer(b, 2)) == (17, 42) - assert self.struct.unpack_from("ii", buffer(b), 2) == (17, 42) - assert self.struct.unpack_from("ii", memoryview(buffer(b)), 2) == (17, 42) + assert self.struct.unpack_from("ii", memoryview(b)[2:]) == (17, 42) + assert self.struct.unpack_from("ii", memoryview(b), 2) == (17, 42) exc = raises(TypeError, self.struct.unpack_from, "ii", 123) - assert 'must be string or buffer, not int' in str(exc.value) - exc = raises(self.struct.error, self.struct.unpack_from, "ii", None) - assert str(exc.value) == "unpack_from requires a buffer argument" - exc = raises(self.struct.error, self.struct.unpack_from, "ii", '') + assert str(exc.value) == "'int' does not support the buffer interface" + exc = raises(TypeError, self.struct.unpack_from, "ii", None) + assert str(exc.value) == "'NoneType' does not support the buffer interface" + exc = raises(self.struct.error, self.struct.unpack_from, "ii", b'') assert str(exc.value) == "unpack_from requires a buffer of at least 8 bytes" - exc = raises(self.struct.error, self.struct.unpack_from, "ii", memoryview('')) + exc = raises(self.struct.error, self.struct.unpack_from, "ii", memoryview(b'')) assert str(exc.value) == "unpack_from requires a buffer of at least 8 bytes" def test___float__(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit