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