summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2001-09-26 20:01:13 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2001-09-26 20:01:13 (GMT)
commitede049b2d322f160814133677427f7ea0f2ee639 (patch)
tree0426566f468aa89089338171321378891d60b372 /Lib
parente2e2c9f41e13d81c6650ae4f4b4ff15a3e6d9423 (diff)
downloadcpython-ede049b2d322f160814133677427f7ea0f2ee639.zip
cpython-ede049b2d322f160814133677427f7ea0f2ee639.tar.gz
cpython-ede049b2d322f160814133677427f7ea0f2ee639.tar.bz2
Add tests for new PyErr_NormalizeException() behavior
Add raise_exception() to the _testcapi module. It isn't a test, but the C API exists only to support test_exceptions. raise_exception() takes two arguments -- an exception class and an integer specifying how many arguments it should be called with. test_exceptions uses BadException() to test the interpreter's behavior when there is a problem instantiating the exception. test_capi1() calls it with too many arguments. test_capi2() causes an exception to be raised in the Python code of the constructor.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_exceptions.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 104258a..d194c8b 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -3,6 +3,8 @@
from test_support import *
from types import ClassType
import warnings
+import sys, traceback
+import _testcapi
warnings.filterwarnings("error", "", OverflowWarning, __name__)
@@ -161,4 +163,37 @@ r(Exception)
try: x = 1/0
except Exception, e: pass
+# test that setting an exception at the C level works even if the
+# exception object can't be constructed.
+
+class BadException:
+ def __init__(self):
+ raise RuntimeError, "can't instantiate BadException"
+
+def test_capi1():
+ try:
+ _testcapi.raise_exception(BadException, 1)
+ except TypeError, err:
+ exc, err, tb = sys.exc_info()
+ co = tb.tb_frame.f_code
+ assert co.co_name == "test_capi1"
+ assert co.co_filename.endswith('test_exceptions.py')
+ else:
+ print "Expected exception"
+test_capi1()
+
+def test_capi2():
+ try:
+ _testcapi.raise_exception(BadException, 0)
+ except RuntimeError, err:
+ exc, err, tb = sys.exc_info()
+ co = tb.tb_frame.f_code
+ assert co.co_name == "__init__"
+ assert co.co_filename.endswith('test_exceptions.py')
+ co2 = tb.tb_frame.f_back.f_code
+ assert co2.co_name == "test_capi2"
+ else:
+ print "Expected exception"
+test_capi2()
+
unlink(TESTFN)