diff options
| author | Simon <simon@hardwired.org.uk> | 2011-03-22 17:58:52 (GMT) |
|---|---|---|
| committer | Simon <simon@hardwired.org.uk> | 2011-03-22 17:58:52 (GMT) |
| commit | 2e401babb793238564ca640fc802a52ab7f6c293 (patch) | |
| tree | 87a9b471e82604e76f96d556f5771322fb31818a /src/python/stdlib/lib-tk/test/runtktests.py | |
| parent | c096b2b14a200a0cc0a08cfea839c9e7f4edf22e (diff) | |
| parent | 04a9cbcb8855e64db660a8c6e23d79114b4afd83 (diff) | |
| download | powder-2e401babb793238564ca640fc802a52ab7f6c293.zip powder-2e401babb793238564ca640fc802a52ab7f6c293.tar.gz | |
Python console
Diffstat (limited to 'src/python/stdlib/lib-tk/test/runtktests.py')
| -rw-r--r-- | src/python/stdlib/lib-tk/test/runtktests.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/python/stdlib/lib-tk/test/runtktests.py b/src/python/stdlib/lib-tk/test/runtktests.py new file mode 100644 index 0000000..402c342 --- /dev/null +++ b/src/python/stdlib/lib-tk/test/runtktests.py @@ -0,0 +1,71 @@ +""" +Use this module to get and run all tk tests. + +Tkinter tests should live in a package inside the directory where this file +lives, like test_tkinter. +Extensions also should live in packages following the same rule as above. +""" + +import os +import sys +import unittest +import importlib +import test.test_support + +this_dir_path = os.path.abspath(os.path.dirname(__file__)) + +def is_package(path): + for name in os.listdir(path): + if name in ('__init__.py', '__init__.pyc', '__init.pyo'): + return True + return False + +def get_tests_modules(basepath=this_dir_path, gui=True, packages=None): + """This will import and yield modules whose names start with test_ + and are inside packages found in the path starting at basepath. + + If packages is specified it should contain package names that want + their tests colleted. + """ + py_ext = '.py' + + for dirpath, dirnames, filenames in os.walk(basepath): + for dirname in list(dirnames): + if dirname[0] == '.': + dirnames.remove(dirname) + + if is_package(dirpath) and filenames: + pkg_name = dirpath[len(basepath) + len(os.sep):].replace('/', '.') + if packages and pkg_name not in packages: + continue + + filenames = filter( + lambda x: x.startswith('test_') and x.endswith(py_ext), + filenames) + + for name in filenames: + try: + yield importlib.import_module( + ".%s" % name[:-len(py_ext)], pkg_name) + except test.test_support.ResourceDenied: + if gui: + raise + +def get_tests(text=True, gui=True, packages=None): + """Yield all the tests in the modules found by get_tests_modules. + + If nogui is True, only tests that do not require a GUI will be + returned.""" + attrs = [] + if text: + attrs.append('tests_nogui') + if gui: + attrs.append('tests_gui') + for module in get_tests_modules(gui=gui, packages=packages): + for attr in attrs: + for test in getattr(module, attr, ()): + yield test + +if __name__ == "__main__": + test.test_support.use_resources = ['gui'] + test.test_support.run_unittest(*get_tests()) |
