File: test_log.py

package info (click to toggle)
streamlink 1.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,588 kB
  • sloc: python: 31,121; makefile: 141; sh: 93
file content (118 lines) | stat: -rw-r--r-- 3,594 bytes parent folder | download
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# encoding=utf8
import logging
import unittest
import warnings

from streamlink import logger, Streamlink
from streamlink.compat import is_py2
from streamlink.utils.encoding import maybe_decode
from tests import catch_warnings

if is_py2:
    from io import BytesIO as StringIO
else:
    from io import StringIO



class TestLogging(unittest.TestCase):
    @classmethod
    def _new_logger(cls):
        output = StringIO()
        logger.basicConfig(stream=output, format="[{name}][{levelname}] {message}", style="{")
        return logging.getLogger("streamlink.test"), output

    def test_level(self):
        log, output = self._new_logger()
        logger.root.setLevel("info")
        log.debug("test")
        self.assertEqual(output.tell(), 0)

        logger.root.setLevel("debug")
        log.debug("test")
        self.assertNotEqual(output.tell(), 0)

    def test_output(self):
        log, output = self._new_logger()
        logger.root.setLevel("debug")
        log.debug("test")
        self.assertEqual(output.getvalue(), "[test][debug] test\n")

    def test_trace_output(self):
        log, output = self._new_logger()
        logger.root.setLevel("trace")
        log.trace("test")
        self.assertEqual(output.getvalue(), "[test][trace] test\n")

    def test_trace_no_output(self):
        log, output = self._new_logger()
        logger.root.setLevel("debug")
        log.trace("test")
        self.assertEqual(output.getvalue(), "")

    def test_debug_out_at_trace(self):
        log, output = self._new_logger()
        logger.root.setLevel("trace")
        log.debug("test")
        self.assertEqual(output.getvalue(), "[test][debug] test\n")

    def test_log_unicode(self):
        log, output = self._new_logger()
        logger.root.setLevel("info")
        log.info(u"Special Character: Ѩ")
        self.assertEqual(maybe_decode(output.getvalue()), u"[test][info] Special Character: Ѩ\n")


class TestDeprecatedLogger(unittest.TestCase):
    def setUp(self):
        warnings.resetwarnings()
        warnings.simplefilter('always', DeprecationWarning)  # turn off filter

    def tearDown(self):
        warnings.simplefilter('default', DeprecationWarning)  # restore filter

    def _new_logger(self):
        output = StringIO()
        manager = logger.Logger()
        manager.set_output(output)
        return manager, output

    @catch_warnings()
    def test_deprecated_level(self):
        manager, output = self._new_logger()

        with warnings.catch_warnings(record=True):
            log = manager.new_module("test_level")
            log.debug("test")
            self.assertEqual(output.tell(), 0)
            manager.set_level("debug")
            log.debug("test")
            self.assertNotEqual(output.tell(), 0)

    @catch_warnings()
    def test_deprecated_output(self):
        manager, output = self._new_logger()

        log = manager.new_module("test_output")
        manager.set_level("debug")
        log.debug("test")
        self.assertEqual(output.getvalue(), "[test_output][debug] test\n")

    @catch_warnings()
    def test_deprecated_session_logger(self):
        session = Streamlink()
        output = StringIO()

        new_log = session.logger.new_module("test")
        session.set_logoutput(output)
        session.set_loglevel("info")

        new_log.info("test1")

        # regular python loggers shouldn't log here
        logging.getLogger("streamlink.test").critical("should not log")
        self.assertEqual(output.getvalue(), "[test][info] test1\n")


if __name__ == "__main__":
    unittest.main()