summaryrefslogtreecommitdiff
path: root/tests/test_log.py
blob: b68fa7c02e75bb806514132a2225306f2873bad6 (plain)
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
119
120
import sys
import unittest
import vdebug.log
try:
    from unittest import mock
except ImportError:
    import mock


class LoggerTest(unittest.TestCase):

    level = 1
    text = 'dummy text'
    time_tuple = (2042, 4, 2, 1, 42, 42, 0, 0, 0)
    time_string = 'Mon 02 2042 01:42:42'

    def setUp(self):
        self.logger = vdebug.log.Logger(self.level)
        self.worker = mock.Mock()
        self.logger._actual_log = self.worker

    def test_log_with_same_level(self):
        self.logger.log(self.text, self.level)
        self.worker.assert_called_once_with(self.text, self.level)

    def test_log_with_higher_level(self):
        self.logger.log(self.text, self.level+1)
        self.worker.assert_not_called()

    def test_log_with_lower_level(self):
        self.logger.log(self.text, self.level-1)
        self.worker.assert_called_once_with(self.text, self.level-1)

    def test_time(self):
        with mock.patch('time.localtime',
                        mock.Mock(return_value=self.time_tuple)):
            string = self.logger.time()
        self.assertEqual(string, self.time_string)

    def test_format(self):
        with mock.patch('time.localtime',
                        mock.Mock(return_value=self.time_tuple)):
            string = self.logger.format(self.text, self.level)
        expected = '- [Info] {%s} %s' % (self.time_string, self.text)
        self.assertEqual(string, expected)


class WindowLoggerTest(unittest.TestCase):

    level = 1

    def setUp(self):
        self.window = mock.Mock()
        self.logger = vdebug.log.WindowLogger(self.level, self.window)

    def test_log_with_open_window(self):
        self.window.is_open = True
        ret = self.logger.log('dummy text', self.level)
        self.assertIsNone(ret)
        if sys.version_info[0] >= 3 and sys.version_info[1] >= 6:
            self.window.create.assert_not_called()
            self.window.write.assert_called_once()

    def test_log_with_no_window(self):
        self.window.is_open = False
        ret = self.logger.log('dummy text', self.level)
        self.assertIsNone(ret)
        if sys.version_info[0] >= 3 and sys.version_info[1] >= 6:
            self.window.create.assert_called_once()
            self.window.write.assert_called_once()

    def test_shutdown(self):
        self.logger.shutdown()
        self.assertFalse(self.window.is_open)


class FileLoggerTest(unittest.TestCase):

    filename = '/tmp/vdebug-test-log-file'
    level = 2
    if sys.version_info[0] == 3:
        open_name = 'builtins.open'
    elif sys.version_info[0] == 2:
        open_name = '__builtin__.open'

    def setUp(self):
        self.logger = vdebug.log.FileLogger(self.level, self.filename)

    def test_log_opens_file(self):
        with mock.patch(self.open_name, mock.mock_open()) as mocked_open:
            self.logger.log('text', self.level)
        mocked_open.assert_called_once_with(self.filename, 'w', encoding='utf-8')
        handle = mocked_open()
        if sys.version_info[0] >= 3 and sys.version_info[1] >= 6:
            handle.write.assert_called_once()
            handle.flush.assert_called_once()

    def test_log_with_open_file(self):
        handle = mock.Mock()
        self.logger.f = handle
        with mock.patch(self.open_name, mock.mock_open()) as mocked_open:
            self.logger.log('text', self.level)
        mocked_open.assert_not_called()
        if sys.version_info[0] >= 3 and sys.version_info[1] >= 6:
            handle.write.assert_called_once()
            handle.flush.assert_called_once()

    def test_shutdown_without_file(self):
        with mock.patch(self.open_name, mock.mock_open()) as mocked_open:
            self.logger.shutdown()
        handle = mocked_open()
        handle.close.assert_not_called()

    def test_shutdown_with_file(self):
        with mock.patch(self.open_name, mock.mock_open()) as mocked_open:
            self.logger.log('text', self.level)
            self.logger.shutdown()
        mocked_open.assert_called_once_with(self.filename, 'w', encoding='utf-8')
        handle = mocked_open()
        handle.close.assert_called_once_with()