[Python-checkins] r62555 - in python/trunk: Lib/test/test_traceback.py Modules/_testcapimodule.c Python/traceback.c
brett.cannon
python-checkins at python.org
Mon Apr 28 05:23:50 CEST 2008
Author: brett.cannon
Date: Mon Apr 28 05:23:50 2008
New Revision: 62555
Log:
Fix a bug introduced by the warnings rewrite where tracebacks were being
improperly indented.
Closes issue #2699.
Modified:
python/trunk/Lib/test/test_traceback.py
python/trunk/Modules/_testcapimodule.c
python/trunk/Python/traceback.c
Modified: python/trunk/Lib/test/test_traceback.py
==============================================================================
--- python/trunk/Lib/test/test_traceback.py (original)
+++ python/trunk/Lib/test/test_traceback.py Mon Apr 28 05:23:50 2008
@@ -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 @@
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__":
Modified: python/trunk/Modules/_testcapimodule.c
==============================================================================
--- python/trunk/Modules/_testcapimodule.c (original)
+++ python/trunk/Modules/_testcapimodule.c Mon Apr 28 05:23:50 2008
@@ -734,6 +734,24 @@
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 @@
#ifdef WITH_THREAD
{"_test_thread_state", test_thread_state, METH_VARARGS},
#endif
+ {"test_traceback_print", test_traceback_print, METH_VARARGS},
{NULL, NULL} /* sentinel */
};
Modified: python/trunk/Python/traceback.c
==============================================================================
--- python/trunk/Python/traceback.c (original)
+++ python/trunk/Python/traceback.c Mon Apr 28 05:23:50 2008
@@ -222,8 +222,6 @@
err = PyFile_WriteString(linebuf, f);
if (err != 0)
return err;
-
- err = PyFile_WriteString(" ", f);
return Py_DisplaySourceLine(f, filename, lineno);
}
More information about the Python-checkins
mailing list