blob: 6806c616cbef3888a2b9ba2b54eef369fb166a81 [file] [log] [blame]
Guido van Rossum3bead091992-01-27 17:00:37 +00001# Python test set -- part 2, opcodes
2
Thomas Wouters89f507f2006-12-13 04:49:30 +00003import unittest
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07004from test import ann_module
Thomas Wouters89f507f2006-12-13 04:49:30 +00005
6class 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
Yury Selivanovf8cb8a12016-09-08 20:50:03 -070024 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
Thomas Wouters89f507f2006-12-13 04:49:30 +000050 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
Collin Winter828f04a2007-08-31 00:04:24 +000075 try:
76 raise b
Guido van Rossumb940e112007-01-10 16:19:56 +000077 except AClass as v:
Collin Winter828f04a2007-08-31 00:04:24 +000078 self.assertEqual(v, b)
Thomas Wouters89f507f2006-12-13 04:49:30 +000079 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
Collin Winter828f04a2007-08-31 00:04:24 +000087 try: raise DClass(a)
Guido van Rossumb940e112007-01-10 16:19:56 +000088 except DClass as v:
Ezio Melottie9615932010-01-24 19:26:24 +000089 self.assertIsInstance(v, DClass)
Thomas Wouters89f507f2006-12-13 04:49:30 +000090 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')
Ezio Melottib3aedd42010-11-20 19:04:17 +000097 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +000098
99 f = eval('lambda a: a')
100 g = eval('lambda a: a')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000101 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000102
103 f = eval('lambda a=1: a')
104 g = eval('lambda a=1: a')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000105 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000106
107 f = eval('lambda: 0')
108 g = eval('lambda: 1')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000109 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000110
111 f = eval('lambda: None')
112 g = eval('lambda a: None')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000113 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000114
115 f = eval('lambda a: None')
116 g = eval('lambda b: None')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000117 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000118
119 f = eval('lambda a: None')
120 g = eval('lambda a=None: None')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000121 self.assertNotEqual(f, g)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000122
123 f = eval('lambda a=0: None')
124 g = eval('lambda a=1: None')
Ezio Melottib3aedd42010-11-20 19:04:17 +0000125 self.assertNotEqual(f, g)
Guido van Rossum3bead091992-01-27 17:00:37 +0000126
Benjamin Petersonefb06b02009-02-26 18:55:48 +0000127 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
Guido van Rossum3bead091992-01-27 17:00:37 +0000133
Thomas Wouters89f507f2006-12-13 04:49:30 +0000134if __name__ == '__main__':
Zachary Ware38c707e2015-04-13 15:00:43 -0500135 unittest.main()