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

mwh@users.sourceforge.net mwh@users.sourceforge.net
Tue, 29 Apr 2003 10:07:38 -0700


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

Modified Files:
	test_dis.py 
Log Message:
Use Tim's suggestion to fix

[ 708901 ] Lineno calculation sometimes broken

A one line patch to compile.c and a rather-more-than-one-line patch
to test_dis.  Hey ho.

Possibly a backport candidate -- tho' lnotab is less used in 2.2...


Index: test_dis.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_dis.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** test_dis.py	7 Mar 2003 15:55:36 -0000	1.2
--- test_dis.py	29 Apr 2003 17:07:36 -0000	1.3
***************
*** 15,29 ****
  
  dis_f = """\
!  13           0 LOAD_FAST                0 (a)
                3 PRINT_ITEM
                4 PRINT_NEWLINE
  
!  14           5 LOAD_CONST               1 (1)
                8 RETURN_VALUE
                9 LOAD_CONST               0 (None)
               12 RETURN_VALUE
! """
  
  class DisTests(unittest.TestCase):
      def test_opmap(self):
          self.assertEqual(dis.opmap["STOP_CODE"], 0)
--- 15,73 ----
  
  dis_f = """\
!  %-4d         0 LOAD_FAST                0 (a)
                3 PRINT_ITEM
                4 PRINT_NEWLINE
  
!  %-4d         5 LOAD_CONST               1 (1)
                8 RETURN_VALUE
                9 LOAD_CONST               0 (None)
               12 RETURN_VALUE
! """%(_f.func_code.co_firstlineno + 1,
!      _f.func_code.co_firstlineno + 2)
! 
! 
! def bug708901():
!     for res in range(1,
!                      10):
!         pass
! 
! dis_bug708901 = """\
!  %-4d         0 SETUP_LOOP              23 (to 26)
!               3 LOAD_GLOBAL              0 (range)
!               6 LOAD_CONST               1 (1)
! 
!  %-4d         9 LOAD_CONST               2 (10)
!              12 CALL_FUNCTION            2
!              15 GET_ITER
!         >>   16 FOR_ITER                 6 (to 25)
!              19 STORE_FAST               0 (res)
! 
!  %-4d        22 JUMP_ABSOLUTE           16
!         >>   25 POP_BLOCK
!         >>   26 LOAD_CONST               0 (None)
!              29 RETURN_VALUE
! """%(bug708901.func_code.co_firstlineno + 1,
!      bug708901.func_code.co_firstlineno + 2,
!      bug708901.func_code.co_firstlineno + 3)
  
  class DisTests(unittest.TestCase):
+     def do_disassembly_test(self, func, expected):
+         s = StringIO.StringIO()
+         save_stdout = sys.stdout
+         sys.stdout = s
+         dis.dis(func)
+         sys.stdout = save_stdout
+         got = s.getvalue()
+         # Trim trailing blanks (if any).
+         lines = got.split('\n')
+         lines = [line.rstrip() for line in lines]
+         expected = expected.split("\n")
+         import difflib
+         if expected != lines:
+             self.fail(
+                 "events did not match expectation:\n" +
+                 "\n".join(difflib.ndiff(expected,
+                                         lines)))
+ 
      def test_opmap(self):
          self.assertEqual(dis.opmap["STOP_CODE"], 0)
***************
*** 39,53 ****
  
      def test_dis(self):
!         s = StringIO.StringIO()
!         save_stdout = sys.stdout
!         sys.stdout = s
!         dis.dis(_f)
!         sys.stdout = save_stdout
!         got = s.getvalue()
!         # Trim trailing blanks (if any).
!         lines = got.split('\n')
!         lines = [line.rstrip() for line in lines]
!         got = '\n'.join(lines)
!         self.assertEqual(dis_f, got)
  
  def test_main():
--- 83,90 ----
  
      def test_dis(self):
!         self.do_disassembly_test(_f, dis_f)
! 
!     def test_bug_708901(self):
!         self.do_disassembly_test(bug708901, dis_bug708901)
  
  def test_main():