Kaydet (Commit) b1aa30f9 authored tarafından Michael Foord's avatar Michael Foord

Issue 7815. __unittest in module globals trims frames from reported stacktraces in unittest.

üst bb9d7263
...@@ -2084,6 +2084,16 @@ class Test_TestResult(TestCase): ...@@ -2084,6 +2084,16 @@ class Test_TestResult(TestCase):
'Tests getDescription() for a method with a longer ' 'Tests getDescription() for a method with a longer '
'docstring.')) 'docstring.'))
def testStackFrameTrimming(self):
class Frame(object):
class tb_frame(object):
f_globals = {}
result = unittest.TestResult()
self.assertFalse(result._is_relevant_tb_level(Frame))
Frame.tb_frame.f_globals['__unittest'] = True
self.assertTrue(result._is_relevant_tb_level(Frame))
classDict = dict(unittest.TestResult.__dict__) classDict = dict(unittest.TestResult.__dict__)
for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess', for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess',
'__init__'): '__init__'):
......
...@@ -64,3 +64,5 @@ from .runner import TextTestRunner, TextTestResult ...@@ -64,3 +64,5 @@ from .runner import TextTestRunner, TextTestResult
# deprecated # deprecated
_TextTestResult = TextTestResult _TextTestResult = TextTestResult
__unittest = True
...@@ -4,5 +4,8 @@ import sys ...@@ -4,5 +4,8 @@ import sys
if sys.argv[0].endswith("__main__.py"): if sys.argv[0].endswith("__main__.py"):
sys.argv[0] = "unittest" sys.argv[0] = "unittest"
__unittest = True
from .main import main from .main import main
main(module=None) main(module=None)
...@@ -12,6 +12,9 @@ from .util import ( ...@@ -12,6 +12,9 @@ from .util import (
strclass, safe_repr, sorted_list_difference, unorderable_list_difference strclass, safe_repr, sorted_list_difference, unorderable_list_difference
) )
__unittest = True
class SkipTest(Exception): class SkipTest(Exception):
""" """
Raise this exception in a test to skip it. Raise this exception in a test to skip it.
......
...@@ -10,6 +10,8 @@ from fnmatch import fnmatch ...@@ -10,6 +10,8 @@ from fnmatch import fnmatch
from . import case, suite from . import case, suite
__unittest = True
def _CmpToKey(mycmp): def _CmpToKey(mycmp):
'Convert a cmp= function into a key= function' 'Convert a cmp= function into a key= function'
......
...@@ -6,6 +6,8 @@ import types ...@@ -6,6 +6,8 @@ import types
from . import loader, runner from . import loader, runner
__unittest = True
USAGE_AS_MAIN = """\ USAGE_AS_MAIN = """\
Usage: %(progName)s [options] [tests] Usage: %(progName)s [options] [tests]
......
...@@ -4,6 +4,8 @@ import traceback ...@@ -4,6 +4,8 @@ import traceback
from . import util from . import util
__unittest = True
class TestResult(object): class TestResult(object):
"""Holder for test result information. """Holder for test result information.
...@@ -98,11 +100,7 @@ class TestResult(object): ...@@ -98,11 +100,7 @@ class TestResult(object):
return ''.join(traceback.format_exception(exctype, value, tb)) return ''.join(traceback.format_exception(exctype, value, tb))
def _is_relevant_tb_level(self, tb): def _is_relevant_tb_level(self, tb):
globs = tb.tb_frame.f_globals return '__unittest' in tb.tb_frame.f_globals
is_relevant = '__name__' in globs and \
globs["__name__"].startswith("unittest")
del globs
return is_relevant
def _count_relevant_tb_levels(self, tb): def _count_relevant_tb_levels(self, tb):
length = 0 length = 0
......
...@@ -5,6 +5,8 @@ import time ...@@ -5,6 +5,8 @@ import time
from . import result from . import result
__unittest = True
class _WritelnDecorator(object): class _WritelnDecorator(object):
"""Used to decorate file-like objects with a handy 'writeln' method""" """Used to decorate file-like objects with a handy 'writeln' method"""
......
...@@ -5,6 +5,8 @@ import sys ...@@ -5,6 +5,8 @@ import sys
from . import case from . import case
from . import util from . import util
__unittest = True
class BaseTestSuite(object): class BaseTestSuite(object):
"""A simple test suite that doesn't provide class or module shared fixtures. """A simple test suite that doesn't provide class or module shared fixtures.
......
"""Various utility functions.""" """Various utility functions."""
__unittest = True
def safe_repr(obj): def safe_repr(obj):
try: try:
return repr(obj) return repr(obj)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment