Revision: 2495dfa40d37
Author: Pekka Klärck
Date: Fri Feb 24 05:40:21 2012
Log: CommandLineMonitor: separated writing to CommandLineWriter and
some other cleanup
http://code.google.com/p/robotframework/source/detail?r=2495dfa40d37
Modified:
/src/robot/output/monitor.py
=======================================
--- /src/robot/output/monitor.py Mon Jan 30 05:38:12 2012
+++ /src/robot/output/monitor.py Fri Feb 24 05:40:21 2012
@@ -15,70 +15,87 @@
import sys
from robot import utils
-from highlighting import Highlighter, NoHighlighting
-from loggerhelper import IsLogged
-
-
-class CommandLineMonitor:
+
+from .highlighting import Highlighter, NoHighlighting
+from .loggerhelper import IsLogged
+
+
+class CommandLineMonitor(object):
def __init__(self, width=78, colors='AUTO', stdout=None, stderr=None):
- self._width = width
- self._stdout = stdout or sys.__stdout__
- self._stderr = stderr or sys.__stderr__
- self._highlighter = StatusHighlighter(colors, self._stdout,
self._stderr)
+ self._writer = CommandLineWriter(width, colors, stdout, stderr)
self._is_logged = IsLogged('WARN')
self._started = False
def start_suite(self, suite):
if not self._started:
- self._write_separator('=')
+ self._writer.separator('=')
self._started = True
- self._write_info(suite.longname, suite.doc, start_suite=True)
- self._write_separator('=')
+ self._writer.info(suite.longname, suite.doc, start_suite=True)
+ self._writer.separator('=')
def end_suite(self, suite):
- self._write_info(suite.longname, suite.doc)
- self._write_status(suite.status)
- self._write_message(suite.get_full_message())
- self._write_separator('=')
+ self._writer.info(suite.longname, suite.doc)
+ self._writer.status(suite.status)
+ self._writer.message(suite.get_full_message())
+ self._writer.separator('=')
def start_test(self, test):
- self._write_info(test.name, test.doc)
+ self._writer.info(test.name, test.doc)
def end_test(self, test):
- self._write_status(test.status)
- self._write_message(test.message)
- self._write_separator('-')
+ self._writer.status(test.status)
+ self._writer.message(test.message)
+ self._writer.separator('-')
def message(self, msg):
if self._is_logged(msg.level):
- self._write_with_highlighting('[ ', msg.level, ' ] ' +
msg.message,
- error=True)
+ self._writer.error(msg.message, msg.level)
+
def output_file(self, name, path):
- self._write('%-8s %s' % (name+':', path))
-
- def _write_info(self, name, doc, start_suite=False):
- maxwidth = self._width
- if not start_suite:
- maxwidth -= len(' | PASS |')
- info = self._get_info(name, doc, maxwidth)
+ self._writer.output(name, path)
+
+
+class CommandLineWriter(object):
+ _status_length = len('| PASS |')
+
+ def __init__(self, width=78, colors='AUTO', stdout=None, stderr=None):
+ self._width = width
+ self._stdout = stdout or sys.__stdout__
+ self._stderr = stderr or sys.__stderr__
+ self._highlighter = StatusHighlighter(colors, self._stdout,
self._stderr)
+
+ def info(self, name, doc, start_suite=False):
+ width, padding = self._get_info_width_and_padding(start_suite)
+ info = self._get_info(name, doc, width) + padding
self._write(info, newline=start_suite)
- def _get_info(self, name, doc, maxwidth):
- if utils.get_console_length(name) > maxwidth:
- return utils.pad_console_length(name, maxwidth)
+ def _get_info_width_and_padding(self, start_suite):
+ if start_suite:
+ return self._width, ''
+ return self._width - self._status_length - 1, ' '
+
+ def _get_info(self, name, doc, width):
+ if utils.get_console_length(name) > width:
+ return utils.pad_console_length(name, width)
info = name if not doc else '%s :: %s' % (name,
doc.splitlines()[0])
- return utils.pad_console_length(info, maxwidth)
-
- def _write_status(self, status):
- self._write_with_highlighting(' | ', status, ' |')
-
- def _write_message(self, message):
+ return utils.pad_console_length(info, width)
+
+ def separator(self, char):
+ self._write(char * self._width)
+
+ def status(self, status):
+ self._highlight('| ', status, ' |')
+
+ def message(self, message):
if message:
self._write(message.strip())
- def _write_separator(self, sep_char):
- self._write(sep_char * self._width)
+ def error(self, message, level):
+ self._highlight('[ ', level, ' ] ' + message, error=True)
+
+ def output(self, name, path):
+ self._write('%-8s %s' % (name+':', path))
def _write(self, message, newline=True, error=False):
stream = self._stdout if not error else self._stderr
@@ -87,8 +104,7 @@
stream.write(utils.encode_output(message).replace('\t', ' '*8))
stream.flush()
- def _write_with_highlighting(self, before, highlighted, after,
- newline=True, error=False):
+ def _highlight(self, before, highlighted, after, newline=True,
error=False):
stream = self._stdout if not error else self._stderr
self._write(before, newline=False, error=error)
self._highlighter.start(highlighted, stream)
@@ -97,7 +113,7 @@
self._write(after, newline=newline, error=error)
-class StatusHighlighter:
+class StatusHighlighter(object):
def __init__(self, colors, *streams):
self._current = None