aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/command/test.py
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2006-03-28 22:40:57 +0000
committerPJ Eby <distutils-sig@python.org>2006-03-28 22:40:57 +0000
commitfb76e7210334ecbadcabfb1549e9df40c138b746 (patch)
tree1f3e6cd64a6063145a55a56415756b01c6190c1e /setuptools/command/test.py
parentc1294e1d0218322a1e3457897198837a071f2271 (diff)
downloadexternal_python_setuptools-fb76e7210334ecbadcabfb1549e9df40c138b746.tar.gz
external_python_setuptools-fb76e7210334ecbadcabfb1549e9df40c138b746.tar.bz2
external_python_setuptools-fb76e7210334ecbadcabfb1549e9df40c138b746.zip
Enhanced test loader to scan packages as well as modules, and call
``additional_tests()`` if present to get non-unittest tests. --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4043412
Diffstat (limited to 'setuptools/command/test.py')
-rw-r--r--setuptools/command/test.py49
1 files changed, 45 insertions, 4 deletions
diff --git a/setuptools/command/test.py b/setuptools/command/test.py
index 31f1ae40..30226866 100644
--- a/setuptools/command/test.py
+++ b/setuptools/command/test.py
@@ -2,6 +2,42 @@ from setuptools import Command
from distutils.errors import DistutilsOptionError
import sys
from pkg_resources import *
+from unittest import TestLoader, main
+
+class ScanningLoader(TestLoader):
+
+ def loadTestsFromModule(self, module):
+ """Return a suite of all tests cases contained in the given module
+
+ If the module is a package, load tests from all the modules in it.
+ If the module has an ``additional_tests`` function, call it and add
+ the return value to the tests.
+ """
+
+ tests = [TestLoader.loadTestsFromModule(self,module)]
+
+ if hasattr(module, "additional_tests"):
+ tests.append(module.additional_tests())
+
+ if hasattr(module, '__path__'):
+ for file in resource_listdir(module.__name__, ''):
+ if file.endswith('.py') and file!='__init__.py':
+ submodule = module.__name__+'.'+file[:-3]
+ else:
+ if resource_exists(
+ module.__name__, file+'/__init__.py'
+ ):
+ submodule = module.__name__+'.'+file
+ else:
+ continue
+ tests.append(self.loadTestsFromName(submodule))
+
+ if len(tests)>1:
+ return self.suiteClass(tests)
+ else:
+ return tests[0] # don't create a nested suite for only one return
+
+
class test(Command):
@@ -39,6 +75,11 @@ class test(Command):
if self.verbose:
self.test_args.insert(0,'--verbose')
+
+
+
+
+
def run(self):
# Ensure metadata is up-to-date
self.run_command('egg_info')
@@ -70,10 +111,10 @@ class test(Command):
dist = Distribution(path_item, metadata, project_name=ei_cmd.egg_name)
working_set.add(dist)
require(str(dist.as_requirement()))
- unittest.main(None, None, [unittest.__file__]+self.test_args)
-
-
-
+ unittest.main(
+ None, None, [unittest.__file__]+self.test_args,
+ testLoader = ScanningLoader()
+ )