summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_raise.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/Lib/test/test_raise.py b/Lib/test/test_raise.py
index 103f608..c1ef154 100644
--- a/Lib/test/test_raise.py
+++ b/Lib/test/test_raise.py
@@ -228,6 +228,72 @@ class TestTraceback(unittest.TestCase):
self.fail("No exception raised")
+class TestTracebackType(unittest.TestCase):
+
+ def raiser(self):
+ raise ValueError
+
+ def test_attrs(self):
+ try:
+ self.raiser()
+ except Exception as exc:
+ tb = exc.__traceback__
+
+ self.assertIsInstance(tb.tb_next, types.TracebackType)
+ self.assertIs(tb.tb_frame, sys._getframe())
+ self.assertIsInstance(tb.tb_lasti, int)
+ self.assertIsInstance(tb.tb_lineno, int)
+
+ self.assertIs(tb.tb_next.tb_next, None)
+
+ # Invalid assignments
+ with self.assertRaises(TypeError):
+ del tb.tb_next
+
+ with self.assertRaises(TypeError):
+ tb.tb_next = "asdf"
+
+ # Loops
+ with self.assertRaises(ValueError):
+ tb.tb_next = tb
+
+ with self.assertRaises(ValueError):
+ tb.tb_next.tb_next = tb
+
+ # Valid assignments
+ tb.tb_next = None
+ self.assertIs(tb.tb_next, None)
+
+ new_tb = get_tb()
+ tb.tb_next = new_tb
+ self.assertIs(tb.tb_next, new_tb)
+
+ def test_constructor(self):
+ other_tb = get_tb()
+ frame = sys._getframe()
+
+ tb = types.TracebackType(other_tb, frame, 1, 2)
+ self.assertEqual(tb.tb_next, other_tb)
+ self.assertEqual(tb.tb_frame, frame)
+ self.assertEqual(tb.tb_lasti, 1)
+ self.assertEqual(tb.tb_lineno, 2)
+
+ tb = types.TracebackType(None, frame, 1, 2)
+ self.assertEqual(tb.tb_next, None)
+
+ with self.assertRaises(TypeError):
+ types.TracebackType("no", frame, 1, 2)
+
+ with self.assertRaises(TypeError):
+ types.TracebackType(other_tb, "no", 1, 2)
+
+ with self.assertRaises(TypeError):
+ types.TracebackType(other_tb, frame, "no", 2)
+
+ with self.assertRaises(TypeError):
+ types.TracebackType(other_tb, frame, 1, "nuh-uh")
+
+
class TestContext(unittest.TestCase):
def test_instance_context_instance_raise(self):
context = IndexError()