Commit 3c6c0f81 authored by Simon Glass's avatar Simon Glass

patman: Add a way of recording terminal output for testing

When running unit tests we don't want output to go to the terminal.
Provide a way of collecting it so that it can be examined by test code
later.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 0b703dbc
......@@ -14,6 +14,78 @@ import sys
# Selection of when we want our output to be colored
COLOR_IF_TERMINAL, COLOR_ALWAYS, COLOR_NEVER = range(3)
# Initially, we are set up to print to the terminal
print_test_mode = False
print_test_list = []
class PrintLine:
"""A line of text output
Members:
text: Text line that was printed
newline: True to output a newline after the text
colour: Text colour to use
"""
def __init__(self, text, newline, colour):
self.text = text
self.newline = newline
self.colour = colour
def __str__(self):
return 'newline=%s, colour=%s, text=%s' % (self.newline, self.colour,
self.text)
def Print(text='', newline=True, colour=None):
"""Handle a line of output to the terminal.
In test mode this is recorded in a list. Otherwise it is output to the
terminal.
Args:
text: Text to print
newline: True to add a new line at the end of the text
colour: Colour to use for the text
"""
if print_test_mode:
print_test_list.append(PrintLine(text, newline, colour))
else:
if colour:
col = Color()
text = col.Color(colour, text)
print text,
if newline:
print
def SetPrintTestMode():
"""Go into test mode, where all printing is recorded"""
global print_test_mode
print_test_mode = True
def GetPrintTestLines():
"""Get a list of all lines output through Print()
Returns:
A list of PrintLine objects
"""
global print_test_list
ret = print_test_list
print_test_list = []
return ret
def EchoPrintTestLines():
"""Print out the text lines collected"""
for line in print_test_list:
if line.colour:
col = Color()
print col.Color(line.colour, line.text),
else:
print line.text,
if line.newline:
print
class Color(object):
"""Conditionally wraps text in ANSI color escape sequences."""
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment