[Python-checkins] CVS: python/dist/src/Lib/test test_profilehooks.py,1.3,1.4

Fred L. Drake fdrake@users.sourceforge.net
2001年9月26日 14:00:35 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv32382
Modified Files:
	test_profilehooks.py 
Log Message:
More test cases, including something that simulates what the profiler
probably *should* be doing.
Index: test_profilehooks.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_profilehooks.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** test_profilehooks.py	2001年09月25日 20:48:14	1.3
--- test_profilehooks.py	2001年09月26日 21:00:33	1.4
***************
*** 35,46 ****
 
 
! class ProfileHookTestCase(unittest.TestCase):
 
 def check_events(self, callable, expected):
! events = capture_events(callable)
 if events != expected:
 self.fail("Expected events:\n%s\nReceived events:\n%s"
 % (pprint.pformat(expected), pprint.pformat(events)))
 
 def test_simple(self):
 def f(p):
--- 35,80 ----
 
 
! class ProfileSimulator(HookWatcher):
! def __init__(self):
! self.stack = []
! HookWatcher.__init__(self)
! 
! def callback(self, frame, event, arg):
! self.dispatch[event](self, frame)
! 
! def trace_call(self, frame):
! self.add_event('call', frame)
! self.stack.append(frame)
! 
! def trace_return(self, frame):
! self.add_event('return', frame)
! self.stack.pop()
! 
! def trace_exception(self, frame):
! if len(self.stack) >= 2 and frame is self.stack[-2]:
! self.add_event('propogate-from', self.stack[-1])
! self.stack.pop()
! else:
! self.add_event('ignore', frame)
! 
! dispatch = {
! 'call': trace_call,
! 'exception': trace_exception,
! 'return': trace_return,
! }
! 
 
+ class TestCaseBase(unittest.TestCase):
 def check_events(self, callable, expected):
! events = capture_events(callable, self.new_watcher())
 if events != expected:
 self.fail("Expected events:\n%s\nReceived events:\n%s"
 % (pprint.pformat(expected), pprint.pformat(events)))
 
+ 
+ class ProfileHookTestCase(TestCaseBase):
+ def new_watcher(self):
+ return HookWatcher()
+ 
 def test_simple(self):
 def f(p):
***************
*** 160,163 ****
--- 194,219 ----
 
 
+ class ProfileSimulatorTestCase(TestCaseBase):
+ def new_watcher(self):
+ return ProfileSimulator()
+ 
+ def test_simple(self):
+ def f(p):
+ pass
+ f_ident = ident(f)
+ self.check_events(f, [(1, 'call', f_ident),
+ (1, 'return', f_ident),
+ ])
+ 
+ def test_basic_exception(self):
+ def f(p):
+ 1/0
+ f_ident = ident(f)
+ self.check_events(f, [(1, 'call', f_ident),
+ (1, 'ignore', f_ident),
+ (1, 'propogate-from', f_ident),
+ ])
+ 
+ 
 def ident(function):
 if hasattr(function, "f_code"):
***************
*** 175,180 ****
 
 
! def capture_events(callable):
! p = HookWatcher()
 sys.setprofile(p.callback)
 protect(callable, p)
--- 231,237 ----
 
 
! def capture_events(callable, p=None):
! if p is None:
! p = HookWatcher()
 sys.setprofile(p.callback)
 protect(callable, p)
***************
*** 189,193 ****
 
 def test_main():
! test_support.run_unittest(ProfileHookTestCase)
 
 
--- 246,254 ----
 
 def test_main():
! loader = unittest.TestLoader()
! suite = unittest.TestSuite()
! suite.addTest(loader.loadTestsFromTestCase(ProfileHookTestCase))
! suite.addTest(loader.loadTestsFromTestCase(ProfileSimulatorTestCase))
! test_support.run_suite(suite)
 
 

AltStyle によって変換されたページ (->オリジナル) /