File: test_formatter.py

package info (click to toggle)
python-daiquiri 3.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 208 kB
  • sloc: python: 795; makefile: 5
file content (88 lines) | stat: -rw-r--r-- 3,529 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
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.
import io
import logging
import unittest

import daiquiri


class TestColorExtrasFormatter(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.logger = daiquiri.getLogger("my_module")
        cls.logger.setLevel(logging.INFO)
        cls.stream = io.StringIO()
        cls.handler = daiquiri.handlers.TTYDetectorStreamHandler(cls.stream)
        cls.logger.logger.addHandler(cls.handler)
        super(TestColorExtrasFormatter, cls).setUpClass()

    def setUp(self):
        # Couldn't get readline() to return anything no matter what I tried, so
        # getvalue() is the only way to see what's in the stream. However this
        # requires the stream to be reset every time.
        self.stream.close()
        self.stream = io.StringIO()
        self.handler.stream = self.stream
        super(TestColorExtrasFormatter, self).setUp()

    def test_no_keywords(self):
        format_string = "%(levelname)s %(name)s%(extras)s: %(message)s"
        formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string)
        self.handler.setFormatter(formatter)

        self.logger.info("test message")
        self.assertEqual(self.stream.getvalue(), "INFO my_module: test message\n")

    def test_no_keywords_with_extras(self):
        format_string = "%(levelname)s %(name)s%(extras)s: %(message)s"
        formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string)
        self.handler.setFormatter(formatter)

        self.logger.info("test message", test="a")
        self.assertEqual(
            self.stream.getvalue(), "INFO my_module [test: a]: test message\n"
        )

    def test_empty_keywords(self):
        format_string = "%(levelname)s %(name)s%(extras)s: %(message)s"
        formatter = daiquiri.formatter.ColorExtrasFormatter(
            fmt=format_string, keywords=[]
        )
        self.handler.setFormatter(formatter)

        self.logger.info("test message", test="a")
        self.assertEqual(
            self.stream.getvalue(), "INFO my_module [test: a]: test message\n"
        )

    def test_keywords_no_extras(self):
        format_string = "%(levelname)s %(name)s" " %(test)s%(extras)s: %(message)s"
        formatter = daiquiri.formatter.ColorExtrasFormatter(
            fmt=format_string, keywords=["test"]
        )
        self.handler.setFormatter(formatter)

        self.logger.info("test message", test="a")
        self.assertEqual(self.stream.getvalue(), "INFO my_module a: test message\n")

    def test_keywords_with_extras(self):
        format_string = "%(levelname)s %(name)s" " %(test)s%(extras)s: %(message)s"
        formatter = daiquiri.formatter.ColorExtrasFormatter(
            fmt=format_string, keywords=["test"]
        )
        self.handler.setFormatter(formatter)

        self.logger.info("test message", test="a", test2="b")
        self.assertEqual(
            self.stream.getvalue(), "INFO my_module a [test2: b]: test message\n"
        )