blob: 6c9fd58310943e2a0b62c206e544324b5ac9bf99 [file] [log] [blame]
Guido van Rossum3bead091992-01-27 17:00:37 +00001# Python test set -- part 2, opcodes
2
Georg Brandl0b679622006-10-28 13:56:58 +00003from test.test_support import run_unittest
4import unittest
Senthil Kumaran3ddc4352010-01-08 18:41:40 +00005import warnings
Georg Brandl0b679622006-10-28 13:56:58 +00006
7class OpcodeTest(unittest.TestCase):
8
9 def test_try_inside_for_loop(self):
10 n = 0
11 for i in range(10):
12 n = n+i
Senthil Kumaran3ddc4352010-01-08 18:41:40 +000013 try: 1 // 0
Georg Brandl0b679622006-10-28 13:56:58 +000014 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_raise_class_exceptions(self):
26
27 class AClass: pass
28 class BClass(AClass): pass
29 class CClass: pass
30 class DClass(AClass):
31 def __init__(self, ignore):
32 pass
33
34 try: raise AClass()
35 except: pass
36
37 try: raise AClass()
38 except AClass: pass
39
40 try: raise BClass()
41 except AClass: pass
42
43 try: raise BClass()
44 except CClass: self.fail()
45 except: pass
46
47 a = AClass()
48 b = BClass()
49
50 try: raise AClass, b
51 except BClass, v:
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000052 self.assertEqual(v, b)
Georg Brandl0b679622006-10-28 13:56:58 +000053 else: self.fail("no exception")
54
55 try: raise b
56 except AClass, v:
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000057 self.assertEqual(v, b)
Georg Brandl0b679622006-10-28 13:56:58 +000058 else:
59 self.fail("no exception")
60
61 # not enough arguments
62 try: raise BClass, a
63 except TypeError: pass
64 else: self.fail("no exception")
65
66 try: raise DClass, a
67 except DClass, v:
Benjamin Peterson5c8da862009-06-30 22:57:08 +000068 self.assertTrue(isinstance(v, DClass))
Georg Brandl0b679622006-10-28 13:56:58 +000069 else:
70 self.fail("no exception")
71
72 def test_compare_function_objects(self):
73
74 f = eval('lambda: None')
75 g = eval('lambda: None')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000076 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000077
78 f = eval('lambda a: a')
79 g = eval('lambda a: a')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000080 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000081
82 f = eval('lambda a=1: a')
83 g = eval('lambda a=1: a')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000084 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000085
86 f = eval('lambda: 0')
87 g = eval('lambda: 1')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000088 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000089
90 f = eval('lambda: None')
91 g = eval('lambda a: None')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000092 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000093
94 f = eval('lambda a: None')
95 g = eval('lambda b: None')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +000096 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +000097
98 f = eval('lambda a: None')
99 g = eval('lambda a=None: None')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +0000100 self.assertNotEquals(f, g)
Georg Brandl0b679622006-10-28 13:56:58 +0000101
102 f = eval('lambda a=0: None')
103 g = eval('lambda a=1: None')
Benjamin Peterson948ee7a2008-05-22 00:57:02 +0000104 self.assertNotEquals(f, g)
Guido van Rossum3bead091992-01-27 17:00:37 +0000105
Collin Winter8725dce2009-02-20 19:30:41 +0000106 def test_modulo_of_string_subclasses(self):
107 class MyString(str):
108 def __mod__(self, value):
109 return 42
110 self.assertEqual(MyString() % 3, 42)
111
Guido van Rossum3bead091992-01-27 17:00:37 +0000112
Georg Brandl0b679622006-10-28 13:56:58 +0000113def test_main():
Senthil Kumaran3ddc4352010-01-08 18:41:40 +0000114 with warnings.catch_warnings():
115 # Silence Py3k warning
116 warnings.filterwarnings("ignore", "exceptions must derive from "
117 "BaseException", DeprecationWarning)
118 warnings.filterwarnings("ignore", "catching classes that don't "
119 "inherit from BaseException is not allowed",
120 DeprecationWarning)
121 run_unittest(OpcodeTest)
Guido van Rossum3bead091992-01-27 17:00:37 +0000122
Georg Brandl0b679622006-10-28 13:56:58 +0000123if __name__ == '__main__':
124 test_main()