mirror of https://github.com/Textualize/rich.git
92 lines
3.5 KiB
Python
92 lines
3.5 KiB
Python
import io
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from rich.console import Console
|
|
from rich.traceback import install, Traceback
|
|
|
|
from .render import render
|
|
|
|
try:
|
|
from ._exception_render import expected
|
|
except ImportError:
|
|
expected = None
|
|
|
|
|
|
CAPTURED_EXCEPTION = 'Traceback (most recent call last):\n╭──────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ File "/Users/willmcgugan/projects/rich/tests/test_traceback.py", line 26, in test_handler │\n│ 23 try: │\n│ 24 old_handler = install(console=console, line_numbers=False) │\n│ 25 try: │\n│ ❱ 26 1 / 0 │\n│ 27 except Exception: │\n│ 28 exc_type, exc_value, traceback = sys.exc_info() │\n│ 29 sys.excepthook(exc_type, exc_value, traceback) │\n╰──────────────────────────────────────────────────────────────────────────────────────────────────╯\nZeroDivisionError: division by zero\n'
|
|
|
|
|
|
def test_handler():
|
|
console = Console(file=io.StringIO(), width=100, color_system=None)
|
|
expected_old_handler = sys.excepthook
|
|
try:
|
|
old_handler = install(console=console, line_numbers=False)
|
|
try:
|
|
1 / 0
|
|
except Exception:
|
|
exc_type, exc_value, traceback = sys.exc_info()
|
|
sys.excepthook(exc_type, exc_value, traceback)
|
|
rendered_exception = console.file.getvalue()
|
|
print(repr(rendered_exception))
|
|
assert "Traceback" in rendered_exception
|
|
assert "ZeroDivisionError" in rendered_exception
|
|
finally:
|
|
sys.excepthook = old_handler
|
|
assert old_handler == expected_old_handler
|
|
|
|
|
|
def text_exception_render():
|
|
exc_render = render(get_exception())
|
|
assert exc_render == expected
|
|
|
|
|
|
def test_capture():
|
|
try:
|
|
1 / 0
|
|
except Exception:
|
|
tb = Traceback()
|
|
assert tb.trace.stacks[0].exc_type == "ZeroDivisionError"
|
|
|
|
|
|
def test_no_exception():
|
|
with pytest.raises(ValueError):
|
|
tb = Traceback()
|
|
|
|
|
|
def get_exception() -> Traceback:
|
|
def bar(a):
|
|
print(1 / a)
|
|
|
|
def foo(a):
|
|
bar(a)
|
|
|
|
try:
|
|
try:
|
|
foo(0)
|
|
except:
|
|
foobarbaz
|
|
except:
|
|
tb = Traceback()
|
|
return tb
|
|
|
|
|
|
def test_print_exception():
|
|
console = Console(width=100, file=io.StringIO())
|
|
try:
|
|
1 / 0
|
|
except Exception:
|
|
console.print_exception()
|
|
exception_text = console.file.getvalue()
|
|
assert "ZeroDivisionError" in exception_text
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
|
|
expected = render(get_exception())
|
|
|
|
with open("_exception_render.py", "wt") as fh:
|
|
exc_render = render(get_exception())
|
|
print(exc_render)
|
|
fh.write(f"expected={exc_render!r}")
|