summaryrefslogtreecommitdiff
path: root/lib/python2.7/lib-tk/test/runtktests.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/lib-tk/test/runtktests.py')
-rw-r--r--lib/python2.7/lib-tk/test/runtktests.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/python2.7/lib-tk/test/runtktests.py b/lib/python2.7/lib-tk/test/runtktests.py
new file mode 100644
index 0000000..d4b1893
--- /dev/null
+++ b/lib/python2.7/lib-tk/test/runtktests.py
@@ -0,0 +1,70 @@
+"""
+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 collected.
+ """
+ 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.run_unittest(*get_tests())