summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerin Peter George <jerinpetergeorge@gmail.com>2020-07-04 05:26:00 +0530
committerGitHub <noreply@github.com>2020-07-03 19:56:00 -0400
commitba7e1db306b5a7f4cb699de90913c7dd8838018f (patch)
tree6926cd002881d3a277b361e8f8d21334797ac3fb
parentf28b1dba5d8359029f5f491fec207c10097baf10 (diff)
downloadpython-coveragepy-git-ba7e1db306b5a7f4cb699de90913c7dd8838018f.tar.gz
Report descending sort option (#1005)
* added descending sort option in coverage report * commandline option for report sort added * Fix tests for pull #1005 * conditional statements improved * sort option help updated with choices * commandline test for sort added Co-authored-by: Ned Batchelder <ned@nedbatchelder.com>
-rw-r--r--coverage/cmdline.py8
-rw-r--r--coverage/config.py1
-rw-r--r--coverage/control.py3
-rw-r--r--coverage/summary.py12
-rw-r--r--tests/test_cmdline.py6
5 files changed, 27 insertions, 3 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index 059d42a2..f7c82864 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -85,6 +85,11 @@ class Opts(object):
"which isn't done by default."
),
)
+ sort = optparse.make_option(
+ '--sort', action='store', metavar='COLUMN',
+ help="Sort the report by the named column: name, stmts, miss, branch, brpart, or cover. "
+ "Default is name."
+ )
show_missing = optparse.make_option(
'-m', '--show-missing', action='store_true',
help="Show line numbers of statements in each module that weren't executed.",
@@ -221,6 +226,7 @@ class CoverageOptionParser(optparse.OptionParser, object):
skip_covered=None,
skip_empty=None,
show_contexts=None,
+ sort=None,
source=None,
timid=None,
title=None,
@@ -410,6 +416,7 @@ CMDS = {
Opts.include,
Opts.omit,
Opts.precision,
+ Opts.sort,
Opts.show_missing,
Opts.skip_covered,
Opts.no_skip_covered,
@@ -601,6 +608,7 @@ class CoverageScript(object):
skip_covered=options.skip_covered,
skip_empty=options.skip_empty,
precision=options.precision,
+ sort=options.sort,
**report_args
)
elif options.action == "annotate":
diff --git a/coverage/config.py b/coverage/config.py
index 6d336d1f..84d9758b 100644
--- a/coverage/config.py
+++ b/coverage/config.py
@@ -211,6 +211,7 @@ class CoverageConfig(object):
self.show_missing = False
self.skip_covered = False
self.skip_empty = False
+ self.sort = None
# Defaults for [html]
self.extra_css = None
diff --git a/coverage/control.py b/coverage/control.py
index bd7ba2e6..cc0c271a 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -831,7 +831,7 @@ class Coverage(object):
def report(
self, morfs=None, show_missing=None, ignore_errors=None,
file=None, omit=None, include=None, skip_covered=None,
- contexts=None, skip_empty=None, precision=None,
+ contexts=None, skip_empty=None, precision=None, sort=None
):
"""Write a textual summary report to `file`.
@@ -882,6 +882,7 @@ class Coverage(object):
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
show_missing=show_missing, skip_covered=skip_covered,
report_contexts=contexts, skip_empty=skip_empty, precision=precision,
+ sort=sort
):
reporter = SummaryReporter(self)
return reporter.report(morfs, outfile=file)
diff --git a/coverage/summary.py b/coverage/summary.py
index 97d9fff0..986cd2f2 100644
--- a/coverage/summary.py
+++ b/coverage/summary.py
@@ -104,10 +104,18 @@ class SummaryReporter(object):
# Sort the lines and write them out.
if getattr(self.config, 'sort', None):
- position = column_order.get(self.config.sort.lower())
+ sort_option = self.config.sort.lower()
+ reverse = False
+ if sort_option[0] == '-':
+ reverse = True
+ sort_option = sort_option[1:]
+ elif sort_option[0] == '+':
+ sort_option = sort_option[1:]
+
+ position = column_order.get(sort_option)
if position is None:
raise CoverageException("Invalid sorting option: {!r}".format(self.config.sort))
- lines.sort(key=lambda l: (l[1][position], l[0]))
+ lines.sort(key=lambda l: (l[1][position], l[0]), reverse=reverse)
for line in lines:
self.writeout(line[0])
diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py
index db70a994..560a3d17 100644
--- a/tests/test_cmdline.py
+++ b/tests/test_cmdline.py
@@ -42,6 +42,7 @@ class BaseCmdLineTest(CoverageTest):
_defaults.Coverage().report(
ignore_errors=None, include=None, omit=None, morfs=[],
show_missing=None, skip_covered=None, contexts=None, skip_empty=None, precision=None,
+ sort=None,
)
_defaults.Coverage().xml_report(
ignore_errors=None, include=None, omit=None, morfs=[], outfile=None,
@@ -402,6 +403,11 @@ class CmdLineTest(BaseCmdLineTest):
cov.load()
cov.report(contexts=["foo", "bar"])
""")
+ self.cmd_executes("report --sort=-foo", """\
+ cov = Coverage()
+ cov.load()
+ cov.report(sort='-foo')
+ """)
def test_run(self):
# coverage run [-p] [-L] [--timid] MODULE.py [ARG1 ARG2 ...]