diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-09-24 18:14:18 (GMT) |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-09-24 18:14:18 (GMT) |
commit | 517185edcb252bd85c83d96480bf79b85258e1f2 (patch) | |
tree | 88dd6969532abb42f232e15d7ee4ccef46c51b5e | |
parent | 2c7d6859a42634921b2bb2447dfa890633db4d05 (diff) | |
download | cpython-517185edcb252bd85c83d96480bf79b85258e1f2.zip cpython-517185edcb252bd85c83d96480bf79b85258e1f2.tar.gz cpython-517185edcb252bd85c83d96480bf79b85258e1f2.tar.bz2 |
Merged revisions 84994 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r84994 | alexander.belopolsky | 2010-09-24 14:03:12 -0400 (Fri, 24 Sep 2010) | 1 line
Issue #9936: Fixed executable lines' search in the trace module.
........
-rw-r--r-- | Lib/test/test_trace.py | 25 | ||||
-rw-r--r-- | Lib/test/tracedmodules/testmod.py | 6 | ||||
-rw-r--r-- | Lib/trace.py | 10 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
4 files changed, 32 insertions, 11 deletions
diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py index f699d99..472480f 100644 --- a/Lib/test/test_trace.py +++ b/Lib/test/test_trace.py @@ -186,7 +186,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): @@ -283,8 +282,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) @@ -311,6 +311,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__) diff --git a/Lib/test/tracedmodules/testmod.py b/Lib/test/tracedmodules/testmod.py index a4c25e4..642776e 100644 --- a/Lib/test/tracedmodules/testmod.py +++ b/Lib/test/tracedmodules/testmod.py @@ -1,3 +1,9 @@ def func(x): b = x + 1 return b + 2 + +def func2(): + """Test function for issue 9936 """ + return (1, + 2, + 3) diff --git a/Lib/trace.py b/Lib/trace.py index 7ec0cf6..12e1b49 100644 --- a/Lib/trace.py +++ b/Lib/trace.py @@ -58,7 +58,7 @@ import token import tokenize import inspect import gc - +import dis try: import cPickle pickle = cPickle @@ -379,13 +379,7 @@ def find_lines_from_code(code, strs): """Return dict where keys are lines in the line number table.""" linenos = {} - line_increments = [ord(c) for c in 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 @@ -43,6 +43,8 @@ Core and Builtins Library ------- +- Issue #9936: Fixed executable lines' search in the trace module. + - Issue #9928: Properly initialize the types exported by the bz2 module. - Issue #9854: The default read() implementation in io.RawIOBase now |