-
Notifications
You must be signed in to change notification settings - Fork 129
Expand file tree
/
Copy pathtest_async_alert.py
More file actions
50 lines (39 loc) · 1.96 KB
/
test_async_alert.py
File metadata and controls
50 lines (39 loc) · 1.96 KB
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
import unittest
from unittest.mock import MagicMock, patch
import cmd2
import cmd2.cmd2 # to patch vt100_support
from cmd2 import rich_utils as ru
class TestAsyncAlert(unittest.TestCase):
def test_async_alert_strips_ansi_when_allow_style_is_never(self):
app = cmd2.Cmd()
# Patch vt100_support to True
with patch('cmd2.cmd2.vt100_support', True):
# Patch threading functions
mock_current_thread = MagicMock()
mock_current_thread.name = "NotMainThread"
with (
patch('threading.current_thread', return_value=mock_current_thread),
patch('threading.main_thread', return_value=MagicMock()),
patch('cmd2.cmd2.rl_get_display_prompt', return_value='(Cmd) '),
patch('cmd2.cmd2.readline.get_line_buffer', return_value=''),
patch('cmd2.cmd2.rl_get_point', return_value=0),
patch('cmd2.cmd2.rl_force_redisplay'),
patch('sys.stdout', new_callable=MagicMock) as mock_stdout,
):
# Set allow_style to NEVER
app.allow_style = ru.AllowStyle.NEVER
# Styled message
msg = "\033[31mError\033[0m"
# Call async_alert
app.async_alert(msg)
# Capture calls to write
# mock_stdout.write.call_args_list -> [call(str), call(str)...]
# We look at all written strings
written_content = "".join([call.args[0] for call in mock_stdout.write.call_args_list])
# Check that ANSI codes for color are NOT present
if "\033[31m" in written_content:
raise AssertionError(f"Found ANSI color code in output: {written_content!r}")
if "Error" not in written_content:
raise AssertionError(f"Message 'Error' not found in output: {written_content!r}")
if __name__ == '__main__':
unittest.main()