1
# Standard library imports
5
from IPython.frontend.qt.console.ansi_code_processor import AnsiCodeProcessor
8
class TestAnsiCodeProcessor(unittest.TestCase):
11
self.processor = AnsiCodeProcessor()
14
""" Do control sequences for clearing the console work?
16
string = '\x1b[2J\x1b[K'
18
for i, substring in enumerate(self.processor.split_string(string)):
20
self.assertEquals(len(self.processor.actions), 1)
21
action = self.processor.actions[0]
22
self.assertEquals(action.action, 'erase')
23
self.assertEquals(action.area, 'screen')
24
self.assertEquals(action.erase_to, 'all')
26
self.assertEquals(len(self.processor.actions), 1)
27
action = self.processor.actions[0]
28
self.assertEquals(action.action, 'erase')
29
self.assertEquals(action.area, 'line')
30
self.assertEquals(action.erase_to, 'end')
32
self.fail('Too many substrings.')
33
self.assertEquals(i, 1, 'Too few substrings.')
35
def test_colors(self):
36
""" Do basic controls sequences for colors work?
38
string = 'first\x1b[34mblue\x1b[0mlast'
40
for i, substring in enumerate(self.processor.split_string(string)):
42
self.assertEquals(substring, 'first')
43
self.assertEquals(self.processor.foreground_color, None)
45
self.assertEquals(substring, 'blue')
46
self.assertEquals(self.processor.foreground_color, 4)
48
self.assertEquals(substring, 'last')
49
self.assertEquals(self.processor.foreground_color, None)
51
self.fail('Too many substrings.')
52
self.assertEquals(i, 2, 'Too few substrings.')
54
def test_colors_xterm(self):
55
""" Do xterm-specific control sequences for colors work?
57
string = '\x1b]4;20;rgb:ff/ff/ff\x1b' \
58
'\x1b]4;25;rgbi:1.0/1.0/1.0\x1b'
59
substrings = list(self.processor.split_string(string))
60
desired = { 20 : (255, 255, 255),
61
25 : (255, 255, 255) }
62
self.assertEquals(self.processor.color_map, desired)
64
string = '\x1b[38;5;20m\x1b[48;5;25m'
65
substrings = list(self.processor.split_string(string))
66
self.assertEquals(self.processor.foreground_color, 20)
67
self.assertEquals(self.processor.background_color, 25)
69
def test_scroll(self):
70
""" Do control sequences for scrolling the buffer work?
72
string = '\x1b[5S\x1b[T'
74
for i, substring in enumerate(self.processor.split_string(string)):
76
self.assertEquals(len(self.processor.actions), 1)
77
action = self.processor.actions[0]
78
self.assertEquals(action.action, 'scroll')
79
self.assertEquals(action.dir, 'up')
80
self.assertEquals(action.unit, 'line')
81
self.assertEquals(action.count, 5)
83
self.assertEquals(len(self.processor.actions), 1)
84
action = self.processor.actions[0]
85
self.assertEquals(action.action, 'scroll')
86
self.assertEquals(action.dir, 'down')
87
self.assertEquals(action.unit, 'line')
88
self.assertEquals(action.count, 1)
90
self.fail('Too many substrings.')
91
self.assertEquals(i, 1, 'Too few substrings.')
93
def test_specials(self):
94
""" Are special characters processed correctly?
96
string = '\f' # form feed
97
self.assertEquals(list(self.processor.split_string(string)), [''])
98
self.assertEquals(len(self.processor.actions), 1)
99
action = self.processor.actions[0]
100
self.assertEquals(action.action, 'scroll')
101
self.assertEquals(action.dir, 'down')
102
self.assertEquals(action.unit, 'page')
103
self.assertEquals(action.count, 1)
106
if __name__ == '__main__':