[Python-checkins] distutils2: test loader with dotted syntax now working

tarek.ziade python-checkins at python.org
Sun Sep 19 10:20:21 CEST 2010


tarek.ziade pushed 10530a984ad7 to distutils2:

http://hg.python.org/distutils2/rev/10530a984ad7
changeset:   602:10530a984ad7
user:        Konrad Delong <konryd at gmail.com>
date:        Tue Jul 27 14:56:41 2010 +0200
summary:     test loader with dotted syntax now working
files:       src/distutils2/command/test.py, src/distutils2/tests/dists/custom_loader/myowntestmodule.py, src/distutils2/tests/dists/custom_loader/setup.cfg, src/distutils2/tests/dists/custom_loader/setup.py, src/distutils2/tests/test_test.py

diff --git a/src/distutils2/command/test.py b/src/distutils2/command/test.py
--- a/src/distutils2/command/test.py
+++ b/src/distutils2/command/test.py
@@ -2,16 +2,39 @@
 from distutils2.core import Command 
 import unittest
 
+def get_loader_instance(dotted_path):
+    if dotted_path is None:
+        return None
+    module_name, rest = dotted_path.split('.')[0], dotted_path.split('.')[1:]
+    while True:
+        try:
+            ret = __import__(module_name)
+            break
+        except ImportError:
+            if rest == []:
+                return None
+            module_name += ('.' + rest[0])
+            rest = rest[1:]
+    while rest:
+        try:
+            ret = getattr(ret, rest.pop(0))
+        except AttributeError:
+            return None
+    return ret()
+
 class test(Command):
 
     description = "" # TODO
     user_options = [
-        ('test-suite=','s',
+        ('test-suite=', 's',
             "Test suite to run (e.g. 'some_module.test_suite')"),
+        ('test-loader=', None,
+            "Test loader to be used to load the test suite."),
     ]
     
     def initialize_options(self):
-        self.test_suite = None
+        self.test_suite  = None
+        self.test_loader = None
     
     def finalize_options(self):
         self.build_lib = self.get_finalized_command("build").build_lib
@@ -21,9 +44,15 @@
         try:
             if self.distribution.has_ext_modules():
                 build = self.get_reinitialized_command('build')
-                build.inplace = 1
+                build.inplace = 1 # TODO - remove make sure it's needed
                 self.run_command('build')
                 os.chdir(self.build_lib)
-            unittest.main(module=self.test_suite, argv=sys.argv[:1])
+            args = {"module": self.test_suite,
+                    "argv": sys.argv[:1],
+                    "testLoader": get_loader_instance(self.test_loader)
+            }
+            if args['testLoader'] is None:
+                del args['testLoader']
+            unittest.main(**args)
         finally:
             os.chdir(prev_cwd)
diff --git a/src/distutils2/tests/dists/custom_loader/myowntestmodule.py b/src/distutils2/tests/dists/custom_loader/myowntestmodule.py
new file mode 100644
--- /dev/null
+++ b/src/distutils2/tests/dists/custom_loader/myowntestmodule.py
@@ -0,0 +1,9 @@
+import unittest
+class Loader(object):
+    def loadTestsFromModule(self, names, module=None):
+        class SomeTest(unittest.TestCase):
+            def test_blah(self):
+                self.fail("horribly")
+        return unittest.makeSuite(SomeTest)
+    def __repr__(self):
+        return 'YO'
diff --git a/src/distutils2/tests/dists/custom_loader/setup.cfg b/src/distutils2/tests/dists/custom_loader/setup.cfg
new file mode 100644
--- /dev/null
+++ b/src/distutils2/tests/dists/custom_loader/setup.cfg
@@ -0,0 +1,2 @@
+[test]
+test-loader = myowntestmodule.Loader
diff --git a/src/distutils2/tests/dists/custom_loader/setup.py b/src/distutils2/tests/dists/custom_loader/setup.py
new file mode 100644
--- /dev/null
+++ b/src/distutils2/tests/dists/custom_loader/setup.py
@@ -0,0 +1,5 @@
+from distutils2.core import setup
+setup(name='somedist',
+      version='0.1',
+      py_modules=['myowntestmodule', 'somemod'],
+)
diff --git a/src/distutils2/tests/test_test.py b/src/distutils2/tests/test_test.py
--- a/src/distutils2/tests/test_test.py
+++ b/src/distutils2/tests/test_test.py
@@ -75,7 +75,9 @@
         self.assertTrue(any(x.startswith('lib') for x in os.listdir(join(self.pkg_dir, 'build'))))
 
     def test_custom_test_loader(self):
-        pass
+        self.pkg_dir = self.prepare_dist("custom_loader")
+        output = self.run_with_dist_cwd(self.pkg_dir)
+        self.assert_re_match(EXPECTED_OUTPUT_RE, output)
 
     def _test_works_with_2to3(self):
         pass

--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list