]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #21112: Fix regression in unittest.expectedFailure on subclasses.
authorRobert Collins <rbtcollins@hp.com>
Thu, 27 Aug 2015 22:34:51 +0000 (10:34 +1200)
committerRobert Collins <rbtcollins@hp.com>
Thu, 27 Aug 2015 22:34:51 +0000 (10:34 +1200)
Patch from Berker Peksag.

Lib/unittest/case.py
Lib/unittest/test/test_skipping.py
Misc/NEWS

index 69888a5a688c84cc8c8bb633342a64cab3eabd7d..8a9f1c0a9d7b6ed8e0e5c06cb49a0b4b54b77cbc 100644 (file)
@@ -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
index 807510f15f3ea6a42aef74618d05ecd47287c5cf..71f7b70e479d2e508c242fa8102a0676cf32b5ad 100644 (file)
@@ -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.
index f30b75bde3433d8de05e01e68637014110a18b68..b74b15ce18f56000edb382223b52ea010aa57e5a 100644 (file)
--- 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.