test_ok2/testing/logging/test_formatter.py

151 lines
4.2 KiB
Python
Raw Normal View History

2018-01-23 07:57:56 +08:00
import logging
from typing import Any
2018-01-23 07:57:56 +08:00
from _pytest._io import TerminalWriter
2018-01-23 07:57:56 +08:00
from _pytest.logging import ColoredLevelFormatter
def test_coloredlogformatter() -> None:
2018-05-23 22:48:46 +08:00
logfmt = "%(filename)-25s %(lineno)4d %(levelname)-8s %(message)s"
2018-01-23 07:57:56 +08:00
record = logging.LogRecord(
2018-05-23 22:48:46 +08:00
name="dummy",
level=logging.INFO,
pathname="dummypath",
lineno=10,
msg="Test Message",
args=(),
exc_info=None,
2018-05-23 22:48:46 +08:00
)
2018-01-23 07:57:56 +08:00
2019-06-03 06:32:00 +08:00
class ColorConfig:
class option:
2018-01-23 07:57:56 +08:00
pass
tw = TerminalWriter()
2018-01-23 07:57:56 +08:00
tw.hasmarkup = True
formatter = ColoredLevelFormatter(tw, logfmt)
output = formatter.format(record)
assert output == (
"dummypath 10 \x1b[32mINFO \x1b[0m Test Message"
2018-05-23 22:48:46 +08:00
)
2018-01-23 07:57:56 +08:00
tw.hasmarkup = False
formatter = ColoredLevelFormatter(tw, logfmt)
output = formatter.format(record)
assert output == ("dummypath 10 INFO Test Message")
def test_multiline_message() -> None:
from _pytest.logging import PercentStyleMultiline
logfmt = "%(filename)-25s %(lineno)4d %(levelname)-8s %(message)s"
2020-10-06 09:13:05 +08:00
record: Any = logging.LogRecord(
name="dummy",
level=logging.INFO,
pathname="dummypath",
lineno=10,
msg="Test Message line1\nline2",
args=(),
exc_info=None,
2020-10-06 09:13:05 +08:00
)
# this is called by logging.Formatter.format
record.message = record.getMessage()
ai_on_style = PercentStyleMultiline(logfmt, True)
output = ai_on_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\n"
" line2"
)
2019-05-30 05:15:34 +08:00
ai_off_style = PercentStyleMultiline(logfmt, False)
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\nline2"
)
ai_none_style = PercentStyleMultiline(logfmt, None)
output = ai_none_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\nline2"
)
record.auto_indent = False
output = ai_on_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\nline2"
)
record.auto_indent = True
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\n"
" line2"
)
record.auto_indent = "False"
output = ai_on_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\nline2"
)
record.auto_indent = "True"
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\n"
" line2"
)
# bad string values default to False
record.auto_indent = "junk"
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\nline2"
)
# anything other than string or int will default to False
record.auto_indent = dict()
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\nline2"
)
record.auto_indent = "5"
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\n line2"
)
record.auto_indent = 5
output = ai_off_style.format(record)
assert output == (
"dummypath 10 INFO Test Message line1\n line2"
)
2019-05-30 05:15:34 +08:00
def test_colored_short_level() -> None:
2019-05-30 05:15:34 +08:00
logfmt = "%(levelname).1s %(message)s"
record = logging.LogRecord(
name="dummy",
level=logging.INFO,
pathname="dummypath",
lineno=10,
msg="Test Message",
args=(),
exc_info=None,
2019-05-30 05:15:34 +08:00
)
2019-06-03 23:08:50 +08:00
class ColorConfig:
class option:
2019-05-30 05:15:34 +08:00
pass
tw = TerminalWriter()
2019-05-30 05:15:34 +08:00
tw.hasmarkup = True
formatter = ColoredLevelFormatter(tw, logfmt)
output = formatter.format(record)
# the I (of INFO) is colored
assert output == ("\x1b[32mI\x1b[0m Test Message")