TestGUI.test_exit()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 1
c 3
b 0
f 0
dl 0
loc 4
rs 10
1
#!/usr/bin/env python
2
3
"""Tests for the dtb.cli module."""
4
5
import unittest
6
from unittest.mock import patch, Mock
7
8
import os
9
import sys
10
import imp
11
import logging
12
13
from dtb import gui
14
15
from dtb.tests import ENV, REASON
16
17
if __name__ == '__main__':
18
    os.environ[ENV] = '1'
19
20
21
@unittest.skipUnless(os.getenv(ENV), REASON)  # pylint: disable=R0904
22
class TestGUI(unittest.TestCase):  # pylint: disable=R0904
23
    """Integration tests for the 'DropTheBeat' graphical interface."""
24
25
    @patch('dtb.gui.run', Mock(side_effect=KeyboardInterrupt))
26
    def test_interrupt(self):
27
        """Verify the GUI can be interrupted."""
28
        self.assertIs(None, gui.main([]))
29
30
    @patch('dtb.gui.run', Mock(return_value=False))
31
    def test_exit(self):
32
        """Verify the GUI can exit on error."""
33
        self.assertRaises(SystemExit, gui.main, [])
34
35
36
class TestImport(unittest.TestCase):  # pylint: disable=R0904
37
    """Unit tests for importing the GUI module."""
38
39
    def test_import(self):
40
        """Verify tkinter import errors are handled."""
41
        sys.modules['tkinter'] = Mock(side_effect=ImportError)
42
        imp.reload(gui)
43
        self.assertFalse(gui.run(Mock()))
44
        self.assertIsInstance(gui.tk, Mock)
45
46
47
@patch('dtb.gui.run', Mock(return_value=True))  # pylint: disable=R0904
48
class TestLogging(unittest.TestCase):  # pylint: disable=R0904
49
    """Unit tests for logging levels."""
50
51
    def test_verbose_0(self):
52
        """Verify verbose level 0 can be set."""
53
        self.assertIs(None, gui.main([]))
54
55
    def test_verbose_1(self):
56
        """Verify verbose level 1 can be set."""
57
        self.assertIs(None, gui.main(['-v']))
58
59
60
if __name__ == '__main__':
61
    logging.basicConfig(format="%(message)s", level=logging.INFO)
62
    unittest.main()
63