Failed Conditions
Pull Request — master (#1990)
by Mischa
01:34
created

TypedTestBear   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 9
Duplicated Lines 0 %
Metric Value
dl 0
loc 9
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 3 1
A __init__() 0 3 1
1
import multiprocessing
2
import unittest
3
4
from coalib.bears.Bear import Bear
5
from coalib.output.printers.LOG_LEVEL import LOG_LEVEL
6
from coalib.processes.communication.LogMessage import LogMessage
7
from coalib.settings.Section import Section
8
from coalib.settings.Setting import Setting
9
10
11
class TestBear(Bear):
12
13
    def __init__(self, section, queue):
14
        Bear.__init__(self, section, queue)
15
16
    def run(self):
17
        self.print("set", "up", delimiter="=")
18
        self.err("teardown")
19
        self.err()
20
21
    @staticmethod
22
    def get_dependencies():
23
        return [BadTestBear]
24
25
26
class BadTestBear(Bear):
0 ignored issues
show
Unused Code introduced by
This abstract class does not seem to be used anywhere.
Loading history...
27
28
    def __init__(self, section, queue):
29
        Bear.__init__(self, section, queue)
30
31
    def run(self):
32
        raise NotImplementedError
33
34
35
class TypedTestBear(Bear):
36
37
    def __init__(self, section, queue):
38
        Bear.__init__(self, section, queue)
39
        self.was_executed = False
40
41
    def run(self, something: int):
42
        self.was_executed = True
43
        return []
44
45
46
class BearWithPrerequisites(Bear):
47
    prerequisites_fulfilled = True
48
49
    def __init__(self, section, queue, prerequisites_fulfilled):
50
        BearWithPrerequisites.prerequisites_fulfilled = prerequisites_fulfilled
51
        Bear.__init__(self, section, queue)
52
        self.was_executed = False
53
54
    def run(self):
55
        self.was_executed = True
56
        return []
57
58
    @classmethod
59
    def check_prerequisites(cls):
60
        return cls.prerequisites_fulfilled
61
62
63
class BearTest(unittest.TestCase):
64
65
    def setUp(self):
66
        self.queue = multiprocessing.Queue()
67
        self.settings = Section("test_settings")
68
        self.uut = TestBear(self.settings, self.queue)
69
70
    def test_simple_api(self):
71
        self.assertRaises(TypeError, TestBear, self.settings, 2)
72
        self.assertRaises(TypeError, TestBear, None, self.queue)
73
        self.assertRaises(NotImplementedError, self.uut.kind)
74
75
        base = Bear(self.settings, None)
76
        self.assertRaises(NotImplementedError, base.run)
77
        self.assertEqual(base.get_non_optional_settings(), {})
78
79
    def test_message_queue(self):
80
        self.uut.execute()
81
        self.check_message(LOG_LEVEL.DEBUG,
82
                           "Running bear {}...".format("TestBear"))
83
        self.check_message(LOG_LEVEL.DEBUG, "set=up")
84
        self.check_message(LOG_LEVEL.ERROR, "teardown")
85
86
    def test_bad_bear(self):
87
        self.uut = BadTestBear(self.settings, self.queue)
88
        self.uut.execute()
89
        self.check_message(LOG_LEVEL.DEBUG)
90
        self.check_message(LOG_LEVEL.WARNING,
91
                           "Bear BadTestBear failed to run. Take a look at "
92
                           "debug messages for further information.")
93
        # debug message contains custom content, dont test this here
94
        self.queue.get()
95
96
    def test_inconvertible(self):
97
        self.uut = TypedTestBear(self.settings, self.queue)
98
        self.settings.append(Setting("something", "5"))
99
        self.uut.execute()
100
        self.check_message(LOG_LEVEL.DEBUG)
101
        self.assertTrue(self.uut.was_executed)
102
103
        self.settings.append(Setting("something", "nonsense"))
104
        self.uut.was_executed = False
105
        self.uut.execute()
106
        self.check_message(LOG_LEVEL.DEBUG)
107
        self.check_message(LOG_LEVEL.WARNING)
108
        self.assertTrue(self.queue.empty())
109
        self.assertFalse(self.uut.was_executed)
110
111
    def check_message(self, log_level, message=None):
112
        msg = self.queue.get()
113
        self.assertIsInstance(msg, LogMessage)
114
        if message:
115
            self.assertEqual(msg.message, message)
116
117
        self.assertEqual(msg.log_level, log_level, msg)
118
119
    def test_no_queue(self):
120
        uut = TestBear(self.settings, None)
121
        uut.execute()  # No exceptions
122
123
    def test_dependencies(self):
124
        self.assertEqual(Bear.get_dependencies(), [])
125
        self.assertEqual(Bear.missing_dependencies([]), [])
126
        self.assertEqual(Bear.missing_dependencies([BadTestBear]), [])
127
128
        self.assertEqual(TestBear.missing_dependencies([]), [BadTestBear])
129
        self.assertEqual(TestBear.missing_dependencies([BadTestBear]), [])
130
        self.assertEqual(TestBear.missing_dependencies([TestBear]),
131
                         [BadTestBear])
132
        self.assertEqual(TestBear.missing_dependencies([TestBear,
133
                                                        BadTestBear]),
134
                         [])
135
136
    def test_check_prerequisites(self):
137
        uut = BearWithPrerequisites(self.settings, self.queue, True)
138
        uut.execute()
139
        self.check_message(LOG_LEVEL.DEBUG)
140
        self.assertTrue(self.queue.empty())
141
        self.assertTrue(uut.was_executed)
142
143
        self.assertRaisesRegex(RuntimeError,
144
                               "The bear BearWithPrerequisites does not "
145
                               "fulfill all requirements\\.",
146
                               BearWithPrerequisites,
147
                               self.settings,
148
                               self.queue,
149
                               False)
150
151
        self.check_message(LOG_LEVEL.WARNING,
152
                           "The bear BearWithPrerequisites does not fulfill "
153
                           "all requirements.")
154
        self.assertTrue(self.queue.empty())
155
156
        self.assertRaisesRegex(RuntimeError,
157
                               "The bear BearWithPrerequisites does not "
158
                               "fulfill all requirements\\. Just because "
159
                               "I want to\\.",
160
                               BearWithPrerequisites,
161
                               self.settings,
162
                               self.queue,
163
                               "Just because I want to.")
164
165
        self.check_message(LOG_LEVEL.WARNING,
166
                           "The bear BearWithPrerequisites does not fulfill "
167
                           "all requirements. Just because I want to.")
168
        self.assertTrue(self.queue.empty())
169
170
    def test_get_config_dir(self):
171
        section = Section("default")
172
        section.append(Setting("config", "/path/to/dir/config"))
173
        uut = TestBear(section, None)
174
        self.assertEqual(uut.get_config_dir(), "/path/to/dir")
175