From 8a060232a9ca770d898eb0dc9cf4b4e174bf3f8a Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 9 Oct 2019 19:50:56 +0100 Subject: [PATCH] mdwsetup.py: Add a command for running tests. --- mdwsetup.py | 42 ++++++++++++++++++++++++++++++++++++++++++ pysetup.mk | 2 ++ 2 files changed, 44 insertions(+) diff --git a/mdwsetup.py b/mdwsetup.py index 0bce572..55120fb 100644 --- a/mdwsetup.py +++ b/mdwsetup.py @@ -288,6 +288,46 @@ class build (_build, Command): sub_commands = [('build_gen', lambda me: me.distribution.genfiles)] sub_commands += _build.sub_commands +class test (Command): + """ + Run unit tests, according to the `unittests'. + + The `unittests' keyword argument to `setup' lists module names (or other + things acceptable to the `loadTestsFromNames' test-loader method) to be + run. The build library directory is prepended to the load path before + running the tests to ensure that the newly built modules are tested. If + `unittest_dir' is set, then this is appended to the load path so that test + modules can be found there. + """ + NAME = "test" + description = "run the included test suite" + + user_options = \ + [('build-lib=', 'b', "directory containing compiled moules"), + ('tests=', 't', "tests to run"), + ('verbose-test', 'V', "run tests verbosely")] + + def initialize_options(me): + me.build_lib = None + me.verbose_test = False + me.tests = None + def finalize_options(me): + me.set_undefined_options('build', ('build_lib', 'build_lib')) + def run(me): + import unittest as U + d = me.distribution + SYS.path = [me.build_lib] + SYS.path + if d.unittest_dir is not None: SYS.path.append(d.unittest_dir) + if me.tests is not None: tests = me.tests.split(",") + else: tests = d.unittests + suite = U.defaultTestLoader.loadTestsFromNames(tests) + runner = U.TextTestRunner(verbosity = me.verbose_test and 2 or 1) + if me.dry_run: return + result = runner.run(suite) + if result.errors or result.failures or \ + getattr(result, "unexpectedSuccesses", 0): + SYS.exit(2) + class clean_gen (Command): """ Remove the generated files, as listed in `genfiles'. @@ -351,6 +391,8 @@ class Dist (DC.Distribution): ## our enhanced commands. def __init__(me, attrs = None): me.genfiles = [] + me.unittest_dir = None + me.unittests = [] me.cleanfiles = [] me._auto_version_p = False DC.Distribution.__init__(me, attrs) diff --git a/pysetup.mk b/pysetup.mk index c828b02..70af80b 100644 --- a/pysetup.mk +++ b/pysetup.mk @@ -35,6 +35,8 @@ PYTARGETS += install OPTS-install += --prefix $(prefix) PYTARGETS += check +CMD-check ?= test +$(foreach p,$(PYTHONS),check/$p):: check/%: all/% ###-------------------------------------------------------------------------- ### Interfacing `setup.py' to make. -- 2.11.0