[pypy-commit] pypy py3k: use the new buffer interface, adapt tests
pjenvey
noreply at buildbot.pypy.org
Tue May 6 00:19:03 CEST 2014
Author: Philip Jenvey <pjenvey at 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):
More information about the pypy-commit
mailing list