> Is there anyone one against adding a --with coverage option to > `runtests.py`?
Please see the proof of concept patch in attachment. -- Yannick Gingras http://ygingras.net http://montrealpython.org -- lead organizer
# HG changeset patch
# Parent fa62924e8f37e9dfca5bcdede499e4389744059f
added options to measure coverage to runtest.py
diff -r fa62924e8f37 -r 611f190bee04 src/runtests.py
--- a/src/runtests.py Sat May 22 21:34:06 2010 -0400
+++ b/src/runtests.py Sat May 22 23:56:23 2010 -0400
@@ -2,22 +2,70 @@
The tests for distutils2 are defined in the distutils2.tests package;
"""
+import os
import sys
+from contextlib import contextmanager
+from optparse import OptionParser
+
+
+def parse_opts():
+ parser = OptionParser(usage="%prog [OPTIONS]",
+ description="run the distutils2 unittests")
+
+ parser.add_option("-q", "--quiet", help="do not print verbose messages",
+ action="store_true", default=False)
+ parser.add_option("-c", "--coverage", action="store_true", default=False,
+ help="produce a coverage report at the end of the run")
+ parser.add_option("-r", "--report", action="store_true", default=False,
+ help="produce a coverage report from the last test run")
+ parser.add_option("-m", "--show-missing", action="store_true",
+ default=False,
+ help=("Show line numbers of statements in each module "
+ "that weren't executed."))
+
+ opts, args = parser.parse_args()
+ return opts, args
+
+...@contextmanager
+def coverage_measurement(enabled):
+ if enabled:
+ import coverage
+ cov = coverage.coverage()
+ cov.erase()
+ cov.start()
+ yield
+ if enabled:
+ cov.stop()
+ cov.save()
+
+def coverage_report(opts):
+ import coverage
+ import unittest2
+ cov = coverage.coverage()
+ cov.load()
+ cov.report(omit_prefixes=["distutils2/tests",
+ "runtests",
+ "distutils2/_backport",
+ os.path.dirname(unittest2.__file__)],
+ show_missing=opts.show_missing)
+
def test_main():
import distutils2.tests
from distutils2.tests import run_unittest, reap_children
from distutils2._backport.tests import test_suite as btest_suite
- # just supporting -q right now
- # to enable detailed/quiet output
- if len(sys.argv) > 1:
- verbose = sys.argv[-1] != '-q'
- else:
- verbose = 1
- run_unittest([distutils2.tests.test_suite(), btest_suite()],
- verbose_=verbose)
- reap_children()
+ opts, args = parse_opts()
+ verbose = not opts.quiet
+
+ if not opts.report:
+ with coverage_measurement(opts.coverage):
+ run_unittest([distutils2.tests.test_suite(), btest_suite()],
+ verbose_=verbose)
+ reap_children()
+
+ if opts.report or opts.coverage:
+ coverage_report(opts)
if __name__ == "__main__":
try:
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Distutils-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/distutils-sig
