]> granicus.if.org Git - python/commitdiff
Issue #25108: Backported tests for traceback functions print_stack(),
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 18 Sep 2015 07:09:29 +0000 (10:09 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Fri, 18 Sep 2015 07:09:29 +0000 (10:09 +0300)
format_stack(), and extract_stack() called without arguments.

Lib/test/test_traceback.py

index 8b0322bf7510d5d9f3b8c05f36ad376344924d6b..88e8b7b5fc44262713452a087b70ddd733f83e91 100644 (file)
@@ -4,7 +4,8 @@ from StringIO import StringIO
 import sys
 import unittest
 from imp import reload
-from test.test_support import run_unittest, is_jython, Error, cpython_only
+from test.test_support import (run_unittest, is_jython, Error, cpython_only,
+                               captured_output)
 
 import traceback
 
@@ -206,9 +207,50 @@ class TracebackFormatTests(unittest.TestCase):
         self.assertTrue(location.startswith('  File'))
         self.assertTrue(source_line.startswith('    raise'))
 
+    def test_print_stack(self):
+        def prn():
+            traceback.print_stack()
+        with captured_output("stderr") as stderr:
+            prn()
+        lineno = prn.__code__.co_firstlineno
+        self.assertEqual(stderr.getvalue().splitlines()[-4:], [
+            '  File "%s", line %d, in test_print_stack' % (__file__, lineno+3),
+            '    prn()',
+            '  File "%s", line %d, in prn' % (__file__, lineno+1),
+            '    traceback.print_stack()',
+        ])
+
+    def test_format_stack(self):
+        def fmt():
+            return traceback.format_stack()
+        result = fmt()
+        lineno = fmt.__code__.co_firstlineno
+        self.assertEqual(result[-2:], [
+            '  File "%s", line %d, in test_format_stack\n'
+            '    result = fmt()\n' % (__file__, lineno+2),
+            '  File "%s", line %d, in fmt\n'
+            '    return traceback.format_stack()\n' % (__file__, lineno+1),
+        ])
+
+
+class MiscTracebackCases(unittest.TestCase):
+    #
+    # Check non-printing functions in traceback module
+    #
+
+    def test_extract_stack(self):
+        def extract():
+            return traceback.extract_stack()
+        result = extract()
+        lineno = extract.__code__.co_firstlineno
+        self.assertEqual(result[-2:], [
+            (__file__, lineno+2, 'test_extract_stack', 'result = extract()'),
+            (__file__, lineno+1, 'extract', 'return traceback.extract_stack()'),
+        ])
+
 
 def test_main():
-    run_unittest(TracebackCases, TracebackFormatTests)
+    run_unittest(TracebackCases, TracebackFormatTests, MiscTracebackCases)
 
 
 if __name__ == "__main__":