mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00

- Add requires_fork and requires_subprocess to more tests - Skip extension import tests if dlopen is not available - Don't assume that _testcapi is a shared extension - Skip a lot of socket tests that don't work on Emscripten - Skip mmap tests, mmap emulation is incomplete - venv does not work yet - Cannot get libc from executable The "entire" test suite is now passing on Emscripten with EMSDK from git head (91 suites are skipped).
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""Support functions for testing scripts in the Tools directory."""
|
|
import contextlib
|
|
import importlib
|
|
import os.path
|
|
import unittest
|
|
from test import support
|
|
from test.support import import_helper
|
|
|
|
|
|
if support.check_sanitizer(address=True, memory=True):
|
|
# bpo-46633: Skip the test because it is too slow when Python is built
|
|
# with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions.
|
|
raise unittest.SkipTest("test too slow on ASAN/MSAN build")
|
|
|
|
|
|
if not support.has_subprocess_support:
|
|
raise unittest.SkipTest("test module requires subprocess")
|
|
|
|
|
|
basepath = os.path.normpath(
|
|
os.path.dirname( # <src/install dir>
|
|
os.path.dirname( # Lib
|
|
os.path.dirname( # test
|
|
os.path.dirname(__file__))))) # test_tools
|
|
|
|
toolsdir = os.path.join(basepath, 'Tools')
|
|
scriptsdir = os.path.join(toolsdir, 'scripts')
|
|
|
|
def skip_if_missing(tool=None):
|
|
if tool:
|
|
tooldir = os.path.join(toolsdir, tool)
|
|
else:
|
|
tool = 'scripts'
|
|
tooldir = scriptsdir
|
|
if not os.path.isdir(tooldir):
|
|
raise unittest.SkipTest(f'{tool} directory could not be found')
|
|
|
|
@contextlib.contextmanager
|
|
def imports_under_tool(name, *subdirs):
|
|
tooldir = os.path.join(toolsdir, name, *subdirs)
|
|
with import_helper.DirsOnSysPath(tooldir) as cm:
|
|
yield cm
|
|
|
|
def import_tool(toolname):
|
|
with import_helper.DirsOnSysPath(scriptsdir):
|
|
return importlib.import_module(toolname)
|
|
|
|
def load_tests(*args):
|
|
return support.load_package_tests(os.path.dirname(__file__), *args)
|