rich/tests/test_logging.py

94 lines
2.2 KiB
Python
Raw Normal View History

2020-04-26 11:38:38 +00:00
import io
import sys
2020-09-22 23:22:27 +00:00
import os
2020-04-26 11:38:38 +00:00
import logging
import pytest
2020-04-26 11:38:38 +00:00
from rich.console import Console
from rich.logging import RichHandler
handler = RichHandler(
2020-06-14 14:23:43 +00:00
console=Console(
file=io.StringIO(), force_terminal=True, width=80, color_system="truecolor"
2020-06-14 14:38:45 +00:00
),
enable_link_path=False,
2020-04-26 11:38:38 +00:00
)
logging.basicConfig(
level="NOTSET", format="%(message)s", datefmt="[DATE]", handlers=[handler]
2020-04-26 11:38:38 +00:00
)
log = logging.getLogger("rich")
2020-09-22 23:22:27 +00:00
skip_win = pytest.mark.skipif(
os.name == "nt",
reason="rendered differently on windows",
)
2020-04-26 11:38:38 +00:00
def make_log():
log.debug("foo")
render = handler.console.file.getvalue()
return render
def test_log():
render = make_log()
2020-06-14 13:51:19 +00:00
print(repr(render))
2020-09-22 23:22:27 +00:00
expected = "\x1b[2;36m[DATE]\x1b[0m\x1b[2;36m \x1b[0m\x1b[32mDEBUG\x1b[0m foo \x1b[2mtest_logging.py\x1b[0m\x1b[2m:29\x1b[0m\n"
2020-04-26 11:38:38 +00:00
assert render == expected
2020-09-22 23:22:27 +00:00
@skip_win
def test_exception():
console = Console(
file=io.StringIO(), force_terminal=True, width=80, color_system="truecolor"
)
handler_with_tracebacks = RichHandler(
console=console, enable_link_path=False, handle_tracebacks=True
)
log.addHandler(handler_with_tracebacks)
try:
1 / 0
except ZeroDivisionError:
log.exception("message")
render = handler_with_tracebacks.console.file.getvalue()
print(render)
excpected = "ZeroDivisionError: \x1b[0mdivision by zero\n"
assert excpected == render[-40:]
assert render.count("\n") == 13
def test_exception_with_extra_lines():
console = Console(
file=io.StringIO(), force_terminal=True, width=80, color_system="truecolor"
)
handler_extra_lines = RichHandler(
console=console,
enable_link_path=False,
markup=True,
handle_tracebacks=True,
tracebacks_extra_lines=5,
)
log.addHandler(handler_extra_lines)
try:
1 / 0
except ZeroDivisionError:
log.exception("message")
render = handler_extra_lines.console.file.getvalue()
print(render)
excpected = "ZeroDivisionError: \x1b[0mdivision by zero\n"
assert excpected == render[-40:]
assert render.count("\n") == 17
2020-04-26 11:38:38 +00:00
if __name__ == "__main__":
render = make_log()
print(render)
print(repr(render))