mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 f299abdafa
			
		
	
	
		f299abdafa
		
	
	
	
	
		
			
			The concept of .pyo files no longer exists. Now .pyc files have an optional `opt-` tag which specifies if any extra optimizations beyond the peepholer were applied.
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| 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.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'):
 | |
|             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.%s" % (pkg_name, name[:-len(py_ext)]),
 | |
|                         "tkinter.test")
 | |
|                 except 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.support.run_unittest(*get_tests())
 |