[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