1
2from test.test_support import run_unittest
3import unittest
4
5class ExceptionTestCase(unittest.TestCase):
6    def test_try_except_else_finally(self):
7        hit_except = False
8        hit_else = False
9        hit_finally = False
10
11        try:
12            raise Exception, 'nyaa!'
13        except:
14            hit_except = True
15        else:
16            hit_else = True
17        finally:
18            hit_finally = True
19
20        self.assertTrue(hit_except)
21        self.assertTrue(hit_finally)
22        self.assertFalse(hit_else)
23
24    def test_try_except_else_finally_no_exception(self):
25        hit_except = False
26        hit_else = False
27        hit_finally = False
28
29        try:
30            pass
31        except:
32            hit_except = True
33        else:
34            hit_else = True
35        finally:
36            hit_finally = True
37
38        self.assertFalse(hit_except)
39        self.assertTrue(hit_finally)
40        self.assertTrue(hit_else)
41
42    def test_try_except_finally(self):
43        hit_except = False
44        hit_finally = False
45
46        try:
47            raise Exception, 'yarr!'
48        except:
49            hit_except = True
50        finally:
51            hit_finally = True
52
53        self.assertTrue(hit_except)
54        self.assertTrue(hit_finally)
55
56    def test_try_except_finally_no_exception(self):
57        hit_except = False
58        hit_finally = False
59
60        try:
61            pass
62        except:
63            hit_except = True
64        finally:
65            hit_finally = True
66
67        self.assertFalse(hit_except)
68        self.assertTrue(hit_finally)
69
70    def test_try_except(self):
71        hit_except = False
72
73        try:
74            raise Exception, 'ahoy!'
75        except:
76            hit_except = True
77
78        self.assertTrue(hit_except)
79
80    def test_try_except_no_exception(self):
81        hit_except = False
82
83        try:
84            pass
85        except:
86            hit_except = True
87
88        self.assertFalse(hit_except)
89
90    def test_try_except_else(self):
91        hit_except = False
92        hit_else = False
93
94        try:
95            raise Exception, 'foo!'
96        except:
97            hit_except = True
98        else:
99            hit_else = True
100
101        self.assertFalse(hit_else)
102        self.assertTrue(hit_except)
103
104    def test_try_except_else_no_exception(self):
105        hit_except = False
106        hit_else = False
107
108        try:
109            pass
110        except:
111            hit_except = True
112        else:
113            hit_else = True
114
115        self.assertFalse(hit_except)
116        self.assertTrue(hit_else)
117
118    def test_try_finally_no_exception(self):
119        hit_finally = False
120
121        try:
122            pass
123        finally:
124            hit_finally = True
125
126        self.assertTrue(hit_finally)
127
128    def test_nested(self):
129        hit_finally = False
130        hit_inner_except = False
131        hit_inner_finally = False
132
133        try:
134            try:
135                raise Exception, 'inner exception'
136            except:
137                hit_inner_except = True
138            finally:
139                hit_inner_finally = True
140        finally:
141            hit_finally = True
142
143        self.assertTrue(hit_inner_except)
144        self.assertTrue(hit_inner_finally)
145        self.assertTrue(hit_finally)
146
147    def test_nested_else(self):
148        hit_else = False
149        hit_finally = False
150        hit_except = False
151        hit_inner_except = False
152        hit_inner_else = False
153
154        try:
155            try:
156                pass
157            except:
158                hit_inner_except = True
159            else:
160                hit_inner_else = True
161
162            raise Exception, 'outer exception'
163        except:
164            hit_except = True
165        else:
166            hit_else = True
167        finally:
168            hit_finally = True
169
170        self.assertFalse(hit_inner_except)
171        self.assertTrue(hit_inner_else)
172        self.assertFalse(hit_else)
173        self.assertTrue(hit_finally)
174        self.assertTrue(hit_except)
175
176def test_main():
177    run_unittest(ExceptionTestCase)
178
179if __name__ == '__main__':
180    test_main()
181