blob: 0e19972f4efcf68360ee9415556d5cf6ef1d24d1 [file] [log] [blame]
Collin Winter828f04a2007-08-31 00:04:24 +00001# Copyright 2007 Google, Inc. All Rights Reserved.
2# Licensed to PSF under a Contributor Agreement.
3
4"""Tests for the raise statement."""
5
6from test import test_support
7import sys
8import types
9import unittest
10
11
12def get_tb():
13 try:
14 raise OSError()
15 except:
16 return sys.exc_info()[2]
17
18
19class TestRaise(unittest.TestCase):
20 def test_invalid_reraise(self):
21 try:
22 raise
23 except RuntimeError as e:
24 self.failUnless("No active exception" in str(e))
25 else:
26 self.fail("No exception raised")
27
28 def test_reraise(self):
29 try:
30 try:
31 raise IndexError()
32 except IndexError as e:
33 exc1 = e
34 raise
35 except IndexError as exc2:
36 self.failUnless(exc1 is exc2)
37 else:
38 self.fail("No exception raised")
39
40
41class TestCause(unittest.TestCase):
42 def test_invalid_cause(self):
43 try:
44 raise IndexError from 5
45 except TypeError as e:
46 self.failUnless("exception cause" in str(e))
47 else:
48 self.fail("No exception raised")
49
50 def test_class_cause(self):
51 try:
52 raise IndexError from KeyError
53 except IndexError as e:
54 self.failUnless(isinstance(e.__cause__, KeyError))
55 else:
56 self.fail("No exception raised")
57
58 def test_instance_cause(self):
59 cause = KeyError()
60 try:
61 raise IndexError from cause
62 except IndexError as e:
63 self.failUnless(e.__cause__ is cause)
64 else:
65 self.fail("No exception raised")
66
67
68class TestTraceback(unittest.TestCase):
69 def test_sets_traceback(self):
70 try:
71 raise IndexError()
72 except IndexError as e:
73 self.failUnless(isinstance(e.__traceback__, types.TracebackType))
74 else:
75 self.fail("No exception raised")
76
77 def test_accepts_traceback(self):
78 tb = get_tb()
79 try:
80 raise IndexError().with_traceback(tb)
81 except IndexError as e:
82 self.assertNotEqual(e.__traceback__, tb)
83 self.assertEqual(e.__traceback__.tb_next, tb)
84 else:
85 self.fail("No exception raised")
86
87
88# Disabled until context is implemented
89# class TestContext(object):
90# def test_instance_context_bare_raise(self):
91# context = IndexError()
92# try:
93# try:
94# raise context
95# except:
96# raise OSError()
97# except OSError as e:
98# self.assertEqual(e.__context__, context)
99# else:
100# self.fail("No exception raised")
101#
102# def test_class_context_bare_raise(self):
103# context = IndexError
104# try:
105# try:
106# raise context
107# except:
108# raise OSError()
109# except OSError as e:
110# self.assertNotEqual(e.__context__, context)
111# self.failUnless(isinstance(e.__context__, context))
112# else:
113# self.fail("No exception raised")
114
115
116class TestRemovedFunctionality(unittest.TestCase):
117 def test_tuples(self):
118 try:
119 raise (IndexError, KeyError) # This should be a tuple!
120 except TypeError:
121 pass
122 else:
123 self.fail("No exception raised")
124
125 def test_strings(self):
126 try:
127 raise "foo"
128 except TypeError:
129 pass
130 else:
131 self.fail("No exception raised")
132
133
134def test_main():
135 test_support.run_unittest(__name__)
136
137
138if __name__ == "__main__":
139 unittest.main()