[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