summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2017-01-19 06:30:04 -0500
committerNed Batchelder <ned@nedbatchelder.com>2017-01-19 06:30:04 -0500
commitee0526d8cee7413b857b7260ed1921a530196aa7 (patch)
tree3201d76852fb048e7a1cf8bb9c4d3aef4e98ebdd
parentadb5c8f6247d688ae001801dc300bb0ff8076648 (diff)
downloadpython-coveragepy-git-ee0526d8cee7413b857b7260ed1921a530196aa7.tar.gz
More-precise no-coverage pragmas
-rw-r--r--coverage/misc.py4
-rw-r--r--coverage/parser.py2
-rw-r--r--metacov.ini19
-rw-r--r--tests/osinfo.py6
-rw-r--r--tests/test_arcs.py4
-rw-r--r--tests/test_farm.py8
-rw-r--r--tests/test_oddball.py2
-rw-r--r--tests/test_parser.py2
-rw-r--r--tests/test_process.py12
9 files changed, 38 insertions, 21 deletions
diff --git a/coverage/misc.py b/coverage/misc.py
index 534ef179..cb9248d2 100644
--- a/coverage/misc.py
+++ b/coverage/misc.py
@@ -76,7 +76,7 @@ if env.TESTING:
return func(*args, **kwargs)
return _wrapped
return _decorator
-else: # pragma: not covered
+else: # pragma: not testing
# We aren't using real PyContracts, so just define our decorators as
# stunt-double no-ops.
contract = dummy_decorator_with_args
@@ -152,7 +152,7 @@ def expensive(fn):
return fn(self)
return _wrapped
else:
- return fn # pragma: not covered
+ return fn # pragma: not testing
def bool_or_none(b):
diff --git a/coverage/parser.py b/coverage/parser.py
index c44ba22e..6e9bd54a 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -138,7 +138,7 @@ class PythonParser(object):
tokgen = generate_tokens(self.text)
for toktype, ttext, (slineno, _), (elineno, _), ltext in tokgen:
- if self.show_tokens: # pragma: not covered
+ if self.show_tokens: # pragma: debugging
print("%10s %5s %-20r %r" % (
tokenize.tok_name.get(toktype, toktype),
nice_pair((slineno, elineno)), ttext, ltext
diff --git a/metacov.ini b/metacov.ini
index 23806587..b25af6eb 100644
--- a/metacov.ini
+++ b/metacov.ini
@@ -14,11 +14,28 @@ source =
# We set a different pragma so our code won't be confused with test code.
exclude_lines =
pragma: not covered
+
+ # Lines in test code that isn't covered: we are nested inside ourselves.
pragma: nested
+
+ # Lines that are only executed when we are debugging coverage.py.
def __repr__
- raise AssertionError
pragma: debugging
+
+ # Lines that are only executed when we are not testing coverage.py.
+ pragma: not testing
+
+ # Lines that we can't run during metacov.
+ pragma: no metacov
+
+ # These lines only happen if tests fail.
+ raise AssertionError
pragma: only failure
+
+ # OS error conditions that we can't (or don't care to) replicate.
+ pragma: cant happen
+
+ # Jython needs special care.
pragma: only jython
skip.*Jython
diff --git a/tests/osinfo.py b/tests/osinfo.py
index f586c51c..094fb097 100644
--- a/tests/osinfo.py
+++ b/tests/osinfo.py
@@ -35,7 +35,7 @@ if env.WINDOWS:
ctypes.sizeof(mem_struct)
)
if not ret: # pragma: part covered
- return 0 # pragma: not covered
+ return 0 # pragma: cant happen
return mem_struct.PrivateUsage
elif env.LINUX:
@@ -50,13 +50,13 @@ elif env.LINUX:
# Get pseudo file /proc/<pid>/status
with open('/proc/%d/status' % os.getpid()) as t:
v = t.read()
- except IOError: # pragma: not covered
+ except IOError: # pragma: cant happen
return 0 # non-Linux?
# Get VmKey line e.g. 'VmRSS: 9999 kB\n ...'
i = v.index(key)
v = v[i:].split(None, 3)
if len(v) < 3: # pragma: part covered
- return 0 # pragma: not covered
+ return 0 # pragma: cant happen
# Convert Vm value to bytes.
return int(float(v[1]) * _scale[v[2].lower()])
diff --git a/tests/test_arcs.py b/tests/test_arcs.py
index de59bf21..7df623bf 100644
--- a/tests/test_arcs.py
+++ b/tests/test_arcs.py
@@ -408,7 +408,7 @@ class LoopArcTest(CoverageTest):
def test_other_comprehensions(self):
if env.PYVERSION < (2, 7):
- self.skipTest("No set or dict comprehensions before 2.7") # pragma: not covered
+ self.skipTest("No set or dict comprehensions before 2.7")
# Set comprehension:
self.check_coverage("""\
o = ((1,2), (3,4))
@@ -432,7 +432,7 @@ class LoopArcTest(CoverageTest):
def test_multiline_dict_comp(self):
if env.PYVERSION < (2, 7):
- self.skipTest("No set or dict comprehensions before 2.7") # pragma: not covered
+ self.skipTest("No set or dict comprehensions before 2.7")
if env.PYVERSION < (3, 5):
arcz = "-42 2B B-4 2-4"
else:
diff --git a/tests/test_farm.py b/tests/test_farm.py
index 4a80be47..8e497363 100644
--- a/tests/test_farm.py
+++ b/tests/test_farm.py
@@ -119,7 +119,7 @@ class FarmTestCase(ModuleAwareMixin, SysPathAwareMixin, unittest.TestCase):
glo['clean'] = clean
else:
glo = dict((fn, globals()[fn]) for fn in fns)
- if self.dont_clean: # pragma: not covered
+ if self.dont_clean: # pragma: debugging
glo['clean'] = noop
with change_dir(self.dir):
@@ -328,7 +328,7 @@ def clean(cleandir):
if os.path.exists(cleandir):
try:
shutil.rmtree(cleandir)
- except OSError: # pragma: not covered
+ except OSError: # pragma: cant happen
if tries == 1:
raise
else:
@@ -369,7 +369,7 @@ def scrub(strdata, scrubs):
return strdata
-def main(): # pragma: not covered
+def main(): # pragma: debugging
"""Command-line access to farm tests.
Commands:
@@ -400,5 +400,5 @@ def main(): # pragma: not covered
print(main.__doc__)
# So that we can run just one farm run.py at a time.
-if __name__ == '__main__': # pragma: not covered
+if __name__ == '__main__': # pragma: debugging
main()
diff --git a/tests/test_oddball.py b/tests/test_oddball.py
index fe841bd5..1cdadf6f 100644
--- a/tests/test_oddball.py
+++ b/tests/test_oddball.py
@@ -506,7 +506,7 @@ class GettraceTest(CoverageTest):
)
@pytest.mark.expensive
- def test_atexit_gettrace(self): # pragma: not covered
+ def test_atexit_gettrace(self): # pragma: no metacov
# This is not a test of coverage at all, but of our understanding
# of this edge-case behavior in various Pythons.
if env.METACOV:
diff --git a/tests/test_parser.py b/tests/test_parser.py
index 0053e932..aa96b592 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -243,7 +243,7 @@ class ParserMissingArcDescriptionTest(CoverageTest):
def test_missing_arc_descriptions_for_small_callables(self):
# We use 2.7 features here, so just skip this test on 2.6
if env.PYVERSION < (2, 7):
- self.skipTest("No dict or set comps in 2.6") # pragma: not covered
+ self.skipTest("No dict or set comps in 2.6")
parser = self.parse_text(u"""\
callables = [
diff --git a/tests/test_process.py b/tests/test_process.py
index 4a52a946..666d3cc4 100644
--- a/tests/test_process.py
+++ b/tests/test_process.py
@@ -581,7 +581,7 @@ class ProcessTest(CoverageTest):
self.assertEqual(infos[0]['note'], u"These are musical notes: ♫𝅗𝅥♩")
@pytest.mark.expensive
- def test_fullcoverage(self): # pragma: not covered
+ def test_fullcoverage(self): # pragma: no metacov
if env.PY2: # This doesn't work on Python 2.
self.skipTest("fullcoverage doesn't work on Python 2.")
# It only works with the C tracer, and if we aren't measuring ourselves.
@@ -1193,13 +1193,13 @@ def find_writable_pth_directory():
with open(try_it, "w") as f:
try:
f.write("foo")
- except (IOError, OSError): # pragma: not covered
+ except (IOError, OSError): # pragma: cant happen
continue
os.remove(try_it)
return pth_dir
- return None
+ return None # pragma: cant happen
WORKER = os.environ.get('PYTEST_XDIST_WORKER', '')
PTH_DIR = find_writable_pth_directory()
@@ -1241,7 +1241,7 @@ class ProcessStartupTest(ProcessCoverageMixin, CoverageTest):
f.close()
""")
- def test_subprocess_with_pth_files(self): # pragma: not covered
+ def test_subprocess_with_pth_files(self): # pragma: no metacov
if env.METACOV:
self.skipTest("Can't test sub-process pth file suppport during metacoverage")
@@ -1268,7 +1268,7 @@ class ProcessStartupTest(ProcessCoverageMixin, CoverageTest):
data.read_file(".mycovdata")
self.assertEqual(data.line_counts()['sub.py'], 3)
- def test_subprocess_with_pth_files_and_parallel(self): # pragma: not covered
+ def test_subprocess_with_pth_files_and_parallel(self): # pragma: no metacov
# https://bitbucket.org/ned/coveragepy/issues/492/subprocess-coverage-strange-detection-of
if env.METACOV:
self.skipTest("Can't test sub-process pth file suppport during metacoverage")
@@ -1315,7 +1315,7 @@ class ProcessStartupWithSourceTest(ProcessCoverageMixin, CoverageTest):
def assert_pth_and_source_work_together(
self, dashm, package, source
- ): # pragma: not covered
+ ): # pragma: no metacov
"""Run the test for a particular combination of factors.
The arguments are all strings: