]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
unittest.TestLoader.loadTestsFromName honors the loader suiteClass attribute. Issue...
authorMichael Foord <fuzzyman@voidspace.org.uk>
Sun, 13 Sep 2009 17:28:35 +0000 (17:28 +0000)
committerMichael Foord <fuzzyman@voidspace.org.uk>
Sun, 13 Sep 2009 17:28:35 +0000 (17:28 +0000)
Doc/whatsnew/2.7.rst
Lib/test/test_unittest.py
Lib/unittest/loader.py

index 6089d33f544f8bfaf1e3abf58840bb0dce896330..622da3e391f723f48d4373d9a2cab3915de942c8 100644 (file)
@@ -509,6 +509,9 @@ changes, or look through the Subversion logs for all the details.
     (automatically pass or fail without checking decimal places) if the objects
     are equal.
 
+  * :meth:`loadTestsFromName` properly honors the ``suiteClass`` attribute of
+    the :class:`TestLoader`. (Fixed by Mark Roddy; :issue:`6866`.)
+
   * A new hook, :meth:`addTypeEqualityFunc` takes a type object and a
     function.  The :meth:`assertEqual` method will use the function
     when both of the objects being compared are of the specified type.
index 2fab7de9796acd1c9c179ea547becd2090af996e..79ee9827ec8002fc91937f7588a1b78bedc2f418 100644 (file)
@@ -554,6 +554,47 @@ class Test_TestLoader(TestCase):
         self.assertTrue(isinstance(suite, loader.suiteClass))
         self.assertEqual(list(suite), [testcase_1])
 
+    # "The specifier name is a ``dotted name'' that may resolve ... to
+    # ... a callable object which returns a TestCase ... instance"
+    #*****************************************************************
+    #Override the suiteClass attribute to ensure that the suiteClass
+    #attribute is used
+    def test_loadTestsFromName__callable__TestCase_instance_ProperSuiteClass(self):
+        class SubTestSuite(unittest.TestSuite):
+            pass
+        m = types.ModuleType('m')
+        testcase_1 = unittest.FunctionTestCase(lambda: None)
+        def return_TestCase():
+            return testcase_1
+        m.return_TestCase = return_TestCase
+
+        loader = unittest.TestLoader()
+        loader.suiteClass = SubTestSuite
+        suite = loader.loadTestsFromName('return_TestCase', m)
+        self.assertTrue(isinstance(suite, loader.suiteClass))
+        self.assertEqual(list(suite), [testcase_1])
+
+    # "The specifier name is a ``dotted name'' that may resolve ... to
+    # ... a test method within a test case class"
+    #*****************************************************************
+    #Override the suiteClass attribute to ensure that the suiteClass
+    #attribute is used
+    def test_loadTestsFromName__relative_testmethod_ProperSuiteClass(self):
+        class SubTestSuite(unittest.TestSuite):
+            pass
+        m = types.ModuleType('m')
+        class MyTestCase(unittest.TestCase):
+            def test(self):
+                pass
+        m.testcase_1 = MyTestCase
+
+        loader = unittest.TestLoader()
+        loader.suiteClass=SubTestSuite
+        suite = loader.loadTestsFromName('testcase_1.test', m)
+        self.assertTrue(isinstance(suite, loader.suiteClass))
+
+        self.assertEqual(list(suite), [MyTestCase('test')])
+
     # "The specifier name is a ``dotted name'' that may resolve ... to
     # ... a callable object which returns a TestCase or TestSuite instance"
     #
index 21c7ed02b196ef04aa4672c15b0aa113e9e1b040..21520f522e87dcb04c43a5689078a058b9a6950e 100644 (file)
@@ -85,7 +85,7 @@ class TestLoader(object):
         elif (isinstance(obj, types.UnboundMethodType) and
               isinstance(parent, type) and
               issubclass(parent, case.TestCase)):
-            return suite.TestSuite([parent(obj.__name__)])
+            return self.suiteClass([parent(obj.__name__)])
         elif isinstance(obj, suite.TestSuite):
             return obj
         elif hasattr(obj, '__call__'):
@@ -93,7 +93,7 @@ class TestLoader(object):
             if isinstance(test, suite.TestSuite):
                 return test
             elif isinstance(test, case.TestCase):
-                return suite.TestSuite([test])
+                return self.suiteClass([test])
             else:
                 raise TypeError("calling %s returned %s, not a test" %
                                 (obj, test))