summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/cmdline.py13
-rw-r--r--coverage/misc.py20
-rw-r--r--tests/test_misc.py23
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"""