Bug 941158 - Honour expected failures in setUp or tearDown. r=jgriffin

This commit is contained in:
Andreas Tolfsen 2014-02-06 14:57:29 -05:00
parent be07f46d64
commit 0096017c5d

View File

@ -99,6 +99,18 @@ class CommonTestCase(unittest.TestCase):
result.addSuccess(self)
def run(self, result=None):
# Bug 967566 suggests refactoring run, which would hopefully
# mean getting rid of this inner function, which only sits
# here to reduce code duplication:
def expected_failure(result, exc_info):
addExpectedFailure = getattr(result, "addExpectedFailure", None)
if addExpectedFailure is not None:
addExpectedFailure(self, exc_info)
else:
warnings.warn("TestResult has no addExpectedFailure method, "
"reporting as passes", RuntimeWarning)
result.addSuccess(self)
self.start_time = time.time()
orig_result = result
if result is None:
@ -124,11 +136,19 @@ class CommonTestCase(unittest.TestCase):
try:
success = False
try:
self.setUp()
if self.expected == "fail":
try:
self.setUp()
except Exception:
raise _ExpectedFailure(sys.exc_info())
else:
self.setUp()
except SkipTest as e:
self._addSkip(result, str(e))
except KeyboardInterrupt:
raise
except _ExpectedFailure as e:
expected_failure(result, e.exc_info)
except:
result.addError(self, sys.exc_info())
else:
@ -136,7 +156,7 @@ class CommonTestCase(unittest.TestCase):
if self.expected == 'fail':
try:
testMethod()
except Exception:
except:
raise _ExpectedFailure(sys.exc_info())
raise _UnexpectedSuccess
else:
@ -148,13 +168,7 @@ class CommonTestCase(unittest.TestCase):
except self.failureException:
result.addFailure(self, sys.exc_info())
except _ExpectedFailure as e:
addExpectedFailure = getattr(result, 'addExpectedFailure', None)
if addExpectedFailure is not None:
addExpectedFailure(self, e.exc_info)
else:
warnings.warn("TestResult has no addExpectedFailure method, reporting as passes",
RuntimeWarning)
result.addSuccess(self)
expected_failure(result, e.exc_info)
except _UnexpectedSuccess:
addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None)
if addUnexpectedSuccess is not None:
@ -170,9 +184,17 @@ class CommonTestCase(unittest.TestCase):
else:
success = True
try:
self.tearDown()
if self.expected == "fail":
try:
self.tearDown()
except:
raise _ExpectedFailure(sys.exc_info())
else:
self.tearDown()
except KeyboardInterrupt:
raise
except _ExpectedFailure as e:
expected_failure(result, e.exc_info)
except:
result.addError(self, sys.exc_info())
success = False