mirror of https://github.com/python/cpython.git
Issue 10611. SystemExit should not cause a unittest test run to exit.
This commit is contained in:
parent
5657ff8aa0
commit
a17f076f61
|
@ -311,11 +311,15 @@ def run(self, result=None):
|
|||
self.setUp()
|
||||
except SkipTest as e:
|
||||
self._addSkip(result, str(e))
|
||||
except Exception:
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
result.addError(self, sys.exc_info())
|
||||
else:
|
||||
try:
|
||||
testMethod()
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except self.failureException:
|
||||
result.addFailure(self, sys.exc_info())
|
||||
except _ExpectedFailure as e:
|
||||
|
@ -336,14 +340,16 @@ def run(self, result=None):
|
|||
result.addFailure(self, sys.exc_info())
|
||||
except SkipTest as e:
|
||||
self._addSkip(result, str(e))
|
||||
except Exception:
|
||||
except:
|
||||
result.addError(self, sys.exc_info())
|
||||
else:
|
||||
success = True
|
||||
|
||||
try:
|
||||
self.tearDown()
|
||||
except Exception:
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
result.addError(self, sys.exc_info())
|
||||
success = False
|
||||
|
||||
|
@ -367,7 +373,9 @@ def doCleanups(self):
|
|||
function, args, kwargs = self._cleanups.pop(-1)
|
||||
try:
|
||||
function(*args, **kwargs)
|
||||
except Exception:
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
ok = False
|
||||
result.addError(self, sys.exc_info())
|
||||
return ok
|
||||
|
|
|
@ -999,6 +999,58 @@ def testNothing(self):
|
|||
# This shouldn't blow up
|
||||
deepcopy(test)
|
||||
|
||||
def testKeyboardInterrupt(self):
|
||||
def _raise(self=None):
|
||||
raise KeyboardInterrupt
|
||||
def nothing(self):
|
||||
pass
|
||||
|
||||
class Test1(unittest.TestCase):
|
||||
test_something = _raise
|
||||
|
||||
class Test2(unittest.TestCase):
|
||||
setUp = _raise
|
||||
test_something = nothing
|
||||
|
||||
class Test3(unittest.TestCase):
|
||||
test_something = nothing
|
||||
tearDown = _raise
|
||||
|
||||
class Test4(unittest.TestCase):
|
||||
def test_something(self):
|
||||
self.addCleanup(_raise)
|
||||
|
||||
for klass in (Test1, Test2, Test3, Test4):
|
||||
with self.assertRaises(KeyboardInterrupt):
|
||||
klass('test_something').run()
|
||||
|
||||
def testSystemExit(self):
|
||||
def _raise(self=None):
|
||||
raise SystemExit
|
||||
def nothing(self):
|
||||
pass
|
||||
|
||||
class Test1(unittest.TestCase):
|
||||
test_something = _raise
|
||||
|
||||
class Test2(unittest.TestCase):
|
||||
setUp = _raise
|
||||
test_something = nothing
|
||||
|
||||
class Test3(unittest.TestCase):
|
||||
test_something = nothing
|
||||
tearDown = _raise
|
||||
|
||||
class Test4(unittest.TestCase):
|
||||
def test_something(self):
|
||||
self.addCleanup(_raise)
|
||||
|
||||
for klass in (Test1, Test2, Test3, Test4):
|
||||
result = unittest.TestResult()
|
||||
klass('test_something').run(result)
|
||||
self.assertEqual(len(result.errors), 1)
|
||||
self.assertEqual(result.testsRun, 1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue