diff options
author | Michael Foord <fuzzyman@voidspace.org.uk> | 2010-12-19 14:53:19 (GMT) |
---|---|---|
committer | Michael Foord <fuzzyman@voidspace.org.uk> | 2010-12-19 14:53:19 (GMT) |
commit | a17f076f614222cec6ff415c940717ecbbddd9fe (patch) | |
tree | 4efd1476bda09dfe0a3fbf9120bd9f953451c2b0 | |
parent | 5657ff8aa0aa9d53f92fc11cc2d4b7e23f5cb95a (diff) | |
download | cpython-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.py | 16 | ||||
-rw-r--r-- | Lib/unittest/test/test_case.py | 52 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
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() @@ -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. |