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