forked from Delgan/loguru
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_propagation.py
103 lines (73 loc) · 2.66 KB
/
test_propagation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import logging
import sys
from logging import StreamHandler
import pytest
from loguru import logger
from .conftest import make_logging_logger
class PropagateHandler(logging.Handler):
def emit(self, record):
logging.getLogger(record.name).handle(record)
def test_formatting(capsys):
fmt = (
"%(name)s - %(filename)s - %(funcName)s - %(levelname)s - "
"%(levelno)s - %(lineno)d - %(module)s - %(message)s"
)
expected = (
"tests.test_propagation - test_propagation.py - test_formatting - DEBUG - "
"10 - 30 - test_propagation - This is my message\n"
)
with make_logging_logger("tests.test_propagation", StreamHandler(sys.stderr), fmt):
logger.add(PropagateHandler(), format="{message}")
logger.debug("This {verb} my {}", "message", verb="is")
out, err = capsys.readouterr()
assert out == ""
assert err == expected
def test_propagate(capsys):
with make_logging_logger("tests", StreamHandler(sys.stderr)) as logging_logger:
logging_logger.debug("1")
logger.debug("2")
logger.add(PropagateHandler(), format="{message}")
logger.debug("3")
logger.trace("4")
out, err = capsys.readouterr()
assert out == ""
assert err == "1\n3\n"
def test_remove_propagation(capsys):
with make_logging_logger("tests", StreamHandler(sys.stderr)) as logging_logger:
i = logger.add(PropagateHandler(), format="{message}")
logger.debug("1")
logging_logger.debug("2")
logger.remove(i)
logger.debug("3")
logging_logger.debug("4")
out, err = capsys.readouterr()
assert out == ""
assert err == "1\n2\n4\n"
def test_propagate_too_high(capsys):
with make_logging_logger(
"tests.test_propagation.deep", StreamHandler(sys.stderr)
) as logging_logger:
logger.add(PropagateHandler(), format="{message}")
logger.debug("1")
logging_logger.debug("2")
out, err = capsys.readouterr()
assert out == ""
assert err == "2\n"
@pytest.mark.parametrize("use_opt", [False, True])
def test_exception(capsys, use_opt):
with make_logging_logger("tests", StreamHandler(sys.stderr)):
logger.add(PropagateHandler(), format="{message}")
try:
1 / 0
except Exception:
if use_opt:
logger.opt(exception=True).error("Oops...")
else:
logger.exception("Oops...")
out, err = capsys.readouterr()
lines = err.strip().splitlines()
error = "ZeroDivisionError: division by zero"
assert out == ""
assert lines[0] == "Oops..."
assert lines[-1] == error
assert err.count(error) == 1