Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_trace.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 662f97427acf |
| children |
| rev | line source |
|---|---|
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
1 import os |
|
82209
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
2 import io |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
3 import sys |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
4 from test.support import (run_unittest, TESTFN, rmtree, unlink, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
5 captured_stdout) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
6 import unittest |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
7 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
8 import trace |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
9 from trace import CoverageResults, Trace |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
10 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
11 from test.tracedmodules import testmod |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
12 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
13 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
14 #------------------------------- Utilities -----------------------------------# |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
15 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
16 def fix_ext_py(filename): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
17 """Given a .pyc/.pyo filename converts it to the appropriate .py""" |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
18 if filename.endswith(('.pyc', '.pyo')): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
19 filename = filename[:-1] |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
20 return filename |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
21 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
22 def my_file_and_modname(): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
23 """The .py file and module name of this file (__file__)""" |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
24 modname = os.path.splitext(os.path.basename(__file__))[0] |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
25 return fix_ext_py(__file__), modname |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
26 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
27 def get_firstlineno(func): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
28 return func.__code__.co_firstlineno |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
29 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
30 #-------------------- Target functions for tracing ---------------------------# |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
31 # |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
32 # The relative line numbers of lines in these functions matter for verifying |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
33 # tracing. Please modify the appropriate tests if you change one of the |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
34 # functions. Absolute line numbers don't matter. |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
35 # |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
36 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
37 def traced_func_linear(x, y): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
38 a = x |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
39 b = y |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
40 c = a + b |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
41 return c |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
42 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
43 def traced_func_loop(x, y): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
44 c = x |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
45 for i in range(5): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
46 c += y |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
47 return c |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
48 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
49 def traced_func_importing(x, y): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
50 return x + y + testmod.func(1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
51 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
52 def traced_func_simple_caller(x): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
53 c = traced_func_linear(x, x) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
54 return c + x |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
55 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
56 def traced_func_importing_caller(x): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
57 k = traced_func_simple_caller(x) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
58 k += traced_func_importing(k, x) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
59 return k |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
60 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
61 def traced_func_generator(num): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
62 c = 5 # executed once |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
63 for i in range(num): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
64 yield i + c |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
65 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
66 def traced_func_calling_generator(): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
67 k = 0 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
68 for i in traced_func_generator(10): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
69 k += i |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
70 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
71 def traced_doubler(num): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
72 return num * 2 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
73 |
|
64714
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
74 def traced_caller_list_comprehension(): |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
75 k = 10 |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
76 mylist = [traced_doubler(i) for i in range(k)] |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
77 return mylist |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
78 |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
79 |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
80 class TracedClass(object): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
81 def __init__(self, x): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
82 self.a = x |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
83 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
84 def inst_method_linear(self, y): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
85 return self.a + y |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
86 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
87 def inst_method_calling(self, x): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
88 c = self.inst_method_linear(x) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
89 return c + traced_func_linear(x, c) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
90 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
91 @classmethod |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
92 def class_method_linear(cls, y): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
93 return y * 2 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
94 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
95 @staticmethod |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
96 def static_method_linear(y): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
97 return y * 2 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
98 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
99 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
100 #------------------------------ Test cases -----------------------------------# |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
101 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
102 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
103 class TestLineCounts(unittest.TestCase): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
104 """White-box testing of line-counting, via runfunc""" |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
105 def setUp(self): |
|
68080
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
106 self.addCleanup(sys.settrace, sys.gettrace()) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
107 self.tracer = Trace(count=1, trace=0, countfuncs=0, countcallers=0) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
108 self.my_py_filename = fix_ext_py(__file__) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
109 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
110 def test_traced_func_linear(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
111 result = self.tracer.runfunc(traced_func_linear, 2, 5) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
112 self.assertEqual(result, 7) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
113 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
114 # all lines are executed once |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
115 expected = {} |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
116 firstlineno = get_firstlineno(traced_func_linear) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
117 for i in range(1, 5): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
118 expected[(self.my_py_filename, firstlineno + i)] = 1 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
119 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
120 self.assertEqual(self.tracer.results().counts, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
121 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
122 def test_traced_func_loop(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
123 self.tracer.runfunc(traced_func_loop, 2, 3) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
124 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
125 firstlineno = get_firstlineno(traced_func_loop) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
126 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
127 (self.my_py_filename, firstlineno + 1): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
128 (self.my_py_filename, firstlineno + 2): 6, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
129 (self.my_py_filename, firstlineno + 3): 5, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
130 (self.my_py_filename, firstlineno + 4): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
131 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
132 self.assertEqual(self.tracer.results().counts, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
133 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
134 def test_traced_func_importing(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
135 self.tracer.runfunc(traced_func_importing, 2, 5) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
136 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
137 firstlineno = get_firstlineno(traced_func_importing) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
138 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
139 (self.my_py_filename, firstlineno + 1): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
140 (fix_ext_py(testmod.__file__), 2): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
141 (fix_ext_py(testmod.__file__), 3): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
142 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
143 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
144 self.assertEqual(self.tracer.results().counts, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
145 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
146 def test_trace_func_generator(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
147 self.tracer.runfunc(traced_func_calling_generator) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
148 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
149 firstlineno_calling = get_firstlineno(traced_func_calling_generator) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
150 firstlineno_gen = get_firstlineno(traced_func_generator) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
151 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
152 (self.my_py_filename, firstlineno_calling + 1): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
153 (self.my_py_filename, firstlineno_calling + 2): 11, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
154 (self.my_py_filename, firstlineno_calling + 3): 10, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
155 (self.my_py_filename, firstlineno_gen + 1): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
156 (self.my_py_filename, firstlineno_gen + 2): 11, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
157 (self.my_py_filename, firstlineno_gen + 3): 10, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
158 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
159 self.assertEqual(self.tracer.results().counts, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
160 |
|
64714
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
161 def test_trace_list_comprehension(self): |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
162 self.tracer.runfunc(traced_caller_list_comprehension) |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
163 |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
164 firstlineno_calling = get_firstlineno(traced_caller_list_comprehension) |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
165 firstlineno_called = get_firstlineno(traced_doubler) |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
166 expected = { |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
167 (self.my_py_filename, firstlineno_calling + 1): 1, |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
168 # List compehentions work differently in 3.x, so the count |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
169 # below changed compared to 2.x. |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
170 (self.my_py_filename, firstlineno_calling + 2): 12, |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
171 (self.my_py_filename, firstlineno_calling + 3): 1, |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
172 (self.my_py_filename, firstlineno_called + 1): 10, |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
173 } |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
174 self.assertEqual(self.tracer.results().counts, expected) |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
175 |
|
ea121f8731a7
Issue #9315: Fix for the trace module to record correct class name
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
63543
diff
changeset
|
176 |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
177 def test_linear_methods(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
178 # XXX todo: later add 'static_method_linear' and 'class_method_linear' |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
179 # here, once issue1764286 is resolved |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
180 # |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
181 for methname in ['inst_method_linear',]: |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
182 tracer = Trace(count=1, trace=0, countfuncs=0, countcallers=0) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
183 traced_obj = TracedClass(25) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
184 method = getattr(traced_obj, methname) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
185 tracer.runfunc(method, 20) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
186 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
187 firstlineno = get_firstlineno(method) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
188 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
189 (self.my_py_filename, firstlineno + 1): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
190 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
191 self.assertEqual(tracer.results().counts, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
192 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
193 class TestRunExecCounts(unittest.TestCase): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
194 """A simple sanity test of line-counting, via runctx (exec)""" |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
195 def setUp(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
196 self.my_py_filename = fix_ext_py(__file__) |
|
68080
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
197 self.addCleanup(sys.settrace, sys.gettrace()) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
198 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
199 def test_exec_counts(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
200 self.tracer = Trace(count=1, trace=0, countfuncs=0, countcallers=0) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
201 code = r'''traced_func_loop(2, 5)''' |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
202 code = compile(code, __file__, 'exec') |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
203 self.tracer.runctx(code, globals(), vars()) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
204 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
205 firstlineno = get_firstlineno(traced_func_loop) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
206 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
207 (self.my_py_filename, firstlineno + 1): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
208 (self.my_py_filename, firstlineno + 2): 6, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
209 (self.my_py_filename, firstlineno + 3): 5, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
210 (self.my_py_filename, firstlineno + 4): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
211 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
212 |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
66340
diff
changeset
|
213 # When used through 'run', some other spurious counts are produced, like |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
214 # the settrace of threading, which we ignore, just making sure that the |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
215 # counts fo traced_func_loop were right. |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
216 # |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
217 for k in expected.keys(): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
218 self.assertEqual(self.tracer.results().counts[k], expected[k]) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
219 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
220 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
221 class TestFuncs(unittest.TestCase): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
222 """White-box testing of funcs tracing""" |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
223 def setUp(self): |
|
68080
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
224 self.addCleanup(sys.settrace, sys.gettrace()) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
225 self.tracer = Trace(count=0, trace=0, countfuncs=1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
226 self.filemod = my_file_and_modname() |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
227 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
228 def test_simple_caller(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
229 self.tracer.runfunc(traced_func_simple_caller, 1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
230 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
231 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
232 self.filemod + ('traced_func_simple_caller',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
233 self.filemod + ('traced_func_linear',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
234 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
235 self.assertEqual(self.tracer.results().calledfuncs, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
236 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
237 def test_loop_caller_importing(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
238 self.tracer.runfunc(traced_func_importing_caller, 1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
239 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
240 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
241 self.filemod + ('traced_func_simple_caller',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
242 self.filemod + ('traced_func_linear',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
243 self.filemod + ('traced_func_importing_caller',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
244 self.filemod + ('traced_func_importing',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
245 (fix_ext_py(testmod.__file__), 'testmod', 'func'): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
246 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
247 self.assertEqual(self.tracer.results().calledfuncs, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
248 |
|
68094
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
249 @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(), |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
250 'pre-existing trace function throws off measurements') |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
251 def test_inst_method_calling(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
252 obj = TracedClass(20) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
253 self.tracer.runfunc(obj.inst_method_calling, 1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
254 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
255 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
256 self.filemod + ('TracedClass.inst_method_calling',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
257 self.filemod + ('TracedClass.inst_method_linear',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
258 self.filemod + ('traced_func_linear',): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
259 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
260 self.assertEqual(self.tracer.results().calledfuncs, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
261 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
262 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
263 class TestCallers(unittest.TestCase): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
264 """White-box testing of callers tracing""" |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
265 def setUp(self): |
|
68080
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
266 self.addCleanup(sys.settrace, sys.gettrace()) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
267 self.tracer = Trace(count=0, trace=0, countcallers=1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
268 self.filemod = my_file_and_modname() |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
269 |
|
68094
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
270 @unittest.skipIf(hasattr(sys, 'gettrace') and sys.gettrace(), |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
271 'pre-existing trace function throws off measurements') |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
272 def test_loop_caller_importing(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
273 self.tracer.runfunc(traced_func_importing_caller, 1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
274 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
275 expected = { |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
276 ((os.path.splitext(trace.__file__)[0] + '.py', 'trace', 'Trace.runfunc'), |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
277 (self.filemod + ('traced_func_importing_caller',))): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
278 ((self.filemod + ('traced_func_simple_caller',)), |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
279 (self.filemod + ('traced_func_linear',))): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
280 ((self.filemod + ('traced_func_importing_caller',)), |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
281 (self.filemod + ('traced_func_simple_caller',))): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
282 ((self.filemod + ('traced_func_importing_caller',)), |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
283 (self.filemod + ('traced_func_importing',))): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
284 ((self.filemod + ('traced_func_importing',)), |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
285 (fix_ext_py(testmod.__file__), 'testmod', 'func')): 1, |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
286 } |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
287 self.assertEqual(self.tracer.results().callers, expected) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
288 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
289 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
290 # Created separately for issue #3821 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
291 class TestCoverage(unittest.TestCase): |
|
68080
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
292 def setUp(self): |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
293 self.addCleanup(sys.settrace, sys.gettrace()) |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
66501
diff
changeset
|
294 |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
295 def tearDown(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
296 rmtree(TESTFN) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
297 unlink(TESTFN) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
298 |
|
64925
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
299 def _coverage(self, tracer, |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
300 cmd='from test import test_pprint; test_pprint.test_main()'): |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
301 tracer.run(cmd) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
302 r = tracer.results() |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
303 r.write_results(show_missing=True, summary=True, coverdir=TESTFN) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
304 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
305 def test_coverage(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
306 tracer = trace.Trace(trace=0, count=1) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
307 with captured_stdout() as stdout: |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
308 self._coverage(tracer) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
309 stdout = stdout.getvalue() |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
310 self.assertTrue("pprint.py" in stdout) |
|
63543
eb790495c6a4
#3821: beginnings of a trace.py unittest.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
311 self.assertTrue("case.py" in stdout) # from unittest |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
312 files = os.listdir(TESTFN) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
313 self.assertTrue("pprint.cover" in files) |
|
63543
eb790495c6a4
#3821: beginnings of a trace.py unittest.
Georg Brandl <georg@python.org>
parents:
diff
changeset
|
314 self.assertTrue("unittest.case.cover" in files) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
315 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
316 def test_coverage_ignore(self): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
317 # Ignore all files, nothing should be traced nor printed |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
318 libpath = os.path.normpath(os.path.dirname(os.__file__)) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
319 # sys.prefix does not work when running from a checkout |
|
77154
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
76303
diff
changeset
|
320 tracer = trace.Trace(ignoredirs=[sys.base_prefix, sys.base_exec_prefix, |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
76303
diff
changeset
|
321 libpath], trace=0, count=1) |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
322 with captured_stdout() as stdout: |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
323 self._coverage(tracer) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
324 if os.path.exists(TESTFN): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
325 files = os.listdir(TESTFN) |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
68587
diff
changeset
|
326 self.assertEqual(files, ['_importlib.cover']) # Ignore __import__ |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
327 |
|
64925
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
328 def test_issue9936(self): |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
329 tracer = trace.Trace(trace=0, count=1) |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
330 modname = 'test.tracedmodules.testmod' |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
331 # Ensure that the module is executed in import |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
332 if modname in sys.modules: |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
333 del sys.modules[modname] |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
334 cmd = ("import test.tracedmodules.testmod as t;" |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
335 "t.func(0); t.func2();") |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
336 with captured_stdout() as stdout: |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
337 self._coverage(tracer, cmd) |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
338 stdout.seek(0) |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
339 stdout.readline() |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
340 coverage = {} |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
341 for line in stdout: |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
342 lines, cov, module = line.split()[:3] |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
343 coverage[module] = (int(lines), int(cov[:-1])) |
|
64931
b278d93f958e
Merged revisions 85000 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64925
diff
changeset
|
344 # XXX This is needed to run regrtest.py as a script |
|
66501
96ca99dfefd8
Fixed deprecation warnings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66310
diff
changeset
|
345 modname = trace._fullmodname(sys.modules[modname].__file__) |
|
64925
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
346 self.assertIn(modname, coverage) |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
347 self.assertEqual(coverage[modname], (5, 100)) |
|
235044b39a92
Merged revisions 84994 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64780
diff
changeset
|
348 |
|
66088
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
349 ### Tests that don't mess with sys.settrace and can be traced |
|
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
350 ### themselves TODO: Skip tests that do mess with sys.settrace when |
|
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
351 ### regrtest is invoked with -T option. |
|
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
352 class Test_Ignore(unittest.TestCase): |
|
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
353 def test_ignored(self): |
|
66093
6a2b9117d477
Fixed unit test failure on Windows
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66088
diff
changeset
|
354 jn = os.path.join |
|
66501
96ca99dfefd8
Fixed deprecation warnings.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66310
diff
changeset
|
355 ignore = trace._Ignore(['x', 'y.z'], [jn('foo', 'bar')]) |
|
66088
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
356 self.assertTrue(ignore.names('x.py', 'x')) |
|
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
357 self.assertFalse(ignore.names('xy.py', 'xy')) |
|
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
358 self.assertFalse(ignore.names('y.py', 'y')) |
|
66093
6a2b9117d477
Fixed unit test failure on Windows
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66088
diff
changeset
|
359 self.assertTrue(ignore.names(jn('foo', 'bar', 'baz.py'), 'baz')) |
|
6a2b9117d477
Fixed unit test failure on Windows
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66088
diff
changeset
|
360 self.assertFalse(ignore.names(jn('bar', 'z.py'), 'z')) |
|
66088
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
361 # Matched before. |
|
66093
6a2b9117d477
Fixed unit test failure on Windows
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66088
diff
changeset
|
362 self.assertTrue(ignore.names(jn('bar', 'baz.py'), 'baz')) |
|
66088
8ab1de0813b3
Streamlined code in trace.Ignore and added unit tests.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
64930
diff
changeset
|
363 |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
364 |
|
82209
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
365 class TestDeprecatedMethods(unittest.TestCase): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
366 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
367 def test_deprecated_usage(self): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
368 sio = io.StringIO() |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
369 with self.assertWarns(DeprecationWarning): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
370 trace.usage(sio) |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
371 self.assertIn('Usage:', sio.getvalue()) |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
372 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
373 def test_deprecated_Ignore(self): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
374 with self.assertWarns(DeprecationWarning): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
375 trace.Ignore() |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
376 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
377 def test_deprecated_modname(self): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
378 with self.assertWarns(DeprecationWarning): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
379 self.assertEqual("spam", trace.modname("spam")) |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
380 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
381 def test_deprecated_fullmodname(self): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
382 with self.assertWarns(DeprecationWarning): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
383 self.assertEqual("spam", trace.fullmodname("spam")) |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
384 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
385 def test_deprecated_find_lines_from_code(self): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
386 with self.assertWarns(DeprecationWarning): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
387 def foo(): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
388 pass |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
389 trace.find_lines_from_code(foo.__code__, ["eggs"]) |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
390 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
391 def test_deprecated_find_lines(self): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
392 with self.assertWarns(DeprecationWarning): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
393 def foo(): |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
394 pass |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
395 trace.find_lines(foo.__code__, ["eggs"]) |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
396 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
397 def test_deprecated_find_strings(self): |
|
82269
662f97427acf
#17143: fix buildbot failures on Windows.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
82209
diff
changeset
|
398 with open(TESTFN, 'w') as fd: |
|
662f97427acf
#17143: fix buildbot failures on Windows.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
82209
diff
changeset
|
399 self.addCleanup(unlink, TESTFN) |
|
82209
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
400 with self.assertWarns(DeprecationWarning): |
|
82269
662f97427acf
#17143: fix buildbot failures on Windows.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
82209
diff
changeset
|
401 trace.find_strings(fd.name) |
|
82209
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
402 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
403 def test_deprecated_find_executable_linenos(self): |
|
82269
662f97427acf
#17143: fix buildbot failures on Windows.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
82209
diff
changeset
|
404 with open(TESTFN, 'w') as fd: |
|
662f97427acf
#17143: fix buildbot failures on Windows.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
82209
diff
changeset
|
405 self.addCleanup(unlink, TESTFN) |
|
82209
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
406 with self.assertWarns(DeprecationWarning): |
|
82269
662f97427acf
#17143: fix buildbot failures on Windows.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
82209
diff
changeset
|
407 trace.find_executable_linenos(fd.name) |
|
82209
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
408 |
|
3f8b5fcbf07e
#17143: fix a missing import in the trace module. Initial patch by Berker Peksag.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77154
diff
changeset
|
409 |
|
64717
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
410 def test_main(): |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
411 run_unittest(__name__) |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
412 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
413 |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
414 if __name__ == '__main__': |
|
7dbfc7ef39f2
Merged revisions 84780-84781 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff
changeset
|
415 test_main() |
