Avoid exc_info cycles in several places and comment on trickier ones
This commit is contained in:
@@ -187,9 +187,7 @@ class TestProgram(object):
|
|||||||
self.testNames = (self.defaultTest,)
|
self.testNames = (self.defaultTest,)
|
||||||
self.createTests()
|
self.createTests()
|
||||||
except getopt.error:
|
except getopt.error:
|
||||||
exc_info = sys.exc_info()
|
self.usageExit(sys.exc_info()[1])
|
||||||
msg = exc_info[1]
|
|
||||||
self.usageExit(msg)
|
|
||||||
|
|
||||||
def createTests(self):
|
def createTests(self):
|
||||||
if self.testNames is None:
|
if self.testNames is None:
|
||||||
|
|||||||
@@ -146,8 +146,11 @@ class RunTest(object):
|
|||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
exc_info = sys.exc_info()
|
exc_info = sys.exc_info()
|
||||||
e = exc_info[1]
|
try:
|
||||||
self.case.onException(exc_info)
|
e = exc_info[1]
|
||||||
|
self.case.onException(exc_info)
|
||||||
|
finally:
|
||||||
|
del exc_info
|
||||||
for exc_class, handler in self.handlers:
|
for exc_class, handler in self.handlers:
|
||||||
if isinstance(e, exc_class):
|
if isinstance(e, exc_class):
|
||||||
self._exceptions.append(e)
|
self._exceptions.append(e)
|
||||||
|
|||||||
@@ -179,8 +179,11 @@ class TestCase(unittest.TestCase):
|
|||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
exc_info = sys.exc_info()
|
exc_info = sys.exc_info()
|
||||||
self._report_traceback(exc_info)
|
try:
|
||||||
last_exception = exc_info[1]
|
self._report_traceback(exc_info)
|
||||||
|
last_exception = exc_info[1]
|
||||||
|
finally:
|
||||||
|
del exc_info
|
||||||
return last_exception
|
return last_exception
|
||||||
|
|
||||||
def addCleanup(self, function, *arguments, **keywordArguments):
|
def addCleanup(self, function, *arguments, **keywordArguments):
|
||||||
@@ -319,9 +322,14 @@ class TestCase(unittest.TestCase):
|
|||||||
try:
|
try:
|
||||||
predicate(*args, **kwargs)
|
predicate(*args, **kwargs)
|
||||||
except self.failureException:
|
except self.failureException:
|
||||||
|
# GZ 2010-08-12: Don't know how to avoid exc_info cycle as the new
|
||||||
|
# unittest _ExpectedFailure wants old traceback
|
||||||
exc_info = sys.exc_info()
|
exc_info = sys.exc_info()
|
||||||
self._report_traceback(exc_info)
|
try:
|
||||||
raise _ExpectedFailure(exc_info)
|
self._report_traceback(exc_info)
|
||||||
|
raise _ExpectedFailure(exc_info)
|
||||||
|
finally:
|
||||||
|
del exc_info
|
||||||
else:
|
else:
|
||||||
raise _UnexpectedSuccess(reason)
|
raise _UnexpectedSuccess(reason)
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ __all__ = [
|
|||||||
from testtools import TestResult
|
from testtools import TestResult
|
||||||
|
|
||||||
|
|
||||||
|
# GZ 2010-08-12: Don't do this, pointlessly creates an exc_info cycle
|
||||||
try:
|
try:
|
||||||
raise Exception
|
raise Exception
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
Reference in New Issue
Block a user