[Python-checkins] distutils2: Merge coverage functionality into runtests.py. Thanks Yannick!
tarek.ziade
python-checkins at python.org
Sat Oct 2 00:52:20 CEST 2010
tarek.ziade pushed e94847294adf to distutils2:
http://hg.python.org/distutils2/rev/e94847294adf
changeset: 728:e94847294adf
user: ?ric Araujo <merwok at netwok.org>
date: Fri Oct 01 22:43:22 2010 +0200
summary: Merge coverage functionality into runtests.py. Thanks Yannick!
files: runtests-cov.py, runtests.py
diff --git a/runtests-cov.py b/runtests-cov.py
deleted file mode 100644
--- a/runtests-cov.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env python
-"""Tests for distutils2.
-
-The tests for distutils2 are defined in the distutils2.tests package.
-"""
-
-import sys
-from os.path import dirname, islink, realpath, join, abspath
-from optparse import OptionParser
-
-COVERAGE_FILE = join(dirname(abspath(__file__)), '.coverage')
-
-def get_coverage():
- """ Return a usable coverage object. """
- # deferred import because coverage is optional
- import coverage
- cov = getattr(coverage, "the_coverage", None)
- if not cov:
- cov = coverage.coverage(COVERAGE_FILE)
- return cov
-
-def ignore_prefixes(module):
- """ Return a list of prefixes to ignore in the coverage report if
- we want to completely skip `module`.
- """
- # A function like that is needed because some GNU/Linux
- # distributions, such a Ubuntu, really like to build link farm in
- # /usr/lib in order to save a few bytes on the disk.
- dirnames = [dirname(module.__file__)]
-
- pymod = module.__file__.rstrip("c")
- if islink(pymod):
- dirnames.append(dirname(realpath(pymod)))
- return dirnames
-
-
-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
-
-
-def coverage_report(opts):
- from distutils2.tests.support import unittest
- cov = get_coverage()
- if hasattr(cov, "load"):
- # running coverage 3.x
- cov.load()
- morfs = None
- else:
- # running coverage 2.x
- cov.cache = COVERAGE_FILE
- cov.restore()
- morfs = [m for m in cov.cexecuted.keys() if "distutils2" in m]
-
- prefixes = ["runtests", "distutils2/tests", "distutils2/_backport"]
- prefixes += ignore_prefixes(unittest)
-
- try:
- import docutils
- prefixes += ignore_prefixes(docutils)
- except ImportError:
- # that module is completely optional
- pass
-
- try:
- import roman
- prefixes += ignore_prefixes(roman)
- except ImportError:
- # that module is also completely optional
- pass
-
- try:
- cov.report(morfs,
- omit_prefixes=prefixes,
- show_missing=opts.show_missing)
- except TypeError:
- # Coverage 3.4 turned `omit_prefixes` into a list of globbing patterns
- cov.report(morfs,
- omit=[p + "*" for p in prefixes],
- show_missing=opts.show_missing)
-
-def test_main():
- opts, args = parse_opts()
- verbose = not opts.quiet
- ret = 0
-
- if opts.coverage:
- cov = get_coverage()
- cov.erase()
- cov.start()
- if not opts.report:
- ret = run_tests(verbose)
- if opts.coverage:
- cov.stop()
- cov.save()
-
- if opts.report or opts.coverage:
- coverage_report(opts)
-
- return ret
-
-
-def run_tests(verbose):
- # do NOT import those at the top level, coverage will be inaccurate if
- # modules are imported before its magic is started
- from distutils2.tests import run_unittest, test_suite, reap_children, TestFailed
- from distutils2._backport.tests import test_suite as btest_suite
- try:
- try:
- run_unittest([test_suite(), btest_suite()], verbose_=verbose)
- return 0
- except TestFailed:
- return 1
- finally:
- reap_children()
-
-
-if __name__ == "__main__":
- if sys.version < '2.5':
- try:
- from distutils2._backport import hashlib
- except ImportError:
- import subprocess
- subprocess.call([sys.executable, 'setup.py', 'build_ext'])
- sys.exit(test_main())
diff --git a/runtests.py b/runtests.py
--- a/runtests.py
+++ b/runtests.py
@@ -5,17 +5,120 @@
"""
import sys
+from os.path import dirname, islink, realpath, join, abspath
+from optparse import OptionParser
+COVERAGE_FILE = join(dirname(abspath(__file__)), '.coverage')
+
+def get_coverage():
+ """ Return a usable coverage object. """
+ # deferred import because coverage is optional
+ import coverage
+ cov = getattr(coverage, "the_coverage", None)
+ if not cov:
+ cov = coverage.coverage(COVERAGE_FILE)
+ return cov
+
+def ignore_prefixes(module):
+ """ Return a list of prefixes to ignore in the coverage report if
+ we want to completely skip `module`.
+ """
+ # A function like that is needed because some GNU/Linux
+ # distributions, such a Ubuntu, really like to build link farm in
+ # /usr/lib in order to save a few bytes on the disk.
+ dirnames = [dirname(module.__file__)]
+
+ pymod = module.__file__.rstrip("c")
+ if islink(pymod):
+ dirnames.append(dirname(realpath(pymod)))
+ return dirnames
+
+
+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
+
+
+def coverage_report(opts):
+ from distutils2.tests.support import unittest
+ cov = get_coverage()
+ if hasattr(cov, "load"):
+ # running coverage 3.x
+ cov.load()
+ morfs = None
+ else:
+ # running coverage 2.x
+ cov.cache = COVERAGE_FILE
+ cov.restore()
+ morfs = [m for m in cov.cexecuted.keys() if "distutils2" in m]
+
+ prefixes = ["runtests", "distutils2/tests", "distutils2/_backport"]
+ prefixes += ignore_prefixes(unittest)
+
+ try:
+ import docutils
+ prefixes += ignore_prefixes(docutils)
+ except ImportError:
+ # that module is completely optional
+ pass
+
+ try:
+ import roman
+ prefixes += ignore_prefixes(roman)
+ except ImportError:
+ # that module is also completely optional
+ pass
+
+ try:
+ cov.report(morfs,
+ omit_prefixes=prefixes,
+ show_missing=opts.show_missing)
+ except TypeError:
+ # Coverage 3.4 turned `omit_prefixes` into a list of globbing patterns
+ cov.report(morfs,
+ omit=[p + "*" for p in prefixes],
+ show_missing=opts.show_missing)
def test_main():
- from distutils2.tests import (run_unittest, reap_children,
- test_suite, TestFailed)
+ opts, args = parse_opts()
+ verbose = not opts.quiet
+ ret = 0
+
+ if opts.coverage:
+ cov = get_coverage()
+ cov.erase()
+ cov.start()
+ if not opts.report:
+ ret = run_tests(verbose)
+ if opts.coverage:
+ cov.stop()
+ cov.save()
+
+ if opts.report or opts.coverage:
+ coverage_report(opts)
+
+ return ret
+
+
+def run_tests(verbose):
+ # do NOT import those at the top level, coverage will be inaccurate if
+ # modules are imported before its magic is started
+ from distutils2.tests import run_unittest, test_suite, reap_children, TestFailed
from distutils2._backport.tests import test_suite as btest_suite
- # XXX just supporting -q right now to enable detailed/quiet output
- if len(sys.argv) > 1:
- verbose = sys.argv[-1] != '-q'
- else:
- verbose = 1
try:
try:
run_unittest([test_suite(), btest_suite()], verbose_=verbose)
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list