mirror of
https://github.com/python/cpython.git
synced 2025-08-19 08:11:46 +00:00
Issue 10611. SystemExit should not cause a unittest test run to exit.
This commit is contained in:
parent
5657ff8aa0
commit
a17f076f61
3 changed files with 66 additions and 4 deletions
|
@ -311,11 +311,15 @@ class TestCase(object):
|
||||||
self.setUp()
|
self.setUp()
|
||||||
except SkipTest as e:
|
except SkipTest as e:
|
||||||
self._addSkip(result, str(e))
|
self._addSkip(result, str(e))
|
||||||
except Exception:
|
except KeyboardInterrupt:
|
||||||
|
raise
|
||||||
|
except:
|
||||||
result.addError(self, sys.exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
testMethod()
|
testMethod()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
raise
|
||||||
except self.failureException:
|
except self.failureException:
|
||||||
result.addFailure(self, sys.exc_info())
|
result.addFailure(self, sys.exc_info())
|
||||||
except _ExpectedFailure as e:
|
except _ExpectedFailure as e:
|
||||||
|
@ -336,14 +340,16 @@ class TestCase(object):
|
||||||
result.addFailure(self, sys.exc_info())
|
result.addFailure(self, sys.exc_info())
|
||||||
except SkipTest as e:
|
except SkipTest as e:
|
||||||
self._addSkip(result, str(e))
|
self._addSkip(result, str(e))
|
||||||
except Exception:
|
except:
|
||||||
result.addError(self, sys.exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
else:
|
else:
|
||||||
success = True
|
success = True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.tearDown()
|
self.tearDown()
|
||||||
except Exception:
|
except KeyboardInterrupt:
|
||||||
|
raise
|
||||||
|
except:
|
||||||
result.addError(self, sys.exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
success = False
|
success = False
|
||||||
|
|
||||||
|
@ -367,7 +373,9 @@ class TestCase(object):
|
||||||
function, args, kwargs = self._cleanups.pop(-1)
|
function, args, kwargs = self._cleanups.pop(-1)
|
||||||
try:
|
try:
|
||||||
function(*args, **kwargs)
|
function(*args, **kwargs)
|
||||||
except Exception:
|
except KeyboardInterrupt:
|
||||||
|
raise
|
||||||
|
except:
|
||||||
ok = False
|
ok = False
|
||||||
result.addError(self, sys.exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
return ok
|
return ok
|
||||||
|
|
|
@ -999,6 +999,58 @@ test case
|
||||||
# This shouldn't blow up
|
# This shouldn't blow up
|
||||||
deepcopy(test)
|
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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -22,6 +22,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #10611: SystemExit should not cause a unittest test run to exit.
|
||||||
|
|
||||||
- Issue #6791: Limit header line length (to 65535 bytes) in http.client,
|
- Issue #6791: Limit header line length (to 65535 bytes) in http.client,
|
||||||
to avoid denial of services from the other party.
|
to avoid denial of services from the other party.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue