diff options
-rw-r--r-- | allcoverage.cmd | 5 | ||||
-rw-r--r-- | coverage/__init__.py | 2 | ||||
-rw-r--r-- | coverage/collector.py | 2 | ||||
-rw-r--r-- | coverage/control.py | 27 | ||||
-rw-r--r-- | howto.txt | 5 | ||||
-rw-r--r-- | test/coverage_coverage.py | 3 |
6 files changed, 38 insertions, 6 deletions
diff --git a/allcoverage.cmd b/allcoverage.cmd index 990876a6..d80a1cf0 100644 --- a/allcoverage.cmd +++ b/allcoverage.cmd @@ -2,6 +2,8 @@ make --quiet testdata
del .coverage.*
+set COVERAGE_PROCESS_START=c:\ned\coverage\trunk\.coverage
+set COVERAGE_COVERAGE=1
call \ned\bin\switchpy 23
python setup.py -q develop
@@ -33,4 +35,7 @@ set COVERAGE_TEST_TRACER=c python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
del coverage\tracer.pyd
+set COVERAGE_PROCESS_START=
+set COVERAGE_COVERAGE=
+
python test\coverage_coverage.py report
diff --git a/coverage/__init__.py b/coverage/__init__.py index 0d202ac7..100e0b7d 100644 --- a/coverage/__init__.py +++ b/coverage/__init__.py @@ -9,7 +9,7 @@ __version__ = "3.3a1" # see detailed history in CHANGES.txt __url__ = "http://nedbatchelder.com/code/coverage" -from coverage.control import coverage +from coverage.control import coverage, measure_process from coverage.data import CoverageData from coverage.cmdline import main, CoverageScript from coverage.misc import CoverageException diff --git a/coverage/collector.py b/coverage/collector.py index 29dddf6b..1837aae2 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -251,7 +251,7 @@ class Collector(object): line_data = {} for f, arcs in self.data.items(): line_data[f] = ldf = {} - for l1, _ in arcs: + for l1, _ in list(arcs.keys()): if l1: ldf[l1] = None return line_data diff --git a/coverage/control.py b/coverage/control.py index c1d32e9d..4acef710 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -1,6 +1,6 @@ """Core control stuff for Coverage.""" -import atexit, os, socket +import atexit, os, random, socket from coverage.annotate import AnnotateReporter from coverage.backward import string_class @@ -98,8 +98,10 @@ class coverage(object): # Create the data file. if data_suffix: if not isinstance(data_suffix, string_class): - # if data_suffix=True, use .machinename.pid - data_suffix = ".%s.%s" % (socket.gethostname(), os.getpid()) + # if data_suffix=True, use .machinename.pid.random + data_suffix = ".%s.%s.%06d" % ( + socket.gethostname(), os.getpid(), random.randint(0,999999) + ) else: data_suffix = None @@ -369,3 +371,22 @@ class coverage(object): ]), ] return info + + +def measure_process(): + """Called at Python startup time to perhaps measure coverage. + + If the environment variable COVERAGE_PROCESS_START is defined, coverage + measurement is started, and the value of the variable is the data file + prefix to use. + + """ + cps = os.environ.get("COVERAGE_PROCESS_START") + if cps: + cov = coverage( + auto_data=True, data_file=cps, data_suffix=True, branch=True + ) + if os.environ.get("COVERAGE_COVERAGE"): + # Measuring coverage within coverage.py takes yet more trickery. + cov.cover_prefix = "Please measure coverage.py!" + cov.start() @@ -52,3 +52,8 @@ c:\ned\coverage\trunk\test\eggsrc\dist\covtestegg1-0.0.0-py2.5.egg (or equivalent). + +- For complete coverage testing, in each Python installation, create a + "zzz_coverage_process_start.pth" containing:: + + import coverage; coverage.measure_process() diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py index 990ecf17..6af5f377 100644 --- a/test/coverage_coverage.py +++ b/test/coverage_coverage.py @@ -73,7 +73,8 @@ def report_on_combined_files(): cov.exclude("raise AssertionError") cov.html_report( - directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"] + directory=HTML_DIR, ignore_errors=True, + omit_prefixes=["mock", "ez_setup", "distribute"] ) |