diff options
-rw-r--r-- | coverage/cmdline.py | 13 | ||||
-rw-r--r-- | coverage/misc.py | 20 | ||||
-rw-r--r-- | tests/test_misc.py | 23 |
3 files changed, 45 insertions, 11 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py index 51d8043f..9306d9b9 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -5,6 +5,7 @@ import optparse, os, sys, traceback from coverage.backward import sorted # pylint: disable=W0622 from coverage.execfile import run_python_file, run_python_module from coverage.misc import CoverageException, ExceptionDuringRun, NoSource +from coverage.misc import info_formatter class Opts(object): @@ -592,16 +593,8 @@ class CoverageScript(object): for info in args: if info == 'sys': print("-- sys ----------------------------------------") - for label, info in self.coverage.sysinfo(): - if info == []: - info = "-none-" - if isinstance(info, list): - prefix = "%15s:" % label - for e in info: - print("%16s %s" % (prefix, e)) - prefix = "" - else: - print("%15s: %s" % (label, info)) + for line in info_formatter(self.coverage.sysinfo()): + print(line) elif info == 'data': print("-- data ---------------------------------------") self.coverage.load() diff --git a/coverage/misc.py b/coverage/misc.py index 473d7d43..a8773ebf 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -138,6 +138,26 @@ class Hasher(object): return self.md5.digest() +def info_formatter(info): + """Produce a sequence of formatted lines from info. + + `info` is a sequence of pairs (label, data). The produced lines are + nicely formatted, ready to print. + + """ + label_len = max([len(l) for l, d in info]) + 1 + for label, data in info: + if data == []: + data = "-none-" + if isinstance(data, (list, tuple)): + prefix = "%*s:" % (label_len, label) + for e in data: + yield "%*s %s" % (label_len+1, prefix, e) + prefix = "" + else: + yield "%*s: %s" % (label_len, label, data) + + class CoverageException(Exception): """An exception specific to Coverage.""" pass diff --git a/tests/test_misc.py b/tests/test_misc.py index e7fa436a..58c71640 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -1,7 +1,7 @@ """Tests of miscellaneous stuff.""" import sys -from coverage.misc import Hasher, file_be_gone +from coverage.misc import Hasher, file_be_gone, info_formatter from coverage import __version__, __url__ from tests.coveragetest import CoverageTest @@ -45,6 +45,27 @@ class RemoveFileTest(CoverageTest): self.assertRaises(OSError, file_be_gone, ".") +class InfoFormatterTest(CoverageTest): + """Tests of misc.info_formatter.""" + + def test_info_formatter(self): + lines = list(info_formatter([ + ('x', 'hello there'), + ('very long label', ['one element']), + ('regular', ['abc', 'def', 'ghi', 'jkl']), + ('nothing', []), + ])) + self.assertEqual(lines, [ + ' x: hello there', + ' very long label: one element', + ' regular: abc', + ' def', + ' ghi', + ' jkl', + ' nothing: -none-', + ]) + + class SetupPyTest(CoverageTest): """Tests of setup.py""" |