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

Fred L. Drake fdrake@users.sourceforge.net
Tue, 25 Sep 2001 13:48:16 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv12588

Modified Files:
	test_profilehooks.py 
Log Message:
Factor out the protect-from-exceptions helpers and make capture_events()
use it.  This simplifies the individual tests a little.

Added some new tests related to exception handling.


Index: test_profilehooks.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_profilehooks.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** test_profilehooks.py	2001/09/24 18:44:11	1.2
--- test_profilehooks.py	2001/09/25 20:48:14	1.3
***************
*** 47,62 ****
              pass
          f_ident = ident(f)
!         self.check_events(f, [(0, 'call', f_ident),
!                               (0, 'return', f_ident),
                                ])
  
      def test_exception(self):
          def f(p):
              try: 1/0
              except: pass
          f_ident = ident(f)
!         self.check_events(f, [(0, 'call', f_ident),
!                               (0, 'exception', f_ident),
!                               (0, 'return', f_ident),
                                ])
  
--- 47,71 ----
              pass
          f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
!                               (1, 'return', f_ident),
                                ])
  
      def test_exception(self):
          def f(p):
+             1/0
+         f_ident = ident(f)
+         self.check_events(f, [(1, 'call', f_ident),
+                               (1, 'exception', f_ident),
+                               (0, 'exception', protect_ident),
+                               ])
+ 
+     def test_caught_exception(self):
+         def f(p):
              try: 1/0
              except: pass
          f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
!                               (1, 'exception', f_ident),
!                               (1, 'return', f_ident),
                                ])
  
***************
*** 65,77 ****
              try: 1/0
              except: pass
-         def g(p):
-             f(p)
          f_ident = ident(f)
!         g_ident = ident(g)
!         self.check_events(g, [(0, 'call', g_ident),
!                               (1, 'call', f_ident),
                                (1, 'exception', f_ident),
                                (1, 'return', f_ident),
-                               (0, 'return', g_ident),
                                ])
  
--- 74,81 ----
              try: 1/0
              except: pass
          f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
                                (1, 'exception', f_ident),
                                (1, 'return', f_ident),
                                ])
  
***************
*** 79,95 ****
          def f(p):
              1/0
-         def g(p):
-             try: f(p)
-             except: pass
          f_ident = ident(f)
!         g_ident = ident(g)
!         self.check_events(g, [(0, 'call', g_ident),
!                               (1, 'call', f_ident),
                                (1, 'exception', f_ident),
                                # This isn't what I expected:
!                               (0, 'exception', g_ident),
                                # I expected this again:
                                # (1, 'exception', f_ident),
-                               (0, 'return', g_ident),
                                ])
  
--- 83,93 ----
          def f(p):
              1/0
          f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
                                (1, 'exception', f_ident),
                                # This isn't what I expected:
!                               (0, 'exception', protect_ident),
                                # I expected this again:
                                # (1, 'exception', f_ident),
                                ])
  
***************
*** 105,116 ****
          f_ident = ident(f)
          g_ident = ident(g)
!         self.check_events(g, [(0, 'call', g_ident),
!                               (1, 'call', f_ident),
!                               (1, 'exception', f_ident),
!                               (0, 'exception', g_ident),
                                (2, 'call', f_ident),
                                (2, 'exception', f_ident),
!                               (0, 'exception', g_ident),
!                               (0, 'return', g_ident),
                                ])
  
--- 103,114 ----
          f_ident = ident(f)
          g_ident = ident(g)
!         self.check_events(g, [(1, 'call', g_ident),
                                (2, 'call', f_ident),
                                (2, 'exception', f_ident),
!                               (1, 'exception', g_ident),
!                               (3, 'call', f_ident),
!                               (3, 'exception', f_ident),
!                               (1, 'exception', g_ident),
!                               (1, 'return', g_ident),
                                ])
  
***************
*** 121,140 ****
              try: f(p)
              finally: p.add_event("falling through")
-         def h(p):
-             try: g(p)
-             except: pass
          f_ident = ident(f)
          g_ident = ident(g)
!         h_ident = ident(h)
!         self.check_events(h, [(0, 'call', h_ident),
!                               (1, 'call', g_ident),
                                (2, 'call', f_ident),
                                (2, 'exception', f_ident),
                                (1, 'exception', g_ident),
                                (1, 'falling through', g_ident),
!                               (0, 'exception', h_ident),
!                               (0, 'return', h_ident),
                                ])
  
  def ident(function):
      if hasattr(function, "f_code"):
--- 119,163 ----
              try: f(p)
              finally: p.add_event("falling through")
          f_ident = ident(f)
          g_ident = ident(g)
!         self.check_events(g, [(1, 'call', g_ident),
                                (2, 'call', f_ident),
                                (2, 'exception', f_ident),
                                (1, 'exception', g_ident),
                                (1, 'falling through', g_ident),
!                               (0, 'exception', protect_ident),
!                               ])
! 
!     def test_raise_twice(self):
!         def f(p):
!             try: 1/0
!             except: 1/0
!         f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
!                               (1, 'exception', f_ident),
!                               (1, 'exception', f_ident),
!                               (0, 'exception', protect_ident)
!                               ])
! 
!     def test_raise_reraise(self):
!         def f(p):
!             try: 1/0
!             except: raise
!         f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
!                               (1, 'exception', f_ident),
!                               (0, 'exception', protect_ident)
!                               ])
! 
!     def test_raise(self):
!         def f(p):
!             raise Exception()
!         f_ident = ident(f)
!         self.check_events(f, [(1, 'call', f_ident),
!                               (1, 'exception', f_ident),
!                               (0, 'exception', protect_ident)
                                ])
  
+ 
  def ident(function):
      if hasattr(function, "f_code"):
***************
*** 145,154 ****
  
  
  def capture_events(callable):
      p = HookWatcher()
      sys.setprofile(p.callback)
!     callable(p)
      sys.setprofile(None)
!     return p.get_events()
  
  
--- 168,184 ----
  
  
+ def protect(f, p):
+     try: f(p)
+     except: pass
+ 
+ protect_ident = ident(protect)
+ 
+ 
  def capture_events(callable):
      p = HookWatcher()
      sys.setprofile(p.callback)
!     protect(callable, p)
      sys.setprofile(None)
!     return p.get_events()[1:-1]