##// END OF EJS Templates
Merge pull request #1825 from minrk/elide2...
Merge pull request #1825 from minrk/elide2 second attempt at scrolled long output Some amount of CSS tweaking will probably want to be done before 0.13 final, but this is good enough for beta. closes #1553

File last commit:

r6436:9249576d
r7614:ef57f6e2 merge
Show More
test_ansi_code_processor.py
171 lines | 6.9 KiB | text/x-python | PythonLexer
/ IPython / frontend / 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:
self.assertEquals(len(self.processor.actions), 1)
action = self.processor.actions[0]
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 self.assertEquals(action.action, 'erase')
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 self.assertEquals(action.area, 'screen')
self.assertEquals(action.erase_to, 'all')
elif i == 1:
self.assertEquals(len(self.processor.actions), 1)
action = self.processor.actions[0]
epatters
Added support for scroll sequences and form feeds to AnsiCodeProcessor....
r2998 self.assertEquals(action.action, 'erase')
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 self.assertEquals(action.area, 'line')
self.assertEquals(action.erase_to, 'end')
else:
self.fail('Too many substrings.')
self.assertEquals(i, 1, 'Too few substrings.')
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:
self.assertEquals(substring, 'first')
self.assertEquals(self.processor.foreground_color, None)
elif i == 1:
self.assertEquals(substring, 'blue')
self.assertEquals(self.processor.foreground_color, 4)
elif i == 2:
self.assertEquals(substring, 'last')
self.assertEquals(self.processor.foreground_color, None)
else:
epatters
Added support for ANSI erase codes. Clearing the console via ANSI escape sequences is now supported.
r2783 self.fail('Too many substrings.')
self.assertEquals(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) }
self.assertEquals(self.processor.color_map, desired)
string = '\x1b[38;5;20m\x1b[48;5;25m'
substrings = list(self.processor.split_string(string))
self.assertEquals(self.processor.foreground_color, 20)
self.assertEquals(self.processor.background_color, 25)
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:
self.assertEquals(len(self.processor.actions), 1)
action = self.processor.actions[0]
self.assertEquals(action.action, 'scroll')
self.assertEquals(action.dir, 'up')
self.assertEquals(action.unit, 'line')
self.assertEquals(action.count, 5)
elif i == 1:
self.assertEquals(len(self.processor.actions), 1)
action = self.processor.actions[0]
self.assertEquals(action.action, 'scroll')
self.assertEquals(action.dir, 'down')
self.assertEquals(action.unit, 'line')
self.assertEquals(action.count, 1)
else:
self.fail('Too many substrings.')
self.assertEquals(i, 1, 'Too few substrings.')
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
self.assertEquals(list(self.processor.split_string(string)), [''])
self.assertEquals(len(self.processor.actions), 1)
action = self.processor.actions[0]
self.assertEquals(action.action, 'scroll')
self.assertEquals(action.dir, 'down')
self.assertEquals(action.unit, 'page')
self.assertEquals(action.count, 1)
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])
self.assertEquals(splits, ['foo', None, 'bar'])
self.assertEquals(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])
self.assertEquals(splits, ['foo', None, 'bar', '\r\n', 'cat', '\r\n', '\n'])
self.assertEquals(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])
self.assertEquals(splits, ['foo', None, 'bar'])
self.assertEquals(actions, [[], ['beep'], []])
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])
self.assertEquals(splits, ['foo', None, 'bar'])
self.assertEquals(actions, [[], ['backspace'], []])
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])
self.assertEquals(splits, ['abc', None, 'def', None])
self.assertEquals(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()