diff --git a/setup.py b/setup.py index baa867676dd..310d0e48564 100755 --- a/setup.py +++ b/setup.py @@ -4,6 +4,9 @@ The setup script for salt ''' import os import sys +import unittest +from distutils import log +from distutils.cmd import Command from distutils.core import setup from distutils.extension import Extension from distutils.sysconfig import get_python_lib, PREFIX @@ -21,8 +24,53 @@ if os.environ.has_key('SYSCONFDIR'): else: etc_path = os.path.join(os.path.dirname(PREFIX), 'etc') +class UnitTest(Command): + description = "run unit tests" + user_options = [] + + def initialize_options(self): + self.test_dirs = None + + def finalize_options(self): + if self.test_dirs is None: + self.test_dirs = ["test"] + + def run(self): + errors = 0 + failures = 0 + for path in self.test_dirs: + for root, dirs, files in os.walk(path): + for filename in files: + if filename.startswith("test_") and \ + filename.endswith(".py"): + results = self._run_test(os.path.join(root, filename)) + errors += results[0] + failures += results[1] + self.announce( + "unit test: {} errors and {} failures".format(errors, failures), + level=log.INFO) + + def _run_test(self, path): + self.announce("run tests in " + path, log.INFO) + dirname, basename = os.path.split(path) + sys.path.insert(0, dirname) + try: + modname = os.path.splitext(basename)[0] + mod = __import__(modname) + if hasattr(mod, "test_suite"): + suite = mod.test_suite() + runner = unittest.TextTestRunner(verbosity=2) + results = runner.run(suite) + return len(results.errors), len(results.failures) + else: + return (0, 0) + finally: + if sys.path[0] == dirname: + del sys.path[0] + setup(name=NAME, version=VER, + cmdclass={"test":UnitTest}, description=DESC, author='Thomas S Hatch', author_email='thatch45@gmail.com',