[pypy-commit] pypy refactor-buffer-api: test/fix bufferstr_w behavior

bdkearns noreply at buildbot.pypy.org
Thu Apr 24 03:56:23 CEST 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: refactor-buffer-api
Changeset: r70912:e2178919af90
Date: 2014-04-23 21:50 -0400
http://bitbucket.org/pypy/pypy/changeset/e2178919af90/

Log:	test/fix bufferstr_w behavior

diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -1408,7 +1408,11 @@
                         "expected a character buffer object")
 
     def _getarg_error(self, expected, w_obj):
-        raise oefmt(self.w_TypeError, "must be %s, not %T", expected, w_obj)
+        if self.is_none(w_obj):
+            name = "None"
+        else:
+            name = self.type(w_obj).getname(self)
+        raise oefmt(self.w_TypeError, "must be %s, not %s", expected, name)
 
     @specialize.arg(1)
     def getarg_w(self, code, w_obj):
@@ -1442,7 +1446,14 @@
         except OperationError, e:
             if not e.match(self, self.w_TypeError):
                 raise
-        return self.readbuf_w(w_obj).as_str()
+        try:
+            buf = w_obj.buffer_w(self, 0)
+        except TypeError:
+            try:
+                buf = w_obj.readbuf_w(self)
+            except TypeError:
+                self._getarg_error("string or buffer", w_obj)
+        return buf.as_str()
 
     def bufferchar_w(self, w_obj):
         try:
diff --git a/pypy/module/_socket/test/test_sock_app.py b/pypy/module/_socket/test/test_sock_app.py
--- a/pypy/module/_socket/test/test_sock_app.py
+++ b/pypy/module/_socket/test/test_sock_app.py
@@ -545,8 +545,12 @@
             s.connect(("www.python.org", 80))
         except _socket.gaierror, ex:
             skip("GAIError - probably no connection: %s" % str(ex.args))
+        exc = raises(TypeError, s.send, None)
+        assert str(exc.value) == "must be string or buffer, not None"
         assert s.send(buffer('')) == 0
         assert s.sendall(buffer('')) is None
+        assert s.send(memoryview('')) == 0
+        assert s.sendall(memoryview('')) is None
         assert s.send(u'') == 0
         assert s.sendall(u'') is None
         raises(UnicodeEncodeError, s.send, u'\xe9')


More information about the pypy-commit mailing list