summaryrefslogtreecommitdiffstats
path: root/Lib/test/support/__init__.py
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2022-03-22 10:04:36 (GMT)
committerGitHub <noreply@github.com>2022-03-22 10:04:36 (GMT)
commitdeeaac49e267285158264643799624623f4a7b29 (patch)
tree27f409d7d43cf169451aa892a2363f1cac85f7df /Lib/test/support/__init__.py
parenta25a985535ccbb7df8caddc0017550ff4eae5855 (diff)
downloadcpython-deeaac49e267285158264643799624623f4a7b29.zip
cpython-deeaac49e267285158264643799624623f4a7b29.tar.gz
cpython-deeaac49e267285158264643799624623f4a7b29.tar.bz2
bpo-40280: Skip socket, fork, subprocess tests on Emscripten (GH-31986)
- 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).
Diffstat (limited to 'Lib/test/support/__init__.py')
-rw-r--r--Lib/test/support/__init__.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index fc1b86b..c5666d6 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -42,6 +42,7 @@ __all__ = [
"requires_IEEE_754", "requires_zlib",
"has_fork_support", "requires_fork",
"has_subprocess_support", "requires_subprocess",
+ "has_socket_support", "requires_working_socket",
"anticipate_failure", "load_package_tests", "detect_api_mismatch",
"check__all__", "skip_if_buggy_ucrt_strfptime",
"check_disallow_instantiation", "check_sanitizer", "skip_if_sanitizer",
@@ -520,6 +521,21 @@ def requires_subprocess():
"""Used for subprocess, os.spawn calls, fd inheritance"""
return unittest.skipUnless(has_subprocess_support, "requires subprocess support")
+# Emscripten's socket emulation has limitation. WASI doesn't have sockets yet.
+has_socket_support = not is_emscripten and not is_wasi
+
+def requires_working_socket(*, module=False):
+ """Skip tests or modules that require working sockets
+
+ Can be used as a function/class decorator or to skip an entire module.
+ """
+ msg = "requires socket support"
+ if module:
+ if not has_socket_support:
+ raise unittest.SkipTest(msg)
+ else:
+ return unittest.skipUnless(has_socket_support, msg)
+
# Does strftime() support glibc extension like '%4Y'?
has_strftime_extensions = False
if sys.platform != "win32":