From 7fb8e7193f775775dff1b1a27c948797c6fc836d Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 29 Nov 2009 07:18:07 -0500 Subject: Fix some self-measurement problems. Now coverage_coverage.py works again (had to be sure to stop coverage if check_coverage threw an exception). --- test/coverage_coverage.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/coverage_coverage.py') diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index e1e7674f..64380ab7 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -30,12 +30,16 @@ import coverage # don't warn about re-import: pylint: disable-msg=W0404 sys.modules.update(covmods) # Run nosetests, with the arguments from our command line. +nose_args = sys.argv[1:] +print(":: Running nosetests %s" % " ".join(nose_args)) import nose -nose.run(sys.argv[1:]) +nose.run(nose_args) cov.stop() +print(":: Saving .coverage") cov.save() +print(":: Writing HTML report to %s/index.html" % HTML_DIR) cov.clear_exclude() cov.exclude("#pragma: no cover") cov.exclude("def __repr__") -- cgit v1.2.1 From 8f4bb15bf8bb6c8510051a865814cc5c2bf53e70 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 29 Nov 2009 07:31:30 -0500 Subject: Don't measure mock.py when we measure our coverage. --- test/coverage_coverage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/coverage_coverage.py') diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index 64380ab7..874cdd6f 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -46,4 +46,4 @@ cov.exclude("def __repr__") cov.exclude("if __name__ == .__main__.:") cov.exclude("raise AssertionError") -cov.html_report(directory=HTML_DIR, ignore_errors=True) +cov.html_report(directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"]) -- cgit v1.2.1 From f4fd807e53113a76173112e3ae0b8d35797b9b73 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 29 Nov 2009 09:51:40 -0500 Subject: coverage_coverage.py now writes separate data files for each run of the test suite, and combines them for reporting. --- test/coverage_coverage.py | 111 +++++++++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 41 deletions(-) (limited to 'test/coverage_coverage.py') diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index 874cdd6f..a1cb13fc 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -1,49 +1,78 @@ -"""Coverage-test Coverage itself.""" +"""Coverage-test Coverage.py itself.""" -import coverage import os, shutil, sys +import nose HTML_DIR = "htmlcov" -if os.path.exists(HTML_DIR): - shutil.rmtree(HTML_DIR) - -cov = coverage.coverage(branch=True) -# Cheap trick: the coverage code itself is excluded from measurement, but if -# we clobber the cover_prefix in the coverage object, we can defeat the -# self-detection. -cov.cover_prefix = "Please measure coverage.py!" -cov.erase() -cov.start() - -# Re-import coverage to get it coverage tested! I don't understand all the -# mechanics here, but if I don't carry over the imported modules (in covmods), -# then things go haywire (os == None eventually). -covmods = {} -covdir = os.path.split(coverage.__file__) -for name, mod in sys.modules.items(): - if name.startswith('coverage'): - if hasattr(mod, '__file__') and mod.__file__.startswith(covdir): - covmods[name] = mod - del sys.modules[name] -import coverage # don't warn about re-import: pylint: disable-msg=W0404 -sys.modules.update(covmods) - -# Run nosetests, with the arguments from our command line. -nose_args = sys.argv[1:] -print(":: Running nosetests %s" % " ".join(nose_args)) -import nose -nose.run(nose_args) +def run_tests_with_coverage(): + import coverage + + tracer = os.environ.get('COVERAGE_TEST_TRACER', 'c') + version = "%s%s" % sys.version_info[:2] + suffix = ".%s_%s" % (version, tracer) + + cov = coverage.coverage(branch=True, data_suffix=suffix) + # Cheap trick: the coverage code itself is excluded from measurement, but + # if we clobber the cover_prefix in the coverage object, we can defeat the + # self-detection. + cov.cover_prefix = "Please measure coverage.py!" + cov.erase() + cov.start() + + # Re-import coverage to get it coverage tested! I don't understand all the + # mechanics here, but if I don't carry over the imported modules (in + # covmods), then things go haywire (os == None, eventually). + covmods = {} + covdir = os.path.split(coverage.__file__)[0] + # We have to make a list since we'll be deleting in the loop. + modules = list(sys.modules.items()) + for name, mod in modules: + if name.startswith('coverage'): + if hasattr(mod, '__file__') and mod.__file__.startswith(covdir): + covmods[name] = mod + del sys.modules[name] + import coverage # don't warn about re-import: pylint: disable-msg=W0404 + sys.modules.update(covmods) + + # Run nosetests, with the arguments from our command line. + print(":: Running nosetests %s" % " ".join(sys.argv[1:])) + nose.run() + + cov.stop() + print(":: Saving .coverage%s" % suffix) + cov.save() + +def report_on_combined_files(): + + if os.path.exists(HTML_DIR): + shutil.rmtree(HTML_DIR) -cov.stop() -print(":: Saving .coverage") -cov.save() + print(":: Writing HTML report to %s/index.html" % HTML_DIR) + import coverage + cov = coverage.coverage() + cov.combine() + cov.save() + cov.clear_exclude() + cov.exclude("#pragma: no cover") + cov.exclude("def __repr__") + cov.exclude("if __name__ == .__main__.:") + cov.exclude("raise AssertionError") + + cov.html_report(directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"]) -print(":: Writing HTML report to %s/index.html" % HTML_DIR) -cov.clear_exclude() -cov.exclude("#pragma: no cover") -cov.exclude("def __repr__") -cov.exclude("if __name__ == .__main__.:") -cov.exclude("raise AssertionError") -cov.html_report(directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"]) +try: + cmd = sys.argv[1] +except IndexError: + cmd = '' + +if cmd == 'run': + # Ugly hack: nose.run reads sys.argv directly, so here I delete my command + # argument so that sys.argv is left as just nose arguments. + del sys.argv[1] + run_tests_with_coverage() +elif cmd == 'report': + report_on_combined_files() +else: + print("Need 'run' or 'report'") -- cgit v1.2.1 From 007a4a1ba529e2913357387c1f42b6028860fe98 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Tue, 1 Dec 2009 22:37:37 -0500 Subject: Clean up coverage_coverage.py --- test/coverage_coverage.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'test/coverage_coverage.py') diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index a1cb13fc..73ff3be3 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -6,6 +6,7 @@ import nose HTML_DIR = "htmlcov" def run_tests_with_coverage(): + """Run the test suite with coverage measuring itself.""" import coverage tracer = os.environ.get('COVERAGE_TEST_TRACER', 'c') @@ -30,8 +31,8 @@ def run_tests_with_coverage(): for name, mod in modules: if name.startswith('coverage'): if hasattr(mod, '__file__') and mod.__file__.startswith(covdir): - covmods[name] = mod - del sys.modules[name] + covmods[name] = mod + del sys.modules[name] import coverage # don't warn about re-import: pylint: disable-msg=W0404 sys.modules.update(covmods) @@ -44,7 +45,7 @@ def run_tests_with_coverage(): cov.save() def report_on_combined_files(): - + """Combine all the .coverage files and make an HTML report.""" if os.path.exists(HTML_DIR): shutil.rmtree(HTML_DIR) @@ -59,7 +60,9 @@ def report_on_combined_files(): cov.exclude("if __name__ == .__main__.:") cov.exclude("raise AssertionError") - cov.html_report(directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"]) + cov.html_report( + directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"] + ) try: -- cgit v1.2.1 From 968fc008e4c0453ef05aa211e85e202e7b1d2342 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Wed, 2 Dec 2009 07:27:14 -0500 Subject: Massive eol whitespace clean-up. --- test/coverage_coverage.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'test/coverage_coverage.py') diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index 73ff3be3..b7f903bf 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -8,7 +8,7 @@ HTML_DIR = "htmlcov" def run_tests_with_coverage(): """Run the test suite with coverage measuring itself.""" import coverage - + tracer = os.environ.get('COVERAGE_TEST_TRACER', 'c') version = "%s%s" % sys.version_info[:2] suffix = ".%s_%s" % (version, tracer) @@ -20,7 +20,7 @@ def run_tests_with_coverage(): cov.cover_prefix = "Please measure coverage.py!" cov.erase() cov.start() - + # Re-import coverage to get it coverage tested! I don't understand all the # mechanics here, but if I don't carry over the imported modules (in # covmods), then things go haywire (os == None, eventually). @@ -39,7 +39,7 @@ def run_tests_with_coverage(): # Run nosetests, with the arguments from our command line. print(":: Running nosetests %s" % " ".join(sys.argv[1:])) nose.run() - + cov.stop() print(":: Saving .coverage%s" % suffix) cov.save() @@ -59,7 +59,7 @@ def report_on_combined_files(): cov.exclude("def __repr__") cov.exclude("if __name__ == .__main__.:") cov.exclude("raise AssertionError") - + cov.html_report( directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"] ) @@ -69,7 +69,7 @@ try: cmd = sys.argv[1] except IndexError: cmd = '' - + if cmd == 'run': # Ugly hack: nose.run reads sys.argv directly, so here I delete my command # argument so that sys.argv is left as just nose arguments. -- cgit v1.2.1