11a572964507512f3becd0c934525bd3caf9cc1acTim Peters
21a572964507512f3becd0c934525bd3caf9cc1acTim Petersfrom test.test_support import run_unittest
31a572964507512f3becd0c934525bd3caf9cc1acTim Petersimport unittest
41a572964507512f3becd0c934525bd3caf9cc1acTim Peters
51a572964507512f3becd0c934525bd3caf9cc1acTim Petersclass ExceptionTestCase(unittest.TestCase):
61a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_else_finally(self):
71a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
81a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_else = False
91a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
101a572964507512f3becd0c934525bd3caf9cc1acTim Peters
111a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
121a572964507512f3becd0c934525bd3caf9cc1acTim Peters            raise Exception, 'nyaa!'
131a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
141a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
151a572964507512f3becd0c934525bd3caf9cc1acTim Peters        else:
161a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_else = True
171a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
181a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
191a572964507512f3becd0c934525bd3caf9cc1acTim Peters
201a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_except)
211a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
221a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_else)
231a572964507512f3becd0c934525bd3caf9cc1acTim Peters
241a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_else_finally_no_exception(self):
251a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
261a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_else = False
271a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
281a572964507512f3becd0c934525bd3caf9cc1acTim Peters
291a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
301a572964507512f3becd0c934525bd3caf9cc1acTim Peters            pass
311a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
321a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
331a572964507512f3becd0c934525bd3caf9cc1acTim Peters        else:
341a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_else = True
351a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
361a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
371a572964507512f3becd0c934525bd3caf9cc1acTim Peters
381a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_except)
391a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
401a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_else)
411a572964507512f3becd0c934525bd3caf9cc1acTim Peters
421a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_finally(self):
431a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
441a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
451a572964507512f3becd0c934525bd3caf9cc1acTim Peters
461a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
471a572964507512f3becd0c934525bd3caf9cc1acTim Peters            raise Exception, 'yarr!'
481a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
491a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
501a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
511a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
521a572964507512f3becd0c934525bd3caf9cc1acTim Peters
531a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_except)
541a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
551a572964507512f3becd0c934525bd3caf9cc1acTim Peters
561a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_finally_no_exception(self):
571a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
581a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
591a572964507512f3becd0c934525bd3caf9cc1acTim Peters
601a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
611a572964507512f3becd0c934525bd3caf9cc1acTim Peters            pass
621a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
631a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
641a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
651a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
661a572964507512f3becd0c934525bd3caf9cc1acTim Peters
671a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_except)
681a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
691a572964507512f3becd0c934525bd3caf9cc1acTim Peters
701a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except(self):
711a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
721a572964507512f3becd0c934525bd3caf9cc1acTim Peters
731a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
741a572964507512f3becd0c934525bd3caf9cc1acTim Peters            raise Exception, 'ahoy!'
751a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
761a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
771a572964507512f3becd0c934525bd3caf9cc1acTim Peters
781a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_except)
791a572964507512f3becd0c934525bd3caf9cc1acTim Peters
801a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_no_exception(self):
811a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
821a572964507512f3becd0c934525bd3caf9cc1acTim Peters
831a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
841a572964507512f3becd0c934525bd3caf9cc1acTim Peters            pass
851a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
861a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
871a572964507512f3becd0c934525bd3caf9cc1acTim Peters
881a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_except)
891a572964507512f3becd0c934525bd3caf9cc1acTim Peters
901a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_else(self):
911a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
921a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_else = False
931a572964507512f3becd0c934525bd3caf9cc1acTim Peters
941a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
951a572964507512f3becd0c934525bd3caf9cc1acTim Peters            raise Exception, 'foo!'
961a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
971a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
981a572964507512f3becd0c934525bd3caf9cc1acTim Peters        else:
991a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_else = True
1001a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1011a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_else)
1021a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_except)
1031a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1041a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_except_else_no_exception(self):
1051a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
1061a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_else = False
1071a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1081a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
1091a572964507512f3becd0c934525bd3caf9cc1acTim Peters            pass
1101a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
1111a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
1121a572964507512f3becd0c934525bd3caf9cc1acTim Peters        else:
1131a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_else = True
1141a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1151a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_except)
1161a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_else)
1171a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1181a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_try_finally_no_exception(self):
1191a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
1201a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1211a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
1221a572964507512f3becd0c934525bd3caf9cc1acTim Peters            pass
1231a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
1241a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
1251a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1261a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
1271a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1281a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_nested(self):
1291a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
1301a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_inner_except = False
1311a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_inner_finally = False
1321a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1331a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
1341a572964507512f3becd0c934525bd3caf9cc1acTim Peters            try:
1351a572964507512f3becd0c934525bd3caf9cc1acTim Peters                raise Exception, 'inner exception'
1361a572964507512f3becd0c934525bd3caf9cc1acTim Peters            except:
1371a572964507512f3becd0c934525bd3caf9cc1acTim Peters                hit_inner_except = True
1381a572964507512f3becd0c934525bd3caf9cc1acTim Peters            finally:
1391a572964507512f3becd0c934525bd3caf9cc1acTim Peters                hit_inner_finally = True
1401a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
1411a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
1421a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1431a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_inner_except)
1441a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_inner_finally)
1451a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
1461a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1471a572964507512f3becd0c934525bd3caf9cc1acTim Peters    def test_nested_else(self):
1481a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_else = False
1491a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_finally = False
1501a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_except = False
1511a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_inner_except = False
1521a572964507512f3becd0c934525bd3caf9cc1acTim Peters        hit_inner_else = False
1531a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1541a572964507512f3becd0c934525bd3caf9cc1acTim Peters        try:
1551a572964507512f3becd0c934525bd3caf9cc1acTim Peters            try:
1561a572964507512f3becd0c934525bd3caf9cc1acTim Peters                pass
1571a572964507512f3becd0c934525bd3caf9cc1acTim Peters            except:
1581a572964507512f3becd0c934525bd3caf9cc1acTim Peters                hit_inner_except = True
1591a572964507512f3becd0c934525bd3caf9cc1acTim Peters            else:
1601a572964507512f3becd0c934525bd3caf9cc1acTim Peters                hit_inner_else = True
1611a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1621a572964507512f3becd0c934525bd3caf9cc1acTim Peters            raise Exception, 'outer exception'
1631a572964507512f3becd0c934525bd3caf9cc1acTim Peters        except:
1641a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_except = True
1651a572964507512f3becd0c934525bd3caf9cc1acTim Peters        else:
1661a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_else = True
1671a572964507512f3becd0c934525bd3caf9cc1acTim Peters        finally:
1681a572964507512f3becd0c934525bd3caf9cc1acTim Peters            hit_finally = True
1691a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1701a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_inner_except)
1711a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_inner_else)
1721a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertFalse(hit_else)
1731a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_finally)
1741a572964507512f3becd0c934525bd3caf9cc1acTim Peters        self.assertTrue(hit_except)
1751a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1761a572964507512f3becd0c934525bd3caf9cc1acTim Petersdef test_main():
1771a572964507512f3becd0c934525bd3caf9cc1acTim Peters    run_unittest(ExceptionTestCase)
1781a572964507512f3becd0c934525bd3caf9cc1acTim Peters
1791a572964507512f3becd0c934525bd3caf9cc1acTim Petersif __name__ == '__main__':
1801a572964507512f3becd0c934525bd3caf9cc1acTim Peters    test_main()
181