Mercurial > treepkg
diff test/runtests.py @ 12:f9f15ee39ed7
New Status class that handles several fields
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Fri, 09 Mar 2007 18:23:09 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/runtests.py Fri Mar 09 18:23:09 2007 +0100 @@ -0,0 +1,72 @@ +# Copyright (C) 2007 by Intevation GmbH +# Authors: +# Bernhard Herzog <bh@intevation.de> +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +""" +Main entry point for the test suite. + +Just run this file as a python script to execute all tests +""" + +import os +import sys +import unittest +import optparse + +test_dir = os.path.dirname(__file__) +sys.path.append(os.path.join(test_dir, os.pardir)) + +def find_test_modules(dirname, package = None): + """Return a list the names of the test modules in the directory dirname + + The return value is a list of names that can be passed to + unittest.defaultTestLoader.loadTestsFromNames. Each name of the + list is the name of a pure python module, one for each file in + dirname whose name starts with 'test' and ends with '.py'. + + The optional parameter package should be the name of the python + package whose directory is dirname. If package is given all names + in the returned list will be prefixed with package and a dot. + """ + if package: + prefix = package + "." + else: + prefix = "" + + suffix = ".py" + return [prefix + name[:-len(suffix)] + for name in os.listdir(dirname) + if name.startswith("test") and name.endswith(suffix)] + + +def main(): + """Run all the tests in the test suite""" + + parser = optparse.OptionParser() + parser.set_defaults(verbosity=1) + parser.add_option("-v", "--verbose", action="store_const", const=2, + dest="verbosity") + opts, rest = parser.parse_args() + + # Build the list of test names. If names were given on the command + # line, run exactly those. Othwerwise build a default list of + # names. + if rest: + names = rest + else: + # All Python files starting with 'test' in the current directory + # and some directories in Extensions contain test cases. + # FIXME: It should be possible to run runtests.py even when not in + # the test directory + names = find_test_modules(test_dir) + suite = unittest.defaultTestLoader.loadTestsFromNames(names) + runner = unittest.TextTestRunner(verbosity=opts.verbosity) + result = runner.run(suite) + sys.exit(not result.wasSuccessful()) + + +if __name__ == "__main__": + main()