blob: 6d117d62b1b40529afc5314ed169a0b1d3f49242 [file] [log] [blame]
Guido van Rossum3bead091992-01-27 17:00:37 +00001# Python test set -- part 2, opcodes
2
Ezio Melottid80b4bf2010-03-17 13:52:48 +00003from test.test_support import run_unittest, check_py3k_warnings
Georg Brandl0b679622006-10-28 13:56:58 +00004import unittest
5
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
Ezio Melottid80b4bf2010-03-17 13:52:48 +000012 try: 1 // 0
Georg Brandl0b679622006-10-28 13:56:58 +000013 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_raise_class_exceptions(self):
25
26 class AClass: pass
27 class BClass(AClass): pass
28 class CClass: pass
29 class DClass(AClass):
30 def __init__(self, ignore):
31 pass
32
33 try: raise AClass()
34 except: pass
35
36 try: raise AClass()
37 except AClass: pass
38
39 try: raise BClass()
40 except AClass: pass
41
42 try: raise BClass()
43 except CClass: self.fail()
44 except: pass
45
46 a = AClass()
47 b = BClass()
48
49 try: raise AClass, b
50 except BClass, v:
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000051 self.assertEqual(v, b)
Georg Brandl0b679622006-10-28 13:56:58 +000052 else: self.fail("no exception")
53
54 try: raise b
55 except AClass, v:
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000056 self.assertEqual(v, b)
Georg Brandl0b679622006-10-28 13:56:58 +000057 else:
58 self.fail("no exception")
59
60 # not enough arguments
61 try: raise BClass, a
62 except TypeError: pass
63 else: self.fail("no exception")
64
65 try: raise DClass, a
66 except DClass, v:
Ezio Melottib0f5adc2010-01-24 16:58:36 +000067 self.assertIsInstance(v, DClass)
Georg Brandl0b679622006-10-28 13:56:58 +000068 else:
69 self.fail("no exception")
70
71 def test_compare_function_objects(self):
72
73 f = eval('lambda: None')
74 g = eval('lambda: None')
Ezio Melotti2623a372010-11-21 13:34:58 +000075 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000076
77 f = eval('lambda a: a')
78 g = eval('lambda a: a')
Ezio Melotti2623a372010-11-21 13:34:58 +000079 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000080
81 f = eval('lambda a=1: a')
82 g = eval('lambda a=1: a')
Ezio Melotti2623a372010-11-21 13:34:58 +000083 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000084
85 f = eval('lambda: 0')
86 g = eval('lambda: 1')
Ezio Melotti2623a372010-11-21 13:34:58 +000087 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000088
89 f = eval('lambda: None')
90 g = eval('lambda a: None')
Ezio Melotti2623a372010-11-21 13:34:58 +000091 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000092
93 f = eval('lambda a: None')
94 g = eval('lambda b: None')
Ezio Melotti2623a372010-11-21 13:34:58 +000095 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000096
97 f = eval('lambda a: None')
98 g = eval('lambda a=None: None')
Ezio Melotti2623a372010-11-21 13:34:58 +000099 self.assertNotEqual(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +0000100
101 f = eval('lambda a=0: None')
102 g = eval('lambda a=1: None')
Ezio Melotti2623a372010-11-21 13:34:58 +0000103 self.assertNotEqual(f, g)
Guido van Rossum3bead091992-01-27 17:00:37 +0000104
Collin Winter8725dce2009-02-20 19:30:41 +0000105 def test_modulo_of_string_subclasses(self):
106 class MyString(str):
107 def __mod__(self, value):
108 return 42
109 self.assertEqual(MyString() % 3, 42)
110
Guido van Rossum3bead091992-01-27 17:00:37 +0000111
Georg Brandl0b679622006-10-28 13:56:58 +0000112def test_main():
Ezio Melottid80b4bf2010-03-17 13:52:48 +0000113 with check_py3k_warnings(("exceptions must derive from BaseException",
114 DeprecationWarning),
115 ("catching classes that don't inherit "
116 "from BaseException is not allowed",
117 DeprecationWarning)):
118 run_unittest(OpcodeTest)
Guido van Rossum3bead091992-01-27 17:00:37 +0000119
Georg Brandl0b679622006-10-28 13:56:58 +0000120if __name__ == '__main__':
121 test_main()