[pypy-svn] pypy default: Changed PyUnicode_*ASCII functions to raise exceptions since strict codec functioning is default. Changed tests to match.

ademan commits-noreply at bitbucket.org
Wed Feb 23 18:13:56 CET 2011


Author: Daniel Roberts <Ademan555 at gmail.com>
Branch: 
Changeset: r42232:5994bfbae1f7
Date: 2011-02-23 09:13 -0800
http://bitbucket.org/pypy/pypy/changeset/5994bfbae1f7/

Log:	Changed PyUnicode_*ASCII functions to raise exceptions since strict
	codec functioning is default. Changed tests to match.

diff --git a/pypy/module/cpyext/test/test_unicodeobject.py b/pypy/module/cpyext/test/test_unicodeobject.py
--- a/pypy/module/cpyext/test/test_unicodeobject.py
+++ b/pypy/module/cpyext/test/test_unicodeobject.py
@@ -184,8 +184,7 @@
         assert space.eq_w(space.wrap(ustr), result)
 
         w_ustr = space.wrap(u"abcd\xe9f")
-        result = api.PyUnicode_AsASCIIString(w_ustr)
-        assert result is None
+        self.raises(space, api, UnicodeEncodeError, api.PyUnicode_AsASCIIString, w_ustr)
 
     def test_decode_utf16(self, space, api):
         def test(encoded, endian, realendian=None):
@@ -254,8 +253,8 @@
 
         s = 'abcd\xFF'
         data = rffi.str2charp(s)
-        w_u = api.PyUnicode_DecodeASCII(data, len(s), lltype.nullptr(rffi.CCHARP.TO))
-        assert w_u is None
+        self.raises(space, api, UnicodeDecodeError, api.PyUnicode_DecodeASCII,
+                    data, len(s), lltype.nullptr(rffi.CCHARP.TO))
         rffi.free_charp(data)
 
         uni = u'abcdefg'
@@ -267,6 +266,7 @@
         u = u'&#65533;bcd&#65533;fg'
         data = rffi.unicode2wcharp(u)
         w_s = api.PyUnicode_EncodeASCII(data, len(u), lltype.nullptr(rffi.CCHARP.TO))
-        assert w_s is None
+        self.raises(space, api, UnicodeEncodeError, api.PyUnicode_EncodeASCII,
+                    data, len(u), lltype.nullptr(rffi.CCHARP.TO))
         rffi.free_wcharp(data)
 

diff --git a/pypy/module/cpyext/unicodeobject.py b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -400,13 +400,7 @@
     """Encode a Unicode object using ASCII and return the result as Python string
     object.  Error handling is "strict".  Return NULL if an exception was raised
     by the codec."""
-    try:
-        return space.call_method(w_unicode, 'encode', space.wrap('ascii')) #space.w_None for errors?
-    except OperationError, e:
-        if e.match(space, space.w_UnicodeEncodeError):
-            return None
-        else:
-            raise
+    return space.call_method(w_unicode, 'encode', space.wrap('ascii')) #space.w_None for errors?
 
 @cpython_api([rffi.CCHARP, Py_ssize_t, rffi.CCHARP], PyObject)
 def PyUnicode_DecodeASCII(space, s, size, errors):
@@ -416,13 +410,7 @@
     This function used an int type for size. This might require
     changes in your code for properly supporting 64-bit systems."""
     w_s = space.wrap(rffi.charpsize2str(s, size))
-    try:
-        return space.call_method(w_s, 'decode', space.wrap('ascii'))
-    except OperationError, e:
-        if e.match(space, space.w_UnicodeDecodeError):
-            return None
-        else:
-            raise
+    return space.call_method(w_s, 'decode', space.wrap('ascii'))
 
 @cpython_api([rffi.CWCHARP, Py_ssize_t, rffi.CCHARP], PyObject)
 def PyUnicode_EncodeASCII(space, s, size, errors):
@@ -433,13 +421,7 @@
     changes in your code for properly supporting 64-bit systems."""
 
     w_s = space.wrap(rffi.wcharpsize2unicode(s, size))
-    try:
-        return space.call_method(w_s, 'encode', space.wrap('ascii'))
-    except OperationError, e:
-        if e.match(space, space.w_UnicodeEncodeError):
-            return None
-        else:
-            raise
+    return space.call_method(w_s, 'encode', space.wrap('ascii'))
 
 if sys.platform == 'win32':
     @cpython_api([CONST_WSTRING, Py_ssize_t, CONST_STRING], PyObject)


More information about the Pypy-commit mailing list