test_ultratb.py
51 lines
| 1.5 KiB
| text/x-python
|
PythonLexer
Thomas Kluyver
|
r8099 | """Tests for IPython.core.ultratb | ||
""" | ||||
import os.path | ||||
import unittest | ||||
from IPython.testing import tools as tt | ||||
from IPython.utils.syspathcontext import prepended_to_syspath | ||||
from IPython.utils.tempdir import TemporaryDirectory | ||||
ip = get_ipython() | ||||
file_1 = """1 | ||||
2 | ||||
3 | ||||
def f(): | ||||
1/0 | ||||
""" | ||||
file_2 = """def f(): | ||||
1/0 | ||||
""" | ||||
class ChangedPyFileTest(unittest.TestCase): | ||||
def test_changing_py_file(self): | ||||
"""Traceback produced if the line where the error occurred is missing? | ||||
https://github.com/ipython/ipython/issues/1456 | ||||
""" | ||||
with TemporaryDirectory() as td: | ||||
fname = os.path.join(td, "foo.py") | ||||
with open(fname, "w") as f: | ||||
f.write(file_1) | ||||
with prepended_to_syspath(td): | ||||
ip.run_cell("import foo") | ||||
with tt.AssertPrints("ZeroDivisionError"): | ||||
ip.run_cell("foo.f()") | ||||
# Make the file shorter, so the line of the error is missing. | ||||
with open(fname, "w") as f: | ||||
f.write(file_2) | ||||
# For some reason, this was failing on the *second* call after | ||||
# changing the file, so we call f() twice. | ||||
with tt.AssertNotPrints("Internal Python error", channel='stderr'): | ||||
with tt.AssertPrints("ZeroDivisionError"): | ||||
ip.run_cell("foo.f()") | ||||
with tt.AssertPrints("ZeroDivisionError"): | ||||
ip.run_cell("foo.f()") | ||||