Home | History | Annotate | Download | only in test
      1 # Python test set -- part 2, opcodes
      2 
      3 import unittest
      4 from test import ann_module
      5 
      6 class OpcodeTest(unittest.TestCase):
      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__) as f:
     28                 txt = f.read()
     29             co = compile(txt, ann_module.__file__, 'exec')
     30             self.assertEqual(co.co_firstlineno, 6)
     31         except OSError:
     32             pass
     33 
     34     def test_no_annotations_if_not_needed(self):
     35         class C: pass
     36         with self.assertRaises(AttributeError):
     37             C.__annotations__
     38 
     39     def test_use_existing_annotations(self):
     40         ns = {'__annotations__': {1: 2}}
     41         exec('x: int', ns)
     42         self.assertEqual(ns['__annotations__'], {'x': int, 1: 2})
     43 
     44     def test_do_not_recreate_annotations(self):
     45         class C:
     46             del __annotations__
     47             with self.assertRaises(NameError):
     48                 x: int
     49 
     50     def test_raise_class_exceptions(self):
     51 
     52         class AClass(Exception): pass
     53         class BClass(AClass): pass
     54         class CClass(Exception): pass
     55         class DClass(AClass):
     56             def __init__(self, ignore):
     57                 pass
     58 
     59         try: raise AClass()
     60         except: pass
     61 
     62         try: raise AClass()
     63         except AClass: pass
     64 
     65         try: raise BClass()
     66         except AClass: pass
     67 
     68         try: raise BClass()
     69         except CClass: self.fail()
     70         except: pass
     71 
     72         a = AClass()
     73         b = BClass()
     74 
     75         try:
     76             raise b
     77         except AClass as v:
     78             self.assertEqual(v, b)
     79         else:
     80             self.fail("no exception")
     81 
     82         # not enough arguments
     83         ##try:  raise BClass, a
     84         ##except TypeError: pass
     85         ##else: self.fail("no exception")
     86 
     87         try:  raise DClass(a)
     88         except DClass as v:
     89             self.assertIsInstance(v, DClass)
     90         else:
     91             self.fail("no exception")
     92 
     93     def test_compare_function_objects(self):
     94 
     95         f = eval('lambda: None')
     96         g = eval('lambda: None')
     97         self.assertNotEqual(f, g)
     98 
     99         f = eval('lambda a: a')
    100         g = eval('lambda a: a')
    101         self.assertNotEqual(f, g)
    102 
    103         f = eval('lambda a=1: a')
    104         g = eval('lambda a=1: a')
    105         self.assertNotEqual(f, g)
    106 
    107         f = eval('lambda: 0')
    108         g = eval('lambda: 1')
    109         self.assertNotEqual(f, g)
    110 
    111         f = eval('lambda: None')
    112         g = eval('lambda a: None')
    113         self.assertNotEqual(f, g)
    114 
    115         f = eval('lambda a: None')
    116         g = eval('lambda b: None')
    117         self.assertNotEqual(f, g)
    118 
    119         f = eval('lambda a: None')
    120         g = eval('lambda a=None: None')
    121         self.assertNotEqual(f, g)
    122 
    123         f = eval('lambda a=0: None')
    124         g = eval('lambda a=1: None')
    125         self.assertNotEqual(f, g)
    126 
    127     def test_modulo_of_string_subclasses(self):
    128         class MyString(str):
    129             def __mod__(self, value):
    130                 return 42
    131         self.assertEqual(MyString() % 3, 42)
    132 
    133 
    134 if __name__ == '__main__':
    135     unittest.main()
    136