##// END OF EJS Templates
Move Qt package to top-level.
Move Qt package to top-level.

File last commit:

r11009:e16cf2f8
r11009:e16cf2f8
Show More
test_ansi_code_processor.py
171 lines | 6.8 KiB | text/x-python | PythonLexer
/ IPython / qt / console / tests / test_ansi_code_processor.py
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716 # Standard library imports
import unittest
# Local imports
from IPython.frontend.qt.console.ansi_code_processor import AnsiCodeProcessor
class TestAnsiCodeProcessor(unittest.TestCase):
def setUp(self):
self.processor = AnsiCodeProcessor()
epatters
Added 256-color support to Qt console escape sequence processing.
r3367 def test_clear(self):
""" Do control sequences for clearing the console work?
"""
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 string = '\x1b[2J\x1b[K'
i = -1
for i, substring in enumerate(self.processor.split_string(string)):
if i == 0:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(len(self.processor.actions), 1)
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 action = self.processor.actions[0]
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(action.action, 'erase')
self.assertEqual(action.area, 'screen')
self.assertEqual(action.erase_to, 'all')
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 elif i == 1:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(len(self.processor.actions), 1)
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 action = self.processor.actions[0]
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(action.action, 'erase')
self.assertEqual(action.area, 'line')
self.assertEqual(action.erase_to, 'end')
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 else:
self.fail('Too many substrings.')
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(i, 1, 'Too few substrings.')
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783
epatters
Added 256-color support to Qt console escape sequence processing.
r3367 def test_colors(self):
""" Do basic controls sequences for colors work?
"""
string = 'first\x1b[34mblue\x1b[0mlast'
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716 i = -1
for i, substring in enumerate(self.processor.split_string(string)):
if i == 0:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(substring, 'first')
self.assertEqual(self.processor.foreground_color, None)
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716 elif i == 1:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(substring, 'blue')
self.assertEqual(self.processor.foreground_color, 4)
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716 elif i == 2:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(substring, 'last')
self.assertEqual(self.processor.foreground_color, None)
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716 else:
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 self.fail('Too many substrings.')
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(i, 2, 'Too few substrings.')
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716
epatters
Added 256-color support to Qt console escape sequence processing.
r3367 def test_colors_xterm(self):
""" Do xterm-specific control sequences for colors work?
"""
string = '\x1b]4;20;rgb:ff/ff/ff\x1b' \
'\x1b]4;25;rgbi:1.0/1.0/1.0\x1b'
substrings = list(self.processor.split_string(string))
desired = { 20 : (255, 255, 255),
25 : (255, 255, 255) }
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(self.processor.color_map, desired)
epatters
Added 256-color support to Qt console escape sequence processing.
r3367
string = '\x1b[38;5;20m\x1b[48;5;25m'
substrings = list(self.processor.split_string(string))
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(self.processor.foreground_color, 20)
self.assertEqual(self.processor.background_color, 25)
epatters
Added 256-color support to Qt console escape sequence processing.
r3367
def test_scroll(self):
""" Do control sequences for scrolling the buffer work?
"""
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 string = '\x1b[5S\x1b[T'
i = -1
for i, substring in enumerate(self.processor.split_string(string)):
if i == 0:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(len(self.processor.actions), 1)
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 action = self.processor.actions[0]
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(action.action, 'scroll')
self.assertEqual(action.dir, 'up')
self.assertEqual(action.unit, 'line')
self.assertEqual(action.count, 5)
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 elif i == 1:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(len(self.processor.actions), 1)
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 action = self.processor.actions[0]
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(action.action, 'scroll')
self.assertEqual(action.dir, 'down')
self.assertEqual(action.unit, 'line')
self.assertEqual(action.count, 1)
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 else:
self.fail('Too many substrings.')
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(i, 1, 'Too few substrings.')
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998
Michael Droettboom
Add tests for carriage-return and beep support.
r5567 def test_formfeed(self):
""" Are formfeed characters processed correctly?
epatters
Added 256-color support to Qt console escape sequence processing.
r3367 """
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 string = '\f' # form feed
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(list(self.processor.split_string(string)), [''])
self.assertEqual(len(self.processor.actions), 1)
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 action = self.processor.actions[0]
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(action.action, 'scroll')
self.assertEqual(action.dir, 'down')
self.assertEqual(action.unit, 'page')
self.assertEqual(action.count, 1)
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998
Michael Droettboom
Add tests for carriage-return and beep support.
r5567 def test_carriage_return(self):
""" Are carriage return characters processed correctly?
"""
MinRK
[qtconsole] carriage-return action matches CR only, not CRLF...
r5661 string = 'foo\rbar' # carriage return
Puneeth Chaganti
BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
r6436 splits = []
actions = []
for split in self.processor.split_string(string):
splits.append(split)
actions.append([action.action for action in self.processor.actions])
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(splits, ['foo', None, 'bar'])
self.assertEqual(actions, [[], ['carriage-return'], []])
Michael Droettboom
Add tests for carriage-return and beep support.
r5567
MinRK
[qtconsole] carriage-return action matches CR only, not CRLF...
r5661 def test_carriage_return_newline(self):
"""transform CRLF to LF"""
Puneeth Chaganti
BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
r6436 string = 'foo\rbar\r\ncat\r\n\n' # carriage return and newline
MinRK
[qtconsole] carriage-return action matches CR only, not CRLF...
r5661 # only one CR action should occur, and '\r\n' should transform to '\n'
Puneeth Chaganti
BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
r6436 splits = []
actions = []
for split in self.processor.split_string(string):
splits.append(split)
actions.append([action.action for action in self.processor.actions])
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(splits, ['foo', None, 'bar', '\r\n', 'cat', '\r\n', '\n'])
self.assertEqual(actions, [[], ['carriage-return'], [], ['newline'], [], ['newline'], ['newline']])
MinRK
[qtconsole] carriage-return action matches CR only, not CRLF...
r5661
Michael Droettboom
Add tests for carriage-return and beep support.
r5567 def test_beep(self):
""" Are beep characters processed correctly?
"""
Puneeth Chaganti
BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
r6436 string = 'foo\abar' # bell
splits = []
actions = []
for split in self.processor.split_string(string):
splits.append(split)
actions.append([action.action for action in self.processor.actions])
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(splits, ['foo', None, 'bar'])
self.assertEqual(actions, [[], ['beep'], []])
Puneeth Chaganti
BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
r6436
def test_backspace(self):
""" Are backspace characters processed correctly?
"""
string = 'foo\bbar' # backspace
splits = []
actions = []
for split in self.processor.split_string(string):
splits.append(split)
actions.append([action.action for action in self.processor.actions])
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(splits, ['foo', None, 'bar'])
self.assertEqual(actions, [[], ['backspace'], []])
Puneeth Chaganti
BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561]
r6436
def test_combined(self):
""" Are CR and BS characters processed correctly in combination?
BS is treated as a change in print position, rather than a
backwards character deletion. Therefore a BS at EOL is
effectively ignored.
"""
string = 'abc\rdef\b' # CR and backspace
splits = []
actions = []
for split in self.processor.split_string(string):
splits.append(split)
actions.append([action.action for action in self.processor.actions])
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(splits, ['abc', None, 'def', None])
self.assertEqual(actions, [[], ['carriage-return'], [], ['backspace']])
Michael Droettboom
Add tests for carriage-return and beep support.
r5567
epatters
* Moved AnsiCodeProcessor to separate file, refactored its API, and added unit tests....
r2716
if __name__ == '__main__':
unittest.main()