[pypy-svn] r49884 - in pypy/dist/pypy/module/_codecs: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Dec 18 12:20:57 CET 2007


Author: cfbolz
Date: Tue Dec 18 12:20:57 2007
New Revision: 49884

Modified:
   pypy/dist/pypy/module/_codecs/interp_codecs.py
   pypy/dist/pypy/module/_codecs/test/test_codecs.py
Log:
fix an rpython assertion error


Modified: pypy/dist/pypy/module/_codecs/interp_codecs.py
==============================================================================
--- pypy/dist/pypy/module/_codecs/interp_codecs.py	(original)
+++ pypy/dist/pypy/module/_codecs/interp_codecs.py	Tue Dec 18 12:20:57 2007
@@ -28,16 +28,14 @@
                 space.wrap(endpos),
                 space.wrap(reason))
             w_res = space.call_function(w_errorhandler, w_exc)
-            try:
-                w_replace, w_newpos = space.unpacktuple(w_res, 2)
-            except OperationError, e:
-                if not e.match(space, space.w_TypeError):
-                    raise
+            if (not space.is_true(space.isinstance(w_res, space.w_tuple))
+                or space.int_w(space.len(w_res)) != 2):
                 raise OperationError(
                     space.w_TypeError,
                     space.wrap("encoding error handler must return "
                                "(unicode, int) tuple, not %s" % (
                                    space.str_w(space.repr(w_res)))))
+            w_replace, w_newpos = space.unpacktuple(w_res, 2)
             newpos = space.int_w(w_newpos)
             if (newpos < 0):
                 newpos = len(input) + newpos

Modified: pypy/dist/pypy/module/_codecs/test/test_codecs.py
==============================================================================
--- pypy/dist/pypy/module/_codecs/test/test_codecs.py	(original)
+++ pypy/dist/pypy/module/_codecs/test/test_codecs.py	Tue Dec 18 12:20:57 2007
@@ -281,13 +281,19 @@
 
     def test_cpytest_decode(self):
         import codecs
-        print 1
         assert codecs.decode('\xe4\xf6\xfc', 'latin-1') == u'\xe4\xf6\xfc'
-        print 2
         raises(TypeError, codecs.decode)
-        print 3
         assert codecs.decode('abc') == u'abc'
-        print 4
         raises(UnicodeDecodeError, codecs.decode, '\xff', 'ascii')
 
-
+    def test_bad_errorhandler_return(self):
+        import codecs
+        def baddecodereturn1(exc):
+            return 42
+        codecs.register_error("test.baddecodereturn1", baddecodereturn1)
+        raises(TypeError, "\xff".decode, "ascii", "test.baddecodereturn1")
+        raises(TypeError, "\\".decode, "unicode-escape", "test.baddecodereturn1")
+        raises(TypeError, "\\x0".decode, "unicode-escape", "test.baddecodereturn1")
+        raises(TypeError, "\\x0y".decode, "unicode-escape", "test.baddecodereturn1")
+        raises(TypeError, "\\Uffffeeee".decode, "unicode-escape", "test.baddecodereturn1")
+        raises(TypeError, "\\uyyyy".decode, "raw-unicode-escape", "test.baddecodereturn1")



More information about the Pypy-commit mailing list