(root)/
Python-3.12.0/
Lib/
test/
test_opcodes.py
       1  # Python test set -- part 2, opcodes
       2  
       3  import unittest
       4  from test import ann_module, support
       5  
       6  class ESC[4;38;5;81mOpcodeTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       7  
       8      def test_try_inside_for_loop(self):
       9          n = 0
      10          for i in range(10):
      11              n = n+i
      12              try: 1/0
      13              except NameError: pass
      14              except ZeroDivisionError: pass
      15              except TypeError: pass
      16              try: pass
      17              except: pass
      18              try: pass
      19              finally: pass
      20              n = n+i
      21          if n != 90:
      22              self.fail('try inside for')
      23  
      24      def test_setup_annotations_line(self):
      25          # check that SETUP_ANNOTATIONS does not create spurious line numbers
      26          try:
      27              with open(ann_module.__file__, encoding="utf-8") as f:
      28                  txt = f.read()
      29              co = compile(txt, ann_module.__file__, 'exec')
      30              self.assertEqual(co.co_firstlineno, 1)
      31          except OSError:
      32              pass
      33  
      34      def test_default_annotations_exist(self):
      35          class ESC[4;38;5;81mC: pass
      36          self.assertEqual(C.__annotations__, {})
      37  
      38      def test_use_existing_annotations(self):
      39          ns = {'__annotations__': {1: 2}}
      40          exec('x: int', ns)
      41          self.assertEqual(ns['__annotations__'], {'x': int, 1: 2})
      42  
      43      def test_do_not_recreate_annotations(self):
      44          # Don't rely on the existence of the '__annotations__' global.
      45          with support.swap_item(globals(), '__annotations__', {}):
      46              del globals()['__annotations__']
      47              class ESC[4;38;5;81mC:
      48                  del __annotations__
      49                  with self.assertRaises(NameError):
      50                      x: int
      51  
      52      def test_raise_class_exceptions(self):
      53  
      54          class ESC[4;38;5;81mAClass(ESC[4;38;5;149mException): pass
      55          class ESC[4;38;5;81mBClass(ESC[4;38;5;149mAClass): pass
      56          class ESC[4;38;5;81mCClass(ESC[4;38;5;149mException): pass
      57          class ESC[4;38;5;81mDClass(ESC[4;38;5;149mAClass):
      58              def __init__(self, ignore):
      59                  pass
      60  
      61          try: raise AClass()
      62          except: pass
      63  
      64          try: raise AClass()
      65          except AClass: pass
      66  
      67          try: raise BClass()
      68          except AClass: pass
      69  
      70          try: raise BClass()
      71          except CClass: self.fail()
      72          except: pass
      73  
      74          a = AClass()
      75          b = BClass()
      76  
      77          try:
      78              raise b
      79          except AClass as v:
      80              self.assertEqual(v, b)
      81          else:
      82              self.fail("no exception")
      83  
      84          # not enough arguments
      85          ##try:  raise BClass, a
      86          ##except TypeError: pass
      87          ##else: self.fail("no exception")
      88  
      89          try:  raise DClass(a)
      90          except DClass as v:
      91              self.assertIsInstance(v, DClass)
      92          else:
      93              self.fail("no exception")
      94  
      95      def test_compare_function_objects(self):
      96  
      97          f = eval('lambda: None')
      98          g = eval('lambda: None')
      99          self.assertNotEqual(f, g)
     100  
     101          f = eval('lambda a: a')
     102          g = eval('lambda a: a')
     103          self.assertNotEqual(f, g)
     104  
     105          f = eval('lambda a=1: a')
     106          g = eval('lambda a=1: a')
     107          self.assertNotEqual(f, g)
     108  
     109          f = eval('lambda: 0')
     110          g = eval('lambda: 1')
     111          self.assertNotEqual(f, g)
     112  
     113          f = eval('lambda: None')
     114          g = eval('lambda a: None')
     115          self.assertNotEqual(f, g)
     116  
     117          f = eval('lambda a: None')
     118          g = eval('lambda b: None')
     119          self.assertNotEqual(f, g)
     120  
     121          f = eval('lambda a: None')
     122          g = eval('lambda a=None: None')
     123          self.assertNotEqual(f, g)
     124  
     125          f = eval('lambda a=0: None')
     126          g = eval('lambda a=1: None')
     127          self.assertNotEqual(f, g)
     128  
     129      def test_modulo_of_string_subclasses(self):
     130          class ESC[4;38;5;81mMyString(ESC[4;38;5;149mstr):
     131              def __mod__(self, value):
     132                  return 42
     133          self.assertEqual(MyString() % 3, 42)
     134  
     135  
     136  if __name__ == '__main__':
     137      unittest.main()