Fix a bug introduced by the warnings rewrite where tracebacks were being

improperly indented.

Closes issue #2699.
This commit is contained in:
Brett Cannon 2008-04-28 03:23:50 +00:00
parent f30f6e8216
commit 141534e56f
3 changed files with 47 additions and 4 deletions

View File

@ -1,10 +1,24 @@
"""Test cases for traceback module"""
from _testcapi import test_traceback_print
from StringIO import StringIO
import sys
import unittest
from test.test_support import run_unittest, is_jython
from test.test_support import run_unittest, is_jython, Error
import traceback
try:
raise KeyError
except KeyError:
type_, value, tb = sys.exc_info()
file_ = StringIO()
test_traceback_print(tb, file_)
example_traceback = file_.getvalue()
else:
raise Error("unable to create test traceback string")
class TracebackCases(unittest.TestCase):
# For now, a very minimal set of tests. I want to be sure that
# formatting of SyntaxErrors works based on changes for 2.1.
@ -154,8 +168,20 @@ def test():
self.assertEqual(err, ['None\n'])
class TracebackFormatTests(unittest.TestCase):
def test_traceback_indentation(self):
# Make sure that the traceback is properly indented.
tb_lines = example_traceback.splitlines()
self.assertEquals(len(tb_lines), 3)
banner, location, source_line = tb_lines
self.assert_(banner.startswith('Traceback'))
self.assert_(location.startswith(' File'))
self.assert_(source_line.startswith('raise'))
def test_main():
run_unittest(TracebackCases)
run_unittest(TracebackCases, TracebackFormatTests)
if __name__ == "__main__":

View File

@ -734,6 +734,24 @@ test_with_docstring(PyObject *self)
Py_RETURN_NONE;
}
/* To test the format of tracebacks as printed out. */
static PyObject *
test_traceback_print(PyObject *self, PyObject *args)
{
PyObject *file;
PyObject *traceback;
int result;
if (!PyArg_ParseTuple(args, "OO:test_traceback_print",
&traceback, &file))
return NULL;
result = PyTraceBack_Print(traceback, file);
if (result < 0)
return NULL;
Py_RETURN_NONE;
}
static PyMethodDef TestMethods[] = {
{"raise_exception", raise_exception, METH_VARARGS},
{"test_config", (PyCFunction)test_config, METH_NOARGS},
@ -774,6 +792,7 @@ static PyMethodDef TestMethods[] = {
#ifdef WITH_THREAD
{"_test_thread_state", test_thread_state, METH_VARARGS},
#endif
{"test_traceback_print", test_traceback_print, METH_VARARGS},
{NULL, NULL} /* sentinel */
};

View File

@ -222,8 +222,6 @@ tb_displayline(PyObject *f, const char *filename, int lineno, const char *name)
err = PyFile_WriteString(linebuf, f);
if (err != 0)
return err;
err = PyFile_WriteString(" ", f);
return Py_DisplaySourceLine(f, filename, lineno);
}