mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
Fix a bug introduced by the warnings rewrite where tracebacks were being
improperly indented. Closes issue #2699.
This commit is contained in:
parent
f30f6e8216
commit
141534e56f
3 changed files with 47 additions and 4 deletions
|
@ -1,10 +1,24 @@
|
||||||
"""Test cases for traceback module"""
|
"""Test cases for traceback module"""
|
||||||
|
|
||||||
|
from _testcapi import test_traceback_print
|
||||||
|
from StringIO import StringIO
|
||||||
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from test.test_support import run_unittest, is_jython
|
from test.test_support import run_unittest, is_jython, Error
|
||||||
|
|
||||||
import traceback
|
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):
|
class TracebackCases(unittest.TestCase):
|
||||||
# For now, a very minimal set of tests. I want to be sure that
|
# For now, a very minimal set of tests. I want to be sure that
|
||||||
# formatting of SyntaxErrors works based on changes for 2.1.
|
# formatting of SyntaxErrors works based on changes for 2.1.
|
||||||
|
@ -154,8 +168,20 @@ def test():
|
||||||
self.assertEqual(err, ['None\n'])
|
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():
|
def test_main():
|
||||||
run_unittest(TracebackCases)
|
run_unittest(TracebackCases, TracebackFormatTests)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -734,6 +734,24 @@ test_with_docstring(PyObject *self)
|
||||||
Py_RETURN_NONE;
|
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[] = {
|
static PyMethodDef TestMethods[] = {
|
||||||
{"raise_exception", raise_exception, METH_VARARGS},
|
{"raise_exception", raise_exception, METH_VARARGS},
|
||||||
{"test_config", (PyCFunction)test_config, METH_NOARGS},
|
{"test_config", (PyCFunction)test_config, METH_NOARGS},
|
||||||
|
@ -774,6 +792,7 @@ static PyMethodDef TestMethods[] = {
|
||||||
#ifdef WITH_THREAD
|
#ifdef WITH_THREAD
|
||||||
{"_test_thread_state", test_thread_state, METH_VARARGS},
|
{"_test_thread_state", test_thread_state, METH_VARARGS},
|
||||||
#endif
|
#endif
|
||||||
|
{"test_traceback_print", test_traceback_print, METH_VARARGS},
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -222,8 +222,6 @@ tb_displayline(PyObject *f, const char *filename, int lineno, const char *name)
|
||||||
err = PyFile_WriteString(linebuf, f);
|
err = PyFile_WriteString(linebuf, f);
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = PyFile_WriteString(" ", f);
|
|
||||||
return Py_DisplaySourceLine(f, filename, lineno);
|
return Py_DisplaySourceLine(f, filename, lineno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue