Completed
Pull Request — master (#2409)
by
unknown
02:05
created

PrinterHandlerTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 18
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 18
rs 10
c 1
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A test_emit_printer_none() 0 5 1
A setUp() 0 4 1
A test_emit_string_printer() 0 5 1
1
import unittest
2
from unittest import mock
3
from datetime import datetime
4
import logging
5
6
from pyprint.NullPrinter import NullPrinter
7
from pyprint.Printer import Printer
8
from pyprint.StringPrinter import StringPrinter
9
10
from coalib.misc import Constants
11
from coalib.output.printers.LogPrinter import LogPrinter, PrinterHandler
12
from coalib.processes.communication.LogMessage import LOG_LEVEL, LogMessage
13
14
15
class PrinterHandlerTest(unittest.TestCase):
16
17
    def setUp(self):
18
        self.handler = PrinterHandler()
19
        self.record = logging.LogRecord('name', logging.DEBUG, 'pathname',
20
                                        0, "Test message!", [], None)
21
22
    def test_emit_string_printer(self):
23
        printer = StringPrinter()
24
        self.handler = PrinterHandler(printer)
25
        self.handler.emit(self.record)
26
        self.assertEqual(self.handler.printer.string, "Test message!\n")
27
28
    @mock.patch('sys.stdout')
29
    def test_emit_printer_none(self, stdout):
30
        self.handler = PrinterHandler(None)
31
        self.handler.emit(self.record)
32
        stdout.write.assert_called_once_with("Test message!\n")
33
34
35
class LogPrinterTest(unittest.TestCase):
36
    timestamp = datetime.today()
37
    log_message = LogMessage(LOG_LEVEL.ERROR,
38
                             Constants.COMPLEX_TEST_STRING,
39
                             timestamp=timestamp)
40
41
    def test_interface(self):
42
        uut = LogPrinter(Printer())
43
        self.assertRaises(NotImplementedError,
44
                          uut.log_message,
45
                          self.log_message)
46
47
    def test_get_printer(self):
48
        self.assertIs(LogPrinter("logger").printer, "logger")
49
        printer = Printer()
50
        self.assertIs(LogPrinter(printer).printer, printer)
51
52
    def test_logging(self):
53
        self.timestamp = datetime.now()
54
        uut = LogPrinter(StringPrinter(), timestamp_format="", of_type=False)
55
        uut.log_message(self.log_message)
56
        self.assertEqual(uut.printer.string, "{}\n".format(self.log_message))
57
58
        uut = LogPrinter(StringPrinter(), log_level=LOG_LEVEL.DEBUG,
59
                         of_type=False)
60
        uut.log_message(self.log_message)
61
        self.assertEqual(
62
            uut.printer.string,
63
            "[ERROR][{time}] {msg}\n".format(
64
                time=self.timestamp.strftime("%X"),
65
                msg=Constants.COMPLEX_TEST_STRING))
66
67
        uut.printer.clear()
68
        uut.log(LOG_LEVEL.ERROR, Constants.COMPLEX_TEST_STRING)
69
        self.assertEqual(
70
            uut.printer.string,
71
            "[ERROR][{time}] {msg}\n".format(
72
                time=self.timestamp.strftime("%X"),
73
                msg=Constants.COMPLEX_TEST_STRING))
74
75
        uut.printer.clear()
76
        uut.debug(Constants.COMPLEX_TEST_STRING, "d")
77
        self.assertEqual(
78
            uut.printer.string,
79
            "[DEBUG][{time}] {msg} d\n".format(
80
                time=self.timestamp.strftime("%X"),
81
                msg=Constants.COMPLEX_TEST_STRING))
82
83
        uut.printer.clear()
84
        uut.log_level = LOG_LEVEL.INFO
85
        uut.debug(Constants.COMPLEX_TEST_STRING)
86
        self.assertEqual(uut.printer.string, "")
87
88
        uut.printer.clear()
89
        uut.info(Constants.COMPLEX_TEST_STRING, "d")
90
        self.assertEqual(
91
            uut.printer.string,
92
            "[INFO][{time}] {msg} d\n".format(
93
                time=self.timestamp.strftime("%X"),
94
                msg=Constants.COMPLEX_TEST_STRING))
95
96
        uut.log_level = LOG_LEVEL.WARNING
97
        uut.printer.clear()
98
        uut.debug(Constants.COMPLEX_TEST_STRING)
99
        self.assertEqual(uut.printer.string, "")
100
101
        uut.printer.clear()
102
        uut.warn(Constants.COMPLEX_TEST_STRING, "d")
103
        self.assertEqual(
104
            uut.printer.string,
105
            "[WARNING][{time}] {msg} d\n".format(
106
                time=self.timestamp.strftime("%X"),
107
                msg=Constants.COMPLEX_TEST_STRING))
108
109
        uut.printer.clear()
110
        uut.err(Constants.COMPLEX_TEST_STRING, "d")
111
        self.assertEqual(
112
            uut.printer.string,
113
            "[ERROR][{time}] {msg} d\n".format(
114
                time=self.timestamp.strftime("%X"),
115
                msg=Constants.COMPLEX_TEST_STRING))
116
117
        uut.log_level = LOG_LEVEL.DEBUG
118
        uut.printer.clear()
119
        uut.log_exception(
120
            "Something failed.",
121
            NotImplementedError(Constants.COMPLEX_TEST_STRING))
122
        self.assertTrue(uut.printer.string.startswith(
123
            "[ERROR][{time}] Something failed.\n"
124
            "[DEBUG][{time}] Exception was:".format(
125
                time=self.timestamp.strftime("%X"))))
126
127
        uut.log_level = LOG_LEVEL.INFO
128
        uut.printer.clear()
129
        uut.log_exception(
130
            "Something failed.",
131
            NotImplementedError(Constants.COMPLEX_TEST_STRING))
132
        self.assertTrue(uut.printer.string.startswith(
133
            "[ERROR][{time}] Something failed.".format(
134
                time=self.timestamp.strftime("%X"))))
135
136
    def test_raises(self):
137
        uut = LogPrinter(NullPrinter())
138
        self.assertRaises(TypeError, uut.log, 5)
139
        self.assertRaises(TypeError, uut.log_exception, "message", 5)
140
        self.assertRaises(TypeError, uut.log_message, 5)
141
142
    def test_getLogger_printer_None(self):
143
        logger, name = LogPrinter.getLogger(None)
144
        self.assertEqual(name, 'coala')
145
        self.assertEqual(logger, logging.getLogger('coala'))
146
147
    def test_getLogger_printer_str(self):
148
        logger, name = LogPrinter.getLogger('coala')
149
        self.assertEqual(name, 'coala')
150
        self.assertEqual(logger, logging.getLogger('coala'))
151
152
    def test_getLogger_raise_error(self):
153
        with self.assertRaises(TypeError) as cm:
154
            LogPrinter.getLogger(object())
155
        message = ("printer should either be str or Printer."
156
                   " Received <class 'object'> instead.")
157
        self.assertEqual(str(cm.exception), message)
158
159
    def test_log_level(self):
160
        uut = LogPrinter()
161
        self.assertEqual(uut.log_level, logging.INFO)
162
        uut.log_level = logging.DEBUG
163
        self.assertEqual(uut.log_level, logging.DEBUG)
164
165
    def test_get_state(self):
166
        uut = LogPrinter()
167
        self.assertNotIn('logger', uut.__getstate__())
168
169
    def test_set_state(self):
170
        uut = LogPrinter()
171
        state = uut.__getstate__()
172
        uut.__setstate__(state)
173
        self.assertEqual(uut.logger, logging.getLogger('coala'))
174