diff options
author | Robert Collins <rbtcollins@hp.com> | 2015-08-28 10:36:01 +1200 |
---|---|---|
committer | Robert Collins <rbtcollins@hp.com> | 2015-08-28 10:36:01 +1200 |
commit | fd10a767a2a33aedc73de6eb6ff3dae96b35a540 (patch) | |
tree | e2b91f4bef48ae9d842de8ac0717fae454ff8578 | |
parent | a51ffd309925980704d252d5b5d9f2c954d8b8e1 (diff) | |
parent | 079fc7faff3cee1c68aee3ce0ca2c4ee18b72aab (diff) | |
download | cpython-git-fd10a767a2a33aedc73de6eb6ff3dae96b35a540.tar.gz |
Issue #21112: Fix regression in unittest.expectedFailure on subclasses.
Patch from Berker Peksag.
-rw-r--r-- | Lib/unittest/case.py | 7 | ||||
-rw-r--r-- | Lib/unittest/test/test_skipping.py | 33 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 41 insertions, 2 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index a4a0a1f31e..ac8d67ddd1 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -583,8 +583,11 @@ class TestCase(object): finally: result.stopTest(self) return - expecting_failure = getattr(testMethod, - "__unittest_expecting_failure__", False) + expecting_failure_method = getattr(testMethod, + "__unittest_expecting_failure__", False) + expecting_failure_class = getattr(self, + "__unittest_expecting_failure__", False) + expecting_failure = expecting_failure_class or expecting_failure_method outcome = _Outcome(result) try: self._outcome = outcome diff --git a/Lib/unittest/test/test_skipping.py b/Lib/unittest/test/test_skipping.py index 807510f15f..71f7b70e47 100644 --- a/Lib/unittest/test/test_skipping.py +++ b/Lib/unittest/test/test_skipping.py @@ -120,6 +120,39 @@ class Test_TestSkipping(unittest.TestCase): self.assertEqual(result.expectedFailures[0][0], test) self.assertTrue(result.wasSuccessful()) + def test_expected_failure_with_wrapped_class(self): + @unittest.expectedFailure + class Foo(unittest.TestCase): + def test_1(self): + self.assertTrue(False) + + events = [] + result = LoggingResult(events) + test = Foo("test_1") + test.run(result) + self.assertEqual(events, + ['startTest', 'addExpectedFailure', 'stopTest']) + self.assertEqual(result.expectedFailures[0][0], test) + self.assertTrue(result.wasSuccessful()) + + def test_expected_failure_with_wrapped_subclass(self): + class Foo(unittest.TestCase): + def test_1(self): + self.assertTrue(False) + + @unittest.expectedFailure + class Bar(Foo): + pass + + events = [] + result = LoggingResult(events) + test = Bar("test_1") + test.run(result) + self.assertEqual(events, + ['startTest', 'addExpectedFailure', 'stopTest']) + self.assertEqual(result.expectedFailures[0][0], test) + self.assertTrue(result.wasSuccessful()) + def test_expected_failure_subtests(self): # A failure in any subtest counts as the expected failure of the # whole test. @@ -79,6 +79,9 @@ Core and Builtins Library ------- +- Issue #21112: Fix regression in unittest.expectedFailure on subclasses. + Patch from Berker Peksag. + - Issue #24764: cgi.FieldStorage.read_multi() now ignores the Content-Length header in part headers. Patch written by Peter Landry and reviewed by Pierre Quentel. |