changeset: 97533:ac3f1a6b1de2 branch: 3.5 parent: 97530:563d6f9fecfe parent: 97532:a90c6d608b85 user: Robert Collins date: Fri Aug 28 10:35:14 2015 +1200 files: Lib/unittest/case.py Misc/NEWS description: Issue #21112: Fix regression in unittest.expectedFailure on subclasses. Patch from Berker Peksag. diff -r 563d6f9fecfe -r ac3f1a6b1de2 Lib/unittest/case.py --- a/Lib/unittest/case.py Thu Aug 27 15:55:24 2015 -0500 +++ b/Lib/unittest/case.py Fri Aug 28 10:35:14 2015 +1200 @@ -583,8 +583,11 @@ 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 -r 563d6f9fecfe -r ac3f1a6b1de2 Lib/unittest/test/test_skipping.py --- a/Lib/unittest/test/test_skipping.py Thu Aug 27 15:55:24 2015 -0500 +++ b/Lib/unittest/test/test_skipping.py Fri Aug 28 10:35:14 2015 +1200 @@ -120,6 +120,39 @@ 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. diff -r 563d6f9fecfe -r ac3f1a6b1de2 Misc/NEWS --- a/Misc/NEWS Thu Aug 27 15:55:24 2015 -0500 +++ b/Misc/NEWS Fri Aug 28 10:35:14 2015 +1200 @@ -14,6 +14,9 @@ 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.