annotate Lib/test/test_sys_setprofile.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents 6ece629445b6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
65422
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
1 import gc
63265
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
2 import pprint
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
3 import sys
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
4 import unittest
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
5
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
6 from test import test_support
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
7
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
8 class TestGetProfile(unittest.TestCase):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
9 def setUp(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
10 sys.setprofile(None)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
11
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
12 def tearDown(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
13 sys.setprofile(None)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
14
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
15 def test_empty(self):
65422
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
16 self.assertIsNone(sys.getprofile())
63265
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
17
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
18 def test_setget(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
19 def fn(*args):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
20 pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
21
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
22 sys.setprofile(fn)
65422
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
23 self.assertIs(sys.getprofile(), fn)
63265
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
24
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
25 class HookWatcher:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
26 def __init__(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
27 self.frames = []
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
28 self.events = []
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
29
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
30 def callback(self, frame, event, arg):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
31 if (event == "call"
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
32 or event == "return"
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
33 or event == "exception"):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
34 self.add_event(event, frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
35
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
36 def add_event(self, event, frame=None):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
37 """Add an event to the log."""
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
38 if frame is None:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
39 frame = sys._getframe(1)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
40
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
41 try:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
42 frameno = self.frames.index(frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
43 except ValueError:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
44 frameno = len(self.frames)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
45 self.frames.append(frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
46
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
47 self.events.append((frameno, event, ident(frame)))
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
48
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
49 def get_events(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
50 """Remove calls to add_event()."""
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
51 disallowed = [ident(self.add_event.im_func), ident(ident)]
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
52 self.frames = None
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
53
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
54 return [item for item in self.events if item[2] not in disallowed]
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
55
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
56
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
57 class ProfileSimulator(HookWatcher):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
58 def __init__(self, testcase):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
59 self.testcase = testcase
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
60 self.stack = []
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
61 HookWatcher.__init__(self)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
62
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
63 def callback(self, frame, event, arg):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
64 # Callback registered with sys.setprofile()/sys.settrace()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
65 self.dispatch[event](self, frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
66
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
67 def trace_call(self, frame):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
68 self.add_event('call', frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
69 self.stack.append(frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
70
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
71 def trace_return(self, frame):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
72 self.add_event('return', frame)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
73 self.stack.pop()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
74
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
75 def trace_exception(self, frame):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
76 self.testcase.fail(
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
77 "the profiler should never receive exception events")
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
78
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
79 def trace_pass(self, frame):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
80 pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
81
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
82 dispatch = {
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
83 'call': trace_call,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
84 'exception': trace_exception,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
85 'return': trace_return,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
86 'c_call': trace_pass,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
87 'c_return': trace_pass,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
88 'c_exception': trace_pass,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
89 }
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
90
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
91
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
92 class TestCaseBase(unittest.TestCase):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
93 def check_events(self, callable, expected):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
94 events = capture_events(callable, self.new_watcher())
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
95 if events != expected:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
96 self.fail("Expected events:\n%s\nReceived events:\n%s"
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
97 % (pprint.pformat(expected), pprint.pformat(events)))
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
98
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
99
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
100 class ProfileHookTestCase(TestCaseBase):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
101 def new_watcher(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
102 return HookWatcher()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
103
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
104 def test_simple(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
105 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
106 pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
107 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
108 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
109 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
110 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
111
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
112 def test_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
113 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
114 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
115 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
116 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
117 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
118 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
119
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
120 def test_caught_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
121 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
122 try: 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
123 except: pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
124 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
125 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
126 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
127 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
128
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
129 def test_caught_nested_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
130 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
131 try: 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
132 except: pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
133 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
134 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
135 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
136 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
137
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
138 def test_nested_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
139 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
140 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
141 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
142 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
143 # This isn't what I expected:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
144 # (0, 'exception', protect_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
145 # I expected this again:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
146 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
147 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
148
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
149 def test_exception_in_except_clause(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
150 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
151 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
152 def g(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
153 try:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
154 f(p)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
155 except:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
156 try: f(p)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
157 except: pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
158 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
159 g_ident = ident(g)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
160 self.check_events(g, [(1, 'call', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
161 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
162 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
163 (3, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
164 (3, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
165 (1, 'return', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
166 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
167
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
168 def test_exception_propogation(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
169 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
170 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
171 def g(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
172 try: f(p)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
173 finally: p.add_event("falling through")
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
174 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
175 g_ident = ident(g)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
176 self.check_events(g, [(1, 'call', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
177 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
178 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
179 (1, 'falling through', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
180 (1, 'return', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
181 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
182
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
183 def test_raise_twice(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
184 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
185 try: 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
186 except: 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
187 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
188 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
189 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
190 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
191
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
192 def test_raise_reraise(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
193 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
194 try: 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
195 except: raise
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
196 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
197 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
198 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
199 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
200
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
201 def test_raise(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
202 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
203 raise Exception()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
204 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
205 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
206 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
207 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
208
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
209 def test_distant_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
210 def f():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
211 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
212 def g():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
213 f()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
214 def h():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
215 g()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
216 def i():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
217 h()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
218 def j(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
219 i()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
220 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
221 g_ident = ident(g)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
222 h_ident = ident(h)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
223 i_ident = ident(i)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
224 j_ident = ident(j)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
225 self.check_events(j, [(1, 'call', j_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
226 (2, 'call', i_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
227 (3, 'call', h_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
228 (4, 'call', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
229 (5, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
230 (5, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
231 (4, 'return', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
232 (3, 'return', h_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
233 (2, 'return', i_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
234 (1, 'return', j_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
235 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
236
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
237 def test_generator(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
238 def f():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
239 for i in range(2):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
240 yield i
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
241 def g(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
242 for i in f():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
243 pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
244 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
245 g_ident = ident(g)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
246 self.check_events(g, [(1, 'call', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
247 # call the iterator twice to generate values
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
248 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
249 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
250 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
251 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
252 # once more; returns end-of-iteration with
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
253 # actually raising an exception
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
254 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
255 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
256 (1, 'return', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
257 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
258
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
259 def test_stop_iteration(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
260 def f():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
261 for i in range(2):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
262 yield i
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
263 raise StopIteration
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
264 def g(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
265 for i in f():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
266 pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
267 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
268 g_ident = ident(g)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
269 self.check_events(g, [(1, 'call', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
270 # call the iterator twice to generate values
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
271 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
272 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
273 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
274 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
275 # once more to hit the raise:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
276 (2, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
277 (2, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
278 (1, 'return', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
279 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
280
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
281
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
282 class ProfileSimulatorTestCase(TestCaseBase):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
283 def new_watcher(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
284 return ProfileSimulator(self)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
285
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
286 def test_simple(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
287 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
288 pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
289 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
290 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
291 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
292 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
293
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
294 def test_basic_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
295 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
296 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
297 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
298 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
299 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
300 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
301
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
302 def test_caught_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
303 def f(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
304 try: 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
305 except: pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
306 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
307 self.check_events(f, [(1, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
308 (1, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
309 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
310
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
311 def test_distant_exception(self):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
312 def f():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
313 1./0
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
314 def g():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
315 f()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
316 def h():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
317 g()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
318 def i():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
319 h()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
320 def j(p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
321 i()
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
322 f_ident = ident(f)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
323 g_ident = ident(g)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
324 h_ident = ident(h)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
325 i_ident = ident(i)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
326 j_ident = ident(j)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
327 self.check_events(j, [(1, 'call', j_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
328 (2, 'call', i_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
329 (3, 'call', h_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
330 (4, 'call', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
331 (5, 'call', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
332 (5, 'return', f_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
333 (4, 'return', g_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
334 (3, 'return', h_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
335 (2, 'return', i_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
336 (1, 'return', j_ident),
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
337 ])
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
338
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
339
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
340 def ident(function):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
341 if hasattr(function, "f_code"):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
342 code = function.f_code
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
343 else:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
344 code = function.func_code
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
345 return code.co_firstlineno, code.co_name
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
346
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
347
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
348 def protect(f, p):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
349 try: f(p)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
350 except: pass
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
351
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
352 protect_ident = ident(protect)
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
353
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
354
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
355 def capture_events(callable, p=None):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
356 if p is None:
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
357 p = HookWatcher()
65422
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
358 # Disable the garbage collector. This prevents __del__s from showing up in
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
359 # traces.
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
360 old_gc = gc.isenabled()
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
361 gc.disable()
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
362 try:
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
363 sys.setprofile(p.callback)
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
364 protect(callable, p)
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
365 sys.setprofile(None)
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
366 finally:
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
367 if old_gc:
6ece629445b6 Merged revisions 85589-85591 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 63267
diff changeset
368 gc.enable()
63265
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
369 return p.get_events()[1:-1]
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
370
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
371
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
372 def show_events(callable):
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
373 import pprint
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
374 pprint.pprint(capture_events(callable))
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
375
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
376
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
377 def test_main():
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
378 test_support.run_unittest(
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
379 TestGetProfile,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
380 ProfileHookTestCase,
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
381 ProfileSimulatorTestCase
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
382 )
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
383
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
384
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
385 if __name__ == "__main__":
8e8cb168a089 Reverted r83142: bad svnmerge
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
diff changeset
386 test_main()