[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