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