Skip to content

Commit ed599b7

Browse files
committed
Issue #21112: Fix regression in unittest.expectedFailure on subclasses.
Patch from Berker Peksag.
1 parent 5e580da commit ed599b7

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

Lib/unittest/case.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,8 +563,11 @@ def run(self, result=None):
563563
finally:
564564
result.stopTest(self)
565565
return
566-
expecting_failure = getattr(testMethod,
567-
"__unittest_expecting_failure__", False)
566+
expecting_failure_method = getattr(testMethod,
567+
"__unittest_expecting_failure__", False)
568+
expecting_failure_class = getattr(self,
569+
"__unittest_expecting_failure__", False)
570+
expecting_failure = expecting_failure_class or expecting_failure_method
568571
outcome = _Outcome(result)
569572
try:
570573
self._outcome = outcome

Lib/unittest/test/test_skipping.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,39 @@ def test_die(self):
120120
self.assertEqual(result.expectedFailures[0][0], test)
121121
self.assertTrue(result.wasSuccessful())
122122

123+
def test_expected_failure_with_wrapped_class(self):
124+
@unittest.expectedFailure
125+
class Foo(unittest.TestCase):
126+
def test_1(self):
127+
self.assertTrue(False)
128+
129+
events = []
130+
result = LoggingResult(events)
131+
test = Foo("test_1")
132+
test.run(result)
133+
self.assertEqual(events,
134+
['startTest', 'addExpectedFailure', 'stopTest'])
135+
self.assertEqual(result.expectedFailures[0][0], test)
136+
self.assertTrue(result.wasSuccessful())
137+
138+
def test_expected_failure_with_wrapped_subclass(self):
139+
class Foo(unittest.TestCase):
140+
def test_1(self):
141+
self.assertTrue(False)
142+
143+
@unittest.expectedFailure
144+
class Bar(Foo):
145+
pass
146+
147+
events = []
148+
result = LoggingResult(events)
149+
test = Bar("test_1")
150+
test.run(result)
151+
self.assertEqual(events,
152+
['startTest', 'addExpectedFailure', 'stopTest'])
153+
self.assertEqual(result.expectedFailures[0][0], test)
154+
self.assertTrue(result.wasSuccessful())
155+
123156
def test_expected_failure_subtests(self):
124157
# A failure in any subtest counts as the expected failure of the
125158
# whole test.

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ Core and Builtins
7575
Library
7676
-------
7777

78+
- Issue #21112: Fix regression in unittest.expectedFailure on subclasses.
79+
Patch from Berker Peksag.
80+
7881
- Issue #24764: cgi.FieldStorage.read_multi() now ignores the Content-Length
7982
header in part headers. Patch written by Peter Landry and reviewed by Pierre
8083
Quentel.

0 commit comments

Comments
 (0)