summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Collins <rbtcollins@hp.com>2015-08-27 22:34:51 (GMT)
committerRobert Collins <rbtcollins@hp.com>2015-08-27 22:34:51 (GMT)
commited599b7c84ee216866f4f8a69b5f25dbc5cb4618 (patch)
treeecdcb5c10d9e5b4d387dc354ddeed395653a2601
parent5e580da0b6a75c3cafecb0306c3f166d1e5d3edc (diff)
downloadcpython-ed599b7c84ee216866f4f8a69b5f25dbc5cb4618.zip
cpython-ed599b7c84ee216866f4f8a69b5f25dbc5cb4618.tar.gz
cpython-ed599b7c84ee216866f4f8a69b5f25dbc5cb4618.tar.bz2
Issue #21112: Fix regression in unittest.expectedFailure on subclasses.
Patch from Berker Peksag.
-rw-r--r--Lib/unittest/case.py7
-rw-r--r--Lib/unittest/test/test_skipping.py33
-rw-r--r--Misc/NEWS3
3 files changed, 41 insertions, 2 deletions
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 69888a5..8a9f1c0 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -563,8 +563,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 807510f..71f7b70 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.
diff --git a/Misc/NEWS b/Misc/NEWS
index f30b75b..b74b15c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -75,6 +75,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.