lots of runnable tests for try-except
authorStefan Behnel <scoder@users.berlios.de>
Fri, 13 Aug 2010 15:55:15 +0000 (17:55 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Fri, 13 Aug 2010 15:55:15 +0000 (17:55 +0200)
--HG--
rename : tests/compile/tryexcept.pyx => tests/run/tryexcept.pyx

tests/run/tryexcept.pyx [new file with mode: 0644]

diff --git a/tests/run/tryexcept.pyx b/tests/run/tryexcept.pyx
new file mode 100644 (file)
index 0000000..f1294b3
--- /dev/null
@@ -0,0 +1,390 @@
+def single_except(a, x):
+    """
+    >>> single_except(ValueError, None)
+    2
+    >>> single_except(ValueError, ValueError('test'))
+    3
+    >>> single_except(ValueError, TypeError('test'))
+    Traceback (most recent call last):
+    TypeError: test
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+        i = 2
+    except a:
+        i = 3
+    return i
+
+def single_except_builtin(a, x):
+    """
+    >>> single_except_builtin(ValueError, None)
+    2
+    >>> single_except_builtin(ValueError, ValueError('test'))
+    3
+    >>> single_except_builtin(ValueError, TypeError('test'))
+    Traceback (most recent call last):
+    TypeError: test
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+        i = 2
+    except ValueError:
+        i = 3
+    return i
+
+def single_except_expression(a, x):
+    """
+    >>> single_except_expression([[ValueError]], None)
+    2
+    >>> single_except_expression([[ValueError]], ValueError('test'))
+    3
+    >>> single_except_expression([[ValueError]], TypeError('test'))
+    Traceback (most recent call last):
+    TypeError: test
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+        i = 2
+    except a[0][0]:
+        i = 3
+    return i
+
+def double_except_no_raise(a,b):
+    """
+    >>> double_except_no_raise(TypeError, ValueError)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+    except a:
+        i = 2
+    except b:
+        i = 3
+    return i
+
+def double_except_raise(x, a, b):
+    """
+    >>> double_except_raise(None, TypeError, ValueError)
+    1
+    >>> double_except_raise(TypeError('test'), TypeError, ValueError)
+    2
+    >>> double_except_raise(ValueError('test'), TypeError, ValueError)
+    3
+    >>> double_except_raise(None, TypeError, ValueError)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+    except a:
+        i = 2
+    except b:
+        i = 3
+    return i
+
+def target_except_no_raise(a):
+    """
+    >>> target_except_no_raise(TypeError)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+    except a, b:
+        i = 2
+    return i
+
+def target_except_raise(x, a):
+    """
+    >>> target_except_raise(None, TypeError)
+    1
+    >>> target_except_raise(TypeError('test'), TypeError)
+    2
+    >>> target_except_raise(ValueError('test'), TypeError)
+    Traceback (most recent call last):
+    ValueError: test
+    >>> target_except_raise(None, TypeError)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+    except a, b:
+        i = 2
+        assert isinstance(b, a)
+    return i
+
+def tuple_except_builtin(x):
+    """
+    >>> tuple_except_builtin(None)
+    1
+    >>> tuple_except_builtin(TypeError('test'))
+    2
+    >>> tuple_except_builtin(ValueError('test'))
+    2
+    >>> tuple_except_builtin(IndexError('5'))
+    Traceback (most recent call last):
+    IndexError: 5
+    >>> tuple_except_builtin(None)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+    except (TypeError, ValueError):
+        i = 2
+    return i
+
+def normal_and_bare_except_no_raise(a):
+    """
+    >>> normal_and_bare_except_no_raise(TypeError)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+    except a:
+        i = 2
+    except:
+        i = 3
+    return i
+
+def normal_and_bare_except_raise(x, a):
+    """
+    >>> normal_and_bare_except_raise(None, TypeError)
+    1
+    >>> normal_and_bare_except_raise(TypeError('test'), TypeError)
+    2
+    >>> normal_and_bare_except_raise(ValueError('test'), TypeError)
+    3
+    >>> normal_and_bare_except_raise(None, TypeError)
+    1
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+    except a:
+        i = 2
+    except:
+        i = 3
+    return i
+
+def tuple_except_index_target_no_raise(a, b, c):
+    """
+    >>> l = [None, None]
+    >>> tuple_except_index_target_no_raise(TypeError, ValueError, l)
+    1
+    >>> l
+    [None, None]
+    """
+    cdef int i
+    try:
+        i = 1
+    except (a, b), c[1]:
+        i = 2
+    return i
+
+def tuple_except_index_target_raise(x, a, b, c):
+    """
+    >>> l = [None, None]
+    >>> tuple_except_index_target_raise(None, TypeError, ValueError, l)
+    1
+    >>> l
+    [None, None]
+    >>> tuple_except_index_target_raise(TypeError('test'), TypeError, ValueError, l)
+    2
+    >>> l[0] is None, isinstance(l[1], TypeError)
+    (True, True)
+    >>> tuple_except_index_target_raise(ValueError('test'), TypeError, ValueError, l)
+    2
+    >>> l[0] is None, isinstance(l[1], ValueError)
+    (True, True)
+    >>> tuple_except_index_target_raise(IndexError('5'), TypeError, ValueError, l)
+    Traceback (most recent call last):
+    IndexError: 5
+    >>> tuple_except_index_target_raise(None, TypeError, ValueError, l)
+    1
+    >>> l[0] is None, isinstance(l[1], ValueError)
+    (True, True)
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+    except (a, b), c[1]:
+        i = 2
+        assert isinstance(c[1], (a,b))
+    return i
+
+def loop_bare_except_no_raise(a, b, int c):
+    """
+    >>> loop_bare_except_no_raise(TypeError, range(2), 2)
+    (1, 3528)
+    """
+    cdef int i = 1
+    for a in b:
+        try:
+            c = c * 42
+        except:
+            i = 17
+    return i,c
+
+def loop_bare_except_raise(a, b, int c):
+    """
+    >>> loop_bare_except_raise(TypeError, range(2), 2)
+    (1, 3528)
+    >>> loop_bare_except_raise(TypeError, range(3), 2)
+    (17, 148176)
+    >>> loop_bare_except_raise(TypeError, range(4), 2)
+    (17, 6223392)
+    """
+    cdef int i = 1
+    for a in b:
+        try:
+            c = c * 42
+            if a == 2:
+                raise TypeError('test')
+        except:
+            i = 17
+    return i,c
+
+def bare_except_reraise_no_raise(l):
+    """
+    >>> l = [None]
+    >>> bare_except_reraise_no_raise(l)
+    1
+    >>> l
+    [None]
+    """
+    cdef int i
+    try:
+        i = 1
+    except:
+        l[0] = 2
+        raise
+    return i
+
+def bare_except_reraise_raise(x, l):
+    """
+    >>> l = [None]
+    >>> bare_except_reraise_raise(None, l)
+    1
+    >>> l
+    [None]
+    >>> bare_except_reraise_raise(TypeError('test'), l)
+    Traceback (most recent call last):
+    TypeError: test
+    >>> l
+    [2]
+    >>> l = [None]
+    >>> bare_except_reraise_raise(None, l)
+    1
+    >>> l
+    [None]
+    """
+    cdef int i
+    try:
+        i = 1
+        if x:
+            raise x
+    except:
+        l[0] = 2
+        raise
+    return i
+
+def except_as_no_raise(a):
+    """
+    >>> except_as_no_raise(TypeError)
+    1
+    """
+    try:
+        i = 1
+    except a as b:
+        i = 2
+    return i
+
+def except_as_raise(x, a):
+    """
+    >>> except_as_raise(None, TypeError)
+    1
+    >>> except_as_raise(TypeError('test'), TypeError)
+    2
+    >>> except_as_raise(ValueError('test'), TypeError)
+    Traceback (most recent call last):
+    ValueError: test
+    >>> except_as_raise(None, TypeError)
+    1
+    """
+    try:
+        i = 1
+        if x:
+            raise x
+    except a as b:
+        i = 2
+        assert isinstance(b, a)
+    return i
+
+def complete_except_as_no_raise(a, b):
+    """
+    >>> complete_except_as_no_raise(TypeError, ValueError)
+    5
+    """
+    try:
+        i = 1
+    except (a, b) as c:
+        i = 2
+    except (b, a) as c:
+        i = 3
+    except:
+        i = 4
+    else:
+        i = 5
+    return i
+
+def complete_except_as_raise(x, a, b):
+    """
+    >>> complete_except_as_raise(None, TypeError, ValueError)
+    5
+    >>> complete_except_as_raise(TypeError('test'), TypeError, ValueError)
+    2
+    >>> complete_except_as_raise(ValueError('test'), TypeError, ValueError)
+    2
+    >>> complete_except_as_raise(IndexError('5'), TypeError, ValueError)
+    4
+    >>> complete_except_as_raise(None, TypeError, ValueError)
+    5
+    """
+    try:
+        i = 1
+        if x:
+            raise x
+    except (a, b) as c:
+        i = 2
+        assert isinstance(c, (a, b))
+    except (b, a) as c:
+        i = 3
+        assert isinstance(c, (a, b))
+    except:
+        i = 4
+    else:
+        i = 5
+    return i