test_tracer.py (1900B)
1 from typing import List 2 3 import pytest 4 5 from pluggy._tracing import TagTracer 6 7 8 @pytest.fixture 9 def rootlogger() -> TagTracer: 10 return TagTracer() 11 12 13 def test_simple(rootlogger: TagTracer) -> None: 14 log = rootlogger.get("pytest") 15 log("hello") 16 out: List[str] = [] 17 rootlogger.setwriter(out.append) 18 log("world") 19 assert len(out) == 1 20 assert out[0] == "world [pytest]\n" 21 sublog = log.get("collection") 22 sublog("hello") 23 assert out[1] == "hello [pytest:collection]\n" 24 25 26 def test_indent(rootlogger: TagTracer) -> None: 27 log = rootlogger.get("1") 28 out = [] 29 log.root.setwriter(lambda arg: out.append(arg)) 30 log("hello") 31 log.root.indent += 1 32 log("line1") 33 log("line2") 34 log.root.indent += 1 35 log("line3") 36 log("line4") 37 log.root.indent -= 1 38 log("line5") 39 log.root.indent -= 1 40 log("last") 41 assert len(out) == 7 42 names = [x[: x.rfind(" [")] for x in out] 43 assert names == [ 44 "hello", 45 " line1", 46 " line2", 47 " line3", 48 " line4", 49 " line5", 50 "last", 51 ] 52 53 54 def test_readable_output_dictargs(rootlogger: TagTracer) -> None: 55 out = rootlogger._format_message(["test"], [1]) 56 assert out == "1 [test]\n" 57 58 out2 = rootlogger._format_message(["test"], ["test", {"a": 1}]) 59 assert out2 == "test [test]\n a: 1\n" 60 61 62 def test_setprocessor(rootlogger: TagTracer) -> None: 63 log = rootlogger.get("1") 64 log2 = log.get("2") 65 assert log2.tags == tuple("12") 66 out = [] 67 rootlogger.setprocessor(tuple("12"), lambda *args: out.append(args)) 68 log("not seen") 69 log2("seen") 70 assert len(out) == 1 71 tags, args = out[0] 72 assert "1" in tags 73 assert "2" in tags 74 assert args == ("seen",) 75 l2 = [] 76 rootlogger.setprocessor("1:2", lambda *args: l2.append(args)) 77 log2("seen") 78 tags, args = l2[0] 79 assert args == ("seen",)