diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-09-26 20:01:13 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-09-26 20:01:13 (GMT) |
commit | ede049b2d322f160814133677427f7ea0f2ee639 (patch) | |
tree | 0426566f468aa89089338171321378891d60b372 /Lib | |
parent | e2e2c9f41e13d81c6650ae4f4b4ff15a3e6d9423 (diff) | |
download | cpython-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.py | 35 |
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) |