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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()