mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	
		
			
	
	
		
			59 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import os | ||
|  | 
 | ||
|  | from test.libregrtest.utils import StrPath, TestName, TestList | ||
|  | 
 | ||
|  | 
 | ||
|  | # If these test directories are encountered recurse into them and treat each | ||
|  | # "test_*.py" file or each sub-directory as a separate test module. This can | ||
|  | # increase parallelism. | ||
|  | # | ||
|  | # Beware this can't generally be done for any directory with sub-tests as the | ||
|  | # __init__.py may do things which alter what tests are to be run. | ||
|  | SPLITTESTDIRS: set[TestName] = { | ||
|  |     "test_asyncio", | ||
|  |     "test_concurrent_futures", | ||
|  |     "test_multiprocessing_fork", | ||
|  |     "test_multiprocessing_forkserver", | ||
|  |     "test_multiprocessing_spawn", | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | def findtestdir(path=None): | ||
|  |     return path or os.path.dirname(os.path.dirname(__file__)) or os.curdir | ||
|  | 
 | ||
|  | 
 | ||
|  | def findtests(*, testdir: StrPath | None = None, exclude=(), | ||
|  |               split_test_dirs: set[TestName] = SPLITTESTDIRS, | ||
|  |               base_mod: str = "") -> TestList: | ||
|  |     """Return a list of all applicable test modules.""" | ||
|  |     testdir = findtestdir(testdir) | ||
|  |     tests = [] | ||
|  |     for name in os.listdir(testdir): | ||
|  |         mod, ext = os.path.splitext(name) | ||
|  |         if (not mod.startswith("test_")) or (mod in exclude): | ||
|  |             continue | ||
|  |         if mod in split_test_dirs: | ||
|  |             subdir = os.path.join(testdir, mod) | ||
|  |             mod = f"{base_mod or 'test'}.{mod}" | ||
|  |             tests.extend(findtests(testdir=subdir, exclude=exclude, | ||
|  |                                    split_test_dirs=split_test_dirs, | ||
|  |                                    base_mod=mod)) | ||
|  |         elif ext in (".py", ""): | ||
|  |             tests.append(f"{base_mod}.{mod}" if base_mod else mod) | ||
|  |     return sorted(tests) | ||
|  | 
 | ||
|  | 
 | ||
|  | def split_test_packages(tests, *, testdir: StrPath | None = None, exclude=(), | ||
|  |                         split_test_dirs=SPLITTESTDIRS): | ||
|  |     testdir = findtestdir(testdir) | ||
|  |     splitted = [] | ||
|  |     for name in tests: | ||
|  |         if name in split_test_dirs: | ||
|  |             subdir = os.path.join(testdir, name) | ||
|  |             splitted.extend(findtests(testdir=subdir, exclude=exclude, | ||
|  |                                       split_test_dirs=split_test_dirs, | ||
|  |                                       base_mod=name)) | ||
|  |         else: | ||
|  |             splitted.append(name) | ||
|  |     return splitted |