Issue #9936: Fixed executable lines' search in the trace module.
This commit is contained in:
parent
5e83da3d08
commit
ff09ce211f
|
@ -188,7 +188,6 @@ class TestLineCounts(unittest.TestCase):
|
|||
}
|
||||
self.assertEqual(tracer.results().counts, expected)
|
||||
|
||||
|
||||
class TestRunExecCounts(unittest.TestCase):
|
||||
"""A simple sanity test of line-counting, via runctx (exec)"""
|
||||
def setUp(self):
|
||||
|
@ -285,8 +284,9 @@ class TestCoverage(unittest.TestCase):
|
|||
rmtree(TESTFN)
|
||||
unlink(TESTFN)
|
||||
|
||||
def _coverage(self, tracer):
|
||||
tracer.run('from test import test_pprint; test_pprint.test_main()')
|
||||
def _coverage(self, tracer,
|
||||
cmd='from test import test_pprint; test_pprint.test_main()'):
|
||||
tracer.run(cmd)
|
||||
r = tracer.results()
|
||||
r.write_results(show_missing=True, summary=True, coverdir=TESTFN)
|
||||
|
||||
|
@ -313,6 +313,25 @@ class TestCoverage(unittest.TestCase):
|
|||
files = os.listdir(TESTFN)
|
||||
self.assertEquals(files, [])
|
||||
|
||||
def test_issue9936(self):
|
||||
tracer = trace.Trace(trace=0, count=1)
|
||||
modname = 'test.tracedmodules.testmod'
|
||||
# Ensure that the module is executed in import
|
||||
if modname in sys.modules:
|
||||
del sys.modules[modname]
|
||||
cmd = ("import test.tracedmodules.testmod as t;"
|
||||
"t.func(0); t.func2();")
|
||||
with captured_stdout() as stdout:
|
||||
self._coverage(tracer, cmd)
|
||||
stdout.seek(0)
|
||||
stdout.readline()
|
||||
coverage = {}
|
||||
for line in stdout:
|
||||
lines, cov, module = line.split()[:3]
|
||||
coverage[module] = (int(lines), int(cov[:-1]))
|
||||
self.assertIn(modname, coverage)
|
||||
self.assertEqual(coverage[modname], (5, 100))
|
||||
|
||||
|
||||
def test_main():
|
||||
run_unittest(__name__)
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
def func(x):
|
||||
b = x + 1
|
||||
return b + 2
|
||||
|
||||
def func2():
|
||||
"""Test function for issue 9936 """
|
||||
return (1,
|
||||
2,
|
||||
3)
|
||||
|
|
10
Lib/trace.py
10
Lib/trace.py
|
@ -59,7 +59,7 @@ import token
|
|||
import tokenize
|
||||
import inspect
|
||||
import gc
|
||||
|
||||
import dis
|
||||
import pickle
|
||||
|
||||
def usage(outfile):
|
||||
|
@ -376,13 +376,7 @@ def find_lines_from_code(code, strs):
|
|||
"""Return dict where keys are lines in the line number table."""
|
||||
linenos = {}
|
||||
|
||||
line_increments = code.co_lnotab[1::2]
|
||||
table_length = len(line_increments)
|
||||
docstring = False
|
||||
|
||||
lineno = code.co_firstlineno
|
||||
for li in line_increments:
|
||||
lineno += li
|
||||
for _, lineno in dis.findlinestarts(code):
|
||||
if lineno not in strs:
|
||||
linenos[lineno] = 1
|
||||
|
||||
|
|
Loading…
Reference in New Issue