Am Samstag, den 05.04.2008, 19:53 -0400 schrieb Phillip J. Eby:
> At 05:15 PM 4/5/2008 +0200, Klaus Zimmermann wrote:
> >Hi all,
> >
> >for our nightly build system I needed the capability to use a different
> >test runner, namely one that outputs junit compatible xml files.
> >In order to support that through the setup.py test command I hacked on
> >setuptools.
> >
> >Is there a simpler way to do this?
> >If not you might want to consider attached patch for addition
> >(Should be against latest svn.)
> 
> Add documentation to the patch and you've got yourself a deal.  :)

Updated patch attached.
Have fun,
Klaus
diff --git a/setup.py b/setup.py
index 4a73beb..813b037 100755
--- a/setup.py
+++ b/setup.py
@@ -53,6 +53,7 @@ setup(
             "include_package_data = setuptools.dist:assert_bool",
             "dependency_links     = setuptools.dist:assert_string_list",
             "test_loader          = setuptools.dist:check_importable",
+            "test_runner          = setuptools.dist:check_importable",
         ],
         "egg_info.writers": [
             "PKG-INFO = setuptools.command.egg_info:write_pkg_info",
diff --git a/setuptools.egg-info/entry_points.txt b/setuptools.egg-info/entry_points.txt
index f7367e0..84f8f83 100755
--- a/setuptools.egg-info/entry_points.txt
+++ b/setuptools.egg-info/entry_points.txt
@@ -40,6 +40,7 @@ svn_cvs = setuptools.command.sdist:_default_revctrl
 dependency_links = setuptools.dist:assert_string_list
 entry_points = setuptools.dist:check_entry_points
 extras_require = setuptools.dist:check_extras
+test_runner = setuptools.dist:check_importable
 package_data = setuptools.dist:check_package_data
 install_requires = setuptools.dist:check_requirements
 include_package_data = setuptools.dist:assert_bool
diff --git a/setuptools.txt b/setuptools.txt
index a5ef502..88542a2 100755
--- a/setuptools.txt
+++ b/setuptools.txt
@@ -388,6 +388,14 @@ unless you need the associated ``setuptools`` feature.
     as long as you use the ``tests_require`` option to ensure that the package
     containing the loader class is available when the ``test`` command is run.
 
+.. _test_runner:
+
+``test_runner``
+    If you want to use another test runner, this can be specified here.
+    Format is the same as for ``test_loader``_, i.e. entry point format.
+    The runner must be instatiable without arguments and must be usable as a
+    ``unittest`` test runner.
+
 ``eager_resources``
     A list of strings naming resources that should be extracted together, if
     any of them is needed, or if any C extensions included in the project are
@@ -2263,7 +2271,7 @@ By default, tests will be run in the "verbose" mode of the ``unittest``
 package's text test runner, but you can get the "quiet" mode (just dots) if
 you supply the ``-q`` or ``--quiet`` option, either as a global option to
 the setup script (e.g. ``setup.py -q test``) or as an option for the ``test``
-command itself (e.g. ``setup.py test -q``).  There is one other option
+command itself (e.g. ``setup.py test -q``).  Other options are
 available:
 
 ``--test-suite=NAME, -s NAME``
@@ -2279,6 +2287,11 @@ available:
     If you did not set a ``test_suite`` in your ``setup()`` call, and do not
     provide a ``--test-suite`` option, an error will occur.
 
+``--test-runner=NAME, -r NAME``
+    Specify the test runner to use. The default can be set as an argument to
+    ``setup()``. See ``test_runner``_. If this is not set the standard 
+    ``unittest.TextTestRunner`` will be used.
+
 
 .. _upload:
 
diff --git a/setuptools/command/test.py b/setuptools/command/test.py
index db918da..6fcf1df 100644
--- a/setuptools/command/test.py
+++ b/setuptools/command/test.py
@@ -49,9 +49,11 @@ class test(Command):
         ('test-module=','m', "Run 'test_suite' in specified module"),
         ('test-suite=','s',
             "Test suite to run (e.g. 'some_module.test_suite')"),
+        ('test-runner=','r', "Test runner to use"),
     ]
 
     def initialize_options(self):
+        self.test_runner = None
         self.test_suite = None
         self.test_module = None
         self.test_loader = None
@@ -77,7 +79,8 @@ class test(Command):
             self.test_loader = getattr(self.distribution,'test_loader',None)
         if self.test_loader is None:
             self.test_loader = "setuptools.command.test:ScanningLoader"
-
+        if self.test_runner is None:
+            self.test_runner = getattr(self.distribution,'test_runner',None)
 
 
     def with_project_on_sys_path(self, func):
@@ -125,40 +128,16 @@ class test(Command):
         import unittest
         loader_ep = EntryPoint.parse("x="+self.test_loader)
         loader_class = loader_ep.load(require=False)
-        unittest.main(
-            None, None, [unittest.__file__]+self.test_args,
-            testLoader = loader_class()
-        )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+        if self.test_runner == None:
+            unittest.main(
+                None, None, [unittest.__file__]+self.test_args,
+                testLoader = loader_class()
+            )
+        else:
+            runner_ep = EntryPoint.parse("x="+self.test_runner)
+            runner_class = runner_ep.load(require=False)
+            unittest.main(
+                None, None, [unittest.__file__]+self.test_args,
+                testRunner = runner_class(),
+                testLoader = loader_class()
+            )
_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to