]>
Commit | Line | Data |
---|---|---|
4710c53d | 1 | # Python test set -- part 2, opcodes\r |
2 | \r | |
3 | from test.test_support import run_unittest, check_py3k_warnings\r | |
4 | import unittest\r | |
5 | \r | |
6 | class OpcodeTest(unittest.TestCase):\r | |
7 | \r | |
8 | def test_try_inside_for_loop(self):\r | |
9 | n = 0\r | |
10 | for i in range(10):\r | |
11 | n = n+i\r | |
12 | try: 1 // 0\r | |
13 | except NameError: pass\r | |
14 | except ZeroDivisionError: pass\r | |
15 | except TypeError: pass\r | |
16 | try: pass\r | |
17 | except: pass\r | |
18 | try: pass\r | |
19 | finally: pass\r | |
20 | n = n+i\r | |
21 | if n != 90:\r | |
22 | self.fail('try inside for')\r | |
23 | \r | |
24 | def test_raise_class_exceptions(self):\r | |
25 | \r | |
26 | class AClass: pass\r | |
27 | class BClass(AClass): pass\r | |
28 | class CClass: pass\r | |
29 | class DClass(AClass):\r | |
30 | def __init__(self, ignore):\r | |
31 | pass\r | |
32 | \r | |
33 | try: raise AClass()\r | |
34 | except: pass\r | |
35 | \r | |
36 | try: raise AClass()\r | |
37 | except AClass: pass\r | |
38 | \r | |
39 | try: raise BClass()\r | |
40 | except AClass: pass\r | |
41 | \r | |
42 | try: raise BClass()\r | |
43 | except CClass: self.fail()\r | |
44 | except: pass\r | |
45 | \r | |
46 | a = AClass()\r | |
47 | b = BClass()\r | |
48 | \r | |
49 | try: raise AClass, b\r | |
50 | except BClass, v:\r | |
51 | self.assertEqual(v, b)\r | |
52 | else: self.fail("no exception")\r | |
53 | \r | |
54 | try: raise b\r | |
55 | except AClass, v:\r | |
56 | self.assertEqual(v, b)\r | |
57 | else:\r | |
58 | self.fail("no exception")\r | |
59 | \r | |
60 | # not enough arguments\r | |
61 | try: raise BClass, a\r | |
62 | except TypeError: pass\r | |
63 | else: self.fail("no exception")\r | |
64 | \r | |
65 | try: raise DClass, a\r | |
66 | except DClass, v:\r | |
67 | self.assertIsInstance(v, DClass)\r | |
68 | else:\r | |
69 | self.fail("no exception")\r | |
70 | \r | |
71 | def test_compare_function_objects(self):\r | |
72 | \r | |
73 | f = eval('lambda: None')\r | |
74 | g = eval('lambda: None')\r | |
75 | self.assertNotEqual(f, g)\r | |
76 | \r | |
77 | f = eval('lambda a: a')\r | |
78 | g = eval('lambda a: a')\r | |
79 | self.assertNotEqual(f, g)\r | |
80 | \r | |
81 | f = eval('lambda a=1: a')\r | |
82 | g = eval('lambda a=1: a')\r | |
83 | self.assertNotEqual(f, g)\r | |
84 | \r | |
85 | f = eval('lambda: 0')\r | |
86 | g = eval('lambda: 1')\r | |
87 | self.assertNotEqual(f, g)\r | |
88 | \r | |
89 | f = eval('lambda: None')\r | |
90 | g = eval('lambda a: None')\r | |
91 | self.assertNotEqual(f, g)\r | |
92 | \r | |
93 | f = eval('lambda a: None')\r | |
94 | g = eval('lambda b: None')\r | |
95 | self.assertNotEqual(f, g)\r | |
96 | \r | |
97 | f = eval('lambda a: None')\r | |
98 | g = eval('lambda a=None: None')\r | |
99 | self.assertNotEqual(f, g)\r | |
100 | \r | |
101 | f = eval('lambda a=0: None')\r | |
102 | g = eval('lambda a=1: None')\r | |
103 | self.assertNotEqual(f, g)\r | |
104 | \r | |
105 | def test_modulo_of_string_subclasses(self):\r | |
106 | class MyString(str):\r | |
107 | def __mod__(self, value):\r | |
108 | return 42\r | |
109 | self.assertEqual(MyString() % 3, 42)\r | |
110 | \r | |
111 | \r | |
112 | def test_main():\r | |
113 | with check_py3k_warnings(("exceptions must derive from BaseException",\r | |
114 | DeprecationWarning),\r | |
115 | ("catching classes that don't inherit "\r | |
116 | "from BaseException is not allowed",\r | |
117 | DeprecationWarning)):\r | |
118 | run_unittest(OpcodeTest)\r | |
119 | \r | |
120 | if __name__ == '__main__':\r | |
121 | test_main()\r |