blob: a0b31505a36739131b8a997e299a4bb79f247b58 [file] [log] [blame]
Jeremy Hylton09ccc3a2001-03-21 20:33:04 +00001"""Test cases for traceback module"""
2
3import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00004from test.test_support import run_unittest
Jeremy Hylton09ccc3a2001-03-21 20:33:04 +00005
6import traceback
7
8class TracebackCases(unittest.TestCase):
9 # For now, a very minimal set of tests. I want to be sure that
10 # formatting of SyntaxErrors works based on changes for 2.1.
11
12 def get_exception_format(self, func, exc):
13 try:
14 func()
15 except exc, value:
16 return traceback.format_exception_only(exc, value)
17 else:
18 raise ValueError, "call did not raise exception"
Tim Peters7e01e282001-04-08 07:44:07 +000019
Jeremy Hylton09ccc3a2001-03-21 20:33:04 +000020 def syntax_error_with_caret(self):
21 compile("def fact(x):\n\treturn x!\n", "?", "exec")
22
23 def syntax_error_without_caret(self):
24 # XXX why doesn't compile raise the same traceback?
Barry Warsaw408b6d32002-07-30 23:27:12 +000025 import test.badsyntax_nocaret
Jeremy Hylton09ccc3a2001-03-21 20:33:04 +000026
27 def test_caret(self):
28 err = self.get_exception_format(self.syntax_error_with_caret,
29 SyntaxError)
30 self.assert_(len(err) == 4)
31 self.assert_("^" in err[2]) # third line has caret
32 self.assert_(err[1].strip() == "return x!")
Tim Peters7e01e282001-04-08 07:44:07 +000033
Jeremy Hylton09ccc3a2001-03-21 20:33:04 +000034 def test_nocaret(self):
35 err = self.get_exception_format(self.syntax_error_without_caret,
36 SyntaxError)
37 self.assert_(len(err) == 3)
38 self.assert_(err[1].strip() == "[x for x in x] = x")
39
Fred Drake2e2be372001-09-20 21:33:42 +000040
41def test_main():
42 run_unittest(TracebackCases)
43
44
45if __name__ == "__main__":
46 test_main()