

from test.test_support import run_unittest

import unittest



class ExceptionTestCase(unittest.TestCase):

    def test_try_except_else_finally(self):

        hit_except = False

        hit_else = False

        hit_finally = False



        try:

            raise Exception, 'nyaa!'

        except:

            hit_except = True

        else:

            hit_else = True

        finally:

            hit_finally = True



        self.assertTrue(hit_except)

        self.assertTrue(hit_finally)

        self.assertFalse(hit_else)



    def test_try_except_else_finally_no_exception(self):

        hit_except = False

        hit_else = False

        hit_finally = False



        try:

            pass

        except:

            hit_except = True

        else:

            hit_else = True

        finally:

            hit_finally = True



        self.assertFalse(hit_except)

        self.assertTrue(hit_finally)

        self.assertTrue(hit_else)



    def test_try_except_finally(self):

        hit_except = False

        hit_finally = False



        try:

            raise Exception, 'yarr!'

        except:

            hit_except = True

        finally:

            hit_finally = True



        self.assertTrue(hit_except)

        self.assertTrue(hit_finally)



    def test_try_except_finally_no_exception(self):

        hit_except = False

        hit_finally = False



        try:

            pass

        except:

            hit_except = True

        finally:

            hit_finally = True



        self.assertFalse(hit_except)

        self.assertTrue(hit_finally)



    def test_try_except(self):

        hit_except = False



        try:

            raise Exception, 'ahoy!'

        except:

            hit_except = True



        self.assertTrue(hit_except)



    def test_try_except_no_exception(self):

        hit_except = False



        try:

            pass

        except:

            hit_except = True



        self.assertFalse(hit_except)



    def test_try_except_else(self):

        hit_except = False

        hit_else = False



        try:

            raise Exception, 'foo!'

        except:

            hit_except = True

        else:

            hit_else = True



        self.assertFalse(hit_else)

        self.assertTrue(hit_except)



    def test_try_except_else_no_exception(self):

        hit_except = False

        hit_else = False



        try:

            pass

        except:

            hit_except = True

        else:

            hit_else = True



        self.assertFalse(hit_except)

        self.assertTrue(hit_else)



    def test_try_finally_no_exception(self):

        hit_finally = False



        try:

            pass

        finally:

            hit_finally = True



        self.assertTrue(hit_finally)



    def test_nested(self):

        hit_finally = False

        hit_inner_except = False

        hit_inner_finally = False



        try:

            try:

                raise Exception, 'inner exception'

            except:

                hit_inner_except = True

            finally:

                hit_inner_finally = True

        finally:

            hit_finally = True



        self.assertTrue(hit_inner_except)

        self.assertTrue(hit_inner_finally)

        self.assertTrue(hit_finally)



    def test_nested_else(self):

        hit_else = False

        hit_finally = False

        hit_except = False

        hit_inner_except = False

        hit_inner_else = False



        try:

            try:

                pass

            except:

                hit_inner_except = True

            else:

                hit_inner_else = True



            raise Exception, 'outer exception'

        except:

            hit_except = True

        else:

            hit_else = True

        finally:

            hit_finally = True



        self.assertFalse(hit_inner_except)

        self.assertTrue(hit_inner_else)

        self.assertFalse(hit_else)

        self.assertTrue(hit_finally)

        self.assertTrue(hit_except)



def test_main():

    run_unittest(ExceptionTestCase)



if __name__ == '__main__':

    test_main()

