summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2010-12-19 14:53:19 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2010-12-19 14:53:19 (GMT)
commita17f076f614222cec6ff415c940717ecbbddd9fe (patch)
tree4efd1476bda09dfe0a3fbf9120bd9f953451c2b0
parent5657ff8aa0aa9d53f92fc11cc2d4b7e23f5cb95a (diff)
downloadcpython-a17f076f614222cec6ff415c940717ecbbddd9fe.zip
cpython-a17f076f614222cec6ff415c940717ecbbddd9fe.tar.gz
cpython-a17f076f614222cec6ff415c940717ecbbddd9fe.tar.bz2
Issue 10611. SystemExit should not cause a unittest test run to exit.
-rw-r--r--Lib/unittest/case.py16
-rw-r--r--Lib/unittest/test/test_case.py52
-rw-r--r--Misc/NEWS2
3 files changed, 66 insertions, 4 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 3940daa..33ab47a 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -311,11 +311,15 @@ class TestCase(object):
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 @@ class TestCase(object):
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 @@ class TestCase(object):
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
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
index 4e9dfc6..c42d98d 100644
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -999,6 +999,58 @@ test case
# 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()
diff --git a/Misc/NEWS b/Misc/NEWS
index 19d6c41..b1b0265 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,8 @@ Core and Builtins
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,
to avoid denial of services from the other party.