mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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.
This commit is contained in:
parent
e2e2c9f41e
commit
ede049b2d3
2 changed files with 61 additions and 0 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue