]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-5846: Fix deprecations for obsolete unittest functions and add tests. (GH-28382)
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 17 Sep 2021 09:09:32 +0000 (12:09 +0300)
committerGitHub <noreply@github.com>
Fri, 17 Sep 2021 09:09:32 +0000 (12:09 +0300)
Lib/unittest/__init__.py
Lib/unittest/loader.py
Lib/unittest/test/test_loader.py

index e318c635c1bccb59cb9f8972d301809325a87b1e..4b184889573940199333cf981d78a4949fe86568 100644 (file)
@@ -66,40 +66,11 @@ from .main import TestProgram, main
 from .runner import TextTestRunner, TextTestResult
 from .signals import installHandler, registerResult, removeResult, removeHandler
 # IsolatedAsyncioTestCase will be imported lazily.
+from .loader import makeSuite, getTestCaseNames, findTestCases
 
 # deprecated
 _TextTestResult = TextTestResult
 
-from .loader import (
-    makeSuite as _makeSuite,
-    findTestCases as _findTestCases,
-    getTestCaseNames as _getTestCaseNames,
-)
-
-import warnings
-def makeSuite(*args, **kwargs):
-    warnings.warn(
-        "unittest.makeSuite() is deprecated and will be removed in Python 3.13. "
-        "Please use unittest.TestLoader.loadTestsFromTestCase() instead.",
-        DeprecationWarning, stacklevel=2
-    )
-    return _makeSuite(*args, **kwargs)
-
-def getTestCaseNames(*args, **kwargs):
-    warnings.warn(
-        "unittest.getTestCaseNames() is deprecated and will be removed in Python 3.13. "
-        "Please use unittest.TestLoader.getTestCaseNames() instead.",
-        DeprecationWarning, stacklevel=2
-    )
-    return _getTestCaseNames(*args, **kwargs)
-
-def findTestCases(*args, **kwargs):
-    warnings.warn(
-        "unittest.findTestCases() is deprecated and will be removed in Python 3.13. "
-        "Please use unittest.TestLoader.loadTestsFromModule() instead.",
-        DeprecationWarning, stacklevel=2
-    )
-    return _findTestCases(*args, **kwargs)
 
 # There are no tests here, so don't try to run anything discovered from
 # introspecting the symbols (e.g. FunctionTestCase). Instead, all our
index ba7105e1ad6039ffbd3f9ea61566d1e6e204954d..a4017b4aead17d6681ff93f5e708adc216d87256 100644 (file)
@@ -494,6 +494,9 @@ class TestLoader(object):
 defaultTestLoader = TestLoader()
 
 
+# These functions are considered obsolete for long time.
+# They will be removed in Python 3.13.
+
 def _makeLoader(prefix, sortUsing, suiteClass=None, testNamePatterns=None):
     loader = TestLoader()
     loader.sortTestMethodsUsing = sortUsing
@@ -504,14 +507,32 @@ def _makeLoader(prefix, sortUsing, suiteClass=None, testNamePatterns=None):
     return loader
 
 def getTestCaseNames(testCaseClass, prefix, sortUsing=util.three_way_cmp, testNamePatterns=None):
+    import warnings
+    warnings.warn(
+        "unittest.getTestCaseNames() is deprecated and will be removed in Python 3.13. "
+        "Please use unittest.TestLoader.getTestCaseNames() instead.",
+        DeprecationWarning, stacklevel=2
+    )
     return _makeLoader(prefix, sortUsing, testNamePatterns=testNamePatterns).getTestCaseNames(testCaseClass)
 
 def makeSuite(testCaseClass, prefix='test', sortUsing=util.three_way_cmp,
               suiteClass=suite.TestSuite):
+    import warnings
+    warnings.warn(
+        "unittest.makeSuite() is deprecated and will be removed in Python 3.13. "
+        "Please use unittest.TestLoader.loadTestsFromTestCase() instead.",
+        DeprecationWarning, stacklevel=2
+    )
     return _makeLoader(prefix, sortUsing, suiteClass).loadTestsFromTestCase(
         testCaseClass)
 
 def findTestCases(module, prefix='test', sortUsing=util.three_way_cmp,
                   suiteClass=suite.TestSuite):
+    import warnings
+    warnings.warn(
+        "unittest.findTestCases() is deprecated and will be removed in Python 3.13. "
+        "Please use unittest.TestLoader.loadTestsFromModule() instead.",
+        DeprecationWarning, stacklevel=2
+    )
     return _makeLoader(prefix, sortUsing, suiteClass).loadTestsFromModule(\
         module)
index bc54bf0553528d0ab239515cabb06b42a19a269c..90e208182719b2ed3c21a3f7783ab4a4633bc17f 100644 (file)
@@ -1591,5 +1591,52 @@ class Test_TestLoader(unittest.TestCase):
         self.assertEqual(loader.getTestCaseNames(Foo), test_names)
 
 
+class TestObsoleteFunctions(unittest.TestCase):
+    class MyTestSuite(unittest.TestSuite):
+        pass
+
+    class MyTestCase(unittest.TestCase):
+        def check_1(self): pass
+        def check_2(self): pass
+        def test(self): pass
+
+    @staticmethod
+    def reverse_three_way_cmp(a, b):
+        return unittest.util.three_way_cmp(b, a)
+
+    def test_getTestCaseNames(self):
+        with self.assertWarns(DeprecationWarning) as w:
+            tests = unittest.getTestCaseNames(self.MyTestCase,
+                prefix='check', sortUsing=self.reverse_three_way_cmp,
+                testNamePatterns=None)
+        self.assertEqual(w.warnings[0].filename, __file__)
+        self.assertEqual(tests, ['check_2', 'check_1'])
+
+    def test_makeSuite(self):
+        with self.assertWarns(DeprecationWarning) as w:
+            suite = unittest.makeSuite(self.MyTestCase,
+                    prefix='check', sortUsing=self.reverse_three_way_cmp,
+                    suiteClass=self.MyTestSuite)
+        self.assertEqual(w.warnings[0].filename, __file__)
+        self.assertIsInstance(suite, self.MyTestSuite)
+        expected = self.MyTestSuite([self.MyTestCase('check_2'),
+                                     self.MyTestCase('check_1')])
+        self.assertEqual(suite, expected)
+
+    def test_findTestCases(self):
+        m = types.ModuleType('m')
+        m.testcase_1 = self.MyTestCase
+
+        with self.assertWarns(DeprecationWarning) as w:
+            suite = unittest.findTestCases(m,
+                prefix='check', sortUsing=self.reverse_three_way_cmp,
+                suiteClass=self.MyTestSuite)
+        self.assertEqual(w.warnings[0].filename, __file__)
+        self.assertIsInstance(suite, self.MyTestSuite)
+        expected = [self.MyTestSuite([self.MyTestCase('check_2'),
+                                      self.MyTestCase('check_1')])]
+        self.assertEqual(list(suite), expected)
+
+
 if __name__ == "__main__":
     unittest.main()