[pypy-svn] r73604 - in pypy/branch/cpython-extension/pypy/module/cpyext: . test

fijal at codespeak.net fijal at codespeak.net
Fri Apr 9 22:29:52 CEST 2010


Author: fijal
Date: Fri Apr  9 22:29:50 2010
New Revision: 73604

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_api.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_unicodeobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/unicodeobject.py
Log:
refactor out error handling


Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_api.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_api.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_api.py	Fri Apr  9 22:29:50 2010
@@ -5,6 +5,8 @@
 from pypy.module.cpyext import api
 from pypy.module.cpyext.test.test_cpyext import freeze_refcnts, check_and_print_leaks
 PyObject = api.PyObject
+from pypy.interpreter.error import OperationError
+from pypy.module.cpyext.state import State
 
 @api.cpython_api([PyObject], lltype.Void)
 def PyPy_GetWrapped(space, w_arg):
@@ -23,6 +25,18 @@
         cls.api = CAPI()
         CAPI.__dict__.update(api.INTERPLEVEL_API)
 
+    def raises(self, space, api, expected_exc, f, *args):
+        if not callable(f):
+            raise Exception("%s is not callable" % (f,))
+        f(*args)
+        state = space.fromcache(State)
+        tp = state.exc_type
+        if not tp:
+            raise Exception("DID NOT RAISE")
+        if getattr(space, 'w_' + expected_exc.__name__) is not tp:
+            raise Exception("Wrong exception")
+        state.clear_exception()
+
     def setup_method(self, func):
         freeze_refcnts(self)
 

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_unicodeobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_unicodeobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_unicodeobject.py	Fri Apr  9 22:29:50 2010
@@ -36,14 +36,16 @@
             assert array[i] == char
             assert array2[i] == char
             assert array3[i] == char
-        raises(TypeError, api.PyUnicode_AsUnicode(space.wrap('spam')))
-        api.PyErr_Clear()
+        self.raises(space, api, TypeError, api.PyUnicode_AsUnicode,
+                    space.wrap('spam'))
 
         utf_8 = rffi.str2charp('utf-8')
         encoded = api.PyUnicode_AsEncodedString(space.wrap(u'späm'),
                                                 utf_8, None)
         assert space.unwrap(encoded) == 'sp\xc3\xa4m'
-        raises(TypeError, api.PyUnicode_AsEncodedString,
+        self.raises(space, api, TypeError, api.PyUnicode_AsEncodedString,
+               space.newtuple([1, 2, 3]), None, None)
+        self.raises(space, api, TypeError, api.PyUnicode_AsEncodedString,
                space.wrap(''), None, None)
         rffi.free_charp(utf_8)
 

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/unicodeobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/unicodeobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/unicodeobject.py	Fri Apr  9 22:29:50 2010
@@ -102,7 +102,7 @@
         ref_unicode.c_buffer = rffi.unicode2wcharp(u)
     return ref_unicode.c_buffer
 
- at cpython_api([PyObject], rffi.CWCHARP, error=0)
+ at cpython_api([PyObject], rffi.CWCHARP, error=lltype.nullptr(rffi.CWCHARP.TO))
 def PyUnicode_AsUnicode(space, ref):
     """Return a read-only pointer to the Unicode object's internal Py_UNICODE
     buffer, NULL if unicode is not a Unicode object."""



More information about the Pypy-commit mailing list